Form mit einfachem Rahmen

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Form mit einfachem Rahmen

Beitrag von braunbär »

Hallo,
Ich bin dabei, eine Unit von Delphi nach Lazarus/Free Pascal zu konvertieren. Es beinhaltet ein Formular, dem ich gerne die Titelleiste wegnehmen würde. Der Delphi Code, der einwandfrei funktioniert hat, schaut so aus (ist nicht von mir erfunden):

Code: Alles auswählen

procedure TDialog.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style or WS_POPUP or WS_THICKFRAME;
Params.ExStyle := WS_EX_TOOLWINDOW;
SpecialPosition:=false;
SpecialTimeout:=0;
StandardIcon:=true;
end;   
Leider verschwindet unter freePascal nicht nur die Titelleiste, sondern der komplette Rahmen der Form. Eigentlich verstehe ich das nicht, weil ich meinen würde, dass diese Parameter 1:1 an Windows weitergegeben werden, da sollte doch egal sein, ob die Form von Free Pascal oder von Delphi erzeugt wird.
Wie kann ich unter Lazarus/Free Pascal ein Formular ohne Titelleiste, aber mit Rahmen erzeugen?

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Form mit einfachem Rahmen

Beitrag von Winni »

Hi!

Wie man den Rahmen entfernt, weisst Du jetzt.

So zeichnet man seinen eigenen Rahmen:

Code: Alles auswählen

procedure TForm1.FormPaint(Sender: TObject);
begin
   Canvas.pen.color := clRed;
   Canvas.pen.width := 3;
   Canvas.Rectangle(1,1,width-1,height-1);
end;  
Kann man auch hübscher machen.
Aber dafür bis Du jetzt zuständig.


Winni

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Form mit einfachem Rahmen

Beitrag von braunbär »

OK, danke, das ist eine Notlösung, an die ich nicht gedacht habe.
Aber nachdem es unter Delphi möglich ist, sollte es doch auch unter FP möglich sein, Windows einen Rahmen ohne Titelleiste zeichnen zu lassen, der dann auch zum Style des jeweiligen Windows passt (flach, nicht flach, ganz schmal oder etwas breiter, etc...)?

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Form mit einfachem Rahmen

Beitrag von PascalDragon »

braunbär hat geschrieben:
Fr 13. Nov 2020, 18:09
Wie kann ich unter Lazarus/Free Pascal ein Formular ohne Titelleiste, aber mit Rahmen erzeugen?
Du könntest mit BorderStyle und BorderIcons rumspielen. Ansonsten empfehle ich dir einen Bug hinsichtlich CreateParams zu melden (mit einem Beispiel und vielleicht auch Screenshots).
FPC Compiler Entwickler

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Form mit einfachem Rahmen

Beitrag von Winni »

Hallo!

Du kannst Dir auch den 3D Rahmen für Arme selbst machen, wie z,B. das Panel bei entsprechenden Bevel-Einstellungen macht:

h= hell d=dunkel .=nix weil er doppelte Leezeichen weglöscht

Code: Alles auswählen

hhhhhhhhhhd
hddddddddhd
hd       hd
hd       hd
hdhhhhhhhhd
ddddddddddd

Wieso gibt es hier kein monospaced Font?

Winni
Zuletzt geändert von m.fuchs am So 15. Nov 2020, 13:28, insgesamt 1-mal geändert.
Grund: Code Higlighter hinzugefügt

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Form mit einfachem Rahmen

Beitrag von PascalDragon »

Winni hat geschrieben:
Sa 14. Nov 2020, 17:51
Wieso gibt es hier kein monospaced Font?
Das frage ich mich auch öfters... [ code ] ist meistens einfach zu viel des Guten... :roll:
FPC Compiler Entwickler

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Form mit einfachem Rahmen

Beitrag von m.fuchs »

PascalDragon hat geschrieben:
So 15. Nov 2020, 12:33
Winni hat geschrieben:
Sa 14. Nov 2020, 17:51
Wieso gibt es hier kein monospaced Font?
Das frage ich mich auch öfters... [ code ] ist meistens einfach zu viel des Guten... :roll:
Wieso? genau dafür ist code doch perfekt. Hab den Beitrag mal angepasst.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Form mit einfachem Rahmen

Beitrag von Michl »

braunbär hat geschrieben:
Fr 13. Nov 2020, 18:09
Leider verschwindet unter freePascal nicht nur die Titelleiste, sondern der komplette Rahmen der Form. Eigentlich verstehe ich das nicht, weil ich meinen würde, dass diese Parameter 1:1 an Windows weitergegeben werden, da sollte doch egal sein, ob die Form von Free Pascal oder von Delphi erzeugt wird.
Wie kann ich unter Lazarus/Free Pascal ein Formular ohne Titelleiste, aber mit Rahmen erzeugen?
Das ist ein bekanntes Problem. Aufgrund der Plattformunabhängigkeit wird versucht nur die Paramater zu nutzen, die überall vorhanden sind, sprich die LCL. Siehe auch procedure CalcFormWindowFlags in Win32WSForms (da verschwinden dann die manuell gesetzen Parameter).

Der von dir verwendete Code von Delphi funktioniert daher nur auf Windows.
Ein anderer Windows only Workaround wäre der Code von hier: https://forum.lazarus.freepascal.org/in ... #msg152014

Bsp.:

Code: Alles auswählen

uses ..., windows;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := '';
  BorderIcons := [];
  BorderStyle := bsSizeable;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not(WS_DLGFRAME));
  MoveWindow(Handle, Left, Top, Width-1, Height, True);
end; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

kirchfritz
Beiträge: 169
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: Form mit einfachem Rahmen

Beitrag von kirchfritz »

doof ist nur, dass der Code zwar eine titlelose Form produziert, aber oben ein weißer Rand zu sehen ist (WIN10),
Siehe Dateianhang.
Dateianhänge
2020-11-15_22-45-14.png
2020-11-15_22-45-14.png (56.36 KiB) 4420 mal betrachtet

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Form mit einfachem Rahmen

Beitrag von PascalDragon »

m.fuchs hat geschrieben:
So 15. Nov 2020, 13:28
PascalDragon hat geschrieben:
So 15. Nov 2020, 12:33
Winni hat geschrieben:
Sa 14. Nov 2020, 17:51
Wieso gibt es hier kein monospaced Font?
Das frage ich mich auch öfters... [ code ] ist meistens einfach zu viel des Guten... :roll:
Wieso? genau dafür ist code doch perfekt. Hab den Beitrag mal angepasst.
Ja, gut, für diesen Fall passt es. Im Englischen Forum nehme ich aber sehr gerne [ tt ], um einfach nur Bezeichner im Fließtext hervorzuheben. Hier ist [ code ] definitiv nicht das was mir vorschwebt.
FPC Compiler Entwickler

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Form mit einfachem Rahmen

Beitrag von sstvmaster »

kirchfritz hat geschrieben:
So 15. Nov 2020, 22:49
doof ist nur, dass der Code zwar eine titlelose Form produziert, aber oben ein weißer Rand zu sehen ist (WIN10),
Siehe Dateianhang.
Das scheint "Normal" zu sein. Das ist bei anderen Programmen die hier auf meinem PC installiert sind, auch so.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Form mit einfachem Rahmen

Beitrag von braunbär »

Michl hat geschrieben:
So 15. Nov 2020, 21:39
Ein anderer Windows only Workaround wäre der Code von hier: https://forum.lazarus.freepascal.org/in ... #msg152014
Danke, werde ich ausprobieren. Mit dem weißen Streifen om oberen Rand kann ich leben.

Warum nur "die Parameter genutzt werden, die überall vorhanden sind", erschließt sich mir nicht. Man handelt sich damit eine Inkompatibilität zu Delphi ein, für deren Vermeidung andernorts alle möglichen Verrenkungen gemacht werden (was jetzt gar nicht negativ gemeint ist), und gewinnt damit genau was? Wenn das unter anderen Plattformen nicht funktioniert, wäre eine Portabilitätswarnung angebracht, aber doch nicht ein komplettes Blockieren der Feature!

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Form mit einfachem Rahmen

Beitrag von Winni »

braunbär hat geschrieben:
Mo 16. Nov 2020, 17:43

Danke, werde ich ausprobieren. Mit dem weißen Streifen om oberen Rand kann ich leben.
Hi !
Musst Du aber nicht leben.

Mach einen Screenshot von dem derzeitigen Zustand.
Lade den Screenshot in den Gimp und vergrößere irgend ein Stück Rand.


Stelle fest
a) wieviele Pixel breit der bisherige Rand ist
b) welche Farben die verschiedenen Linien vom Rand haben (Pipette),

Und dann kannst Du im OnPaint event den obere Rand selbst "pinseln".

Winni

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Form mit einfachem Rahmen

Beitrag von braunbär »

Das Problem ist (ich glaube ich habe das schon ein paar mal gesagt), dass ich das Fenster gerne in dem "Style" hätte, in dem Windows normale Fenster zeichnet, das ist nicht in allen Umgebungen gleich. Wenn ich "selber pinsle", werde ich das nicht erreichen.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Form mit einfachem Rahmen

Beitrag von Winni »

Hi!

Natürlich kannst Du das!
Aber wenn Dir der dusslige Rahmen derart wichtig ist, dann must Du da auch Arbeit reinstecken.
Und nicht auf den magischen Parameter hoffen.

Als erstes muss Du Dir genau ansehen, wie den die Rahmen unter Win95/ WinXP/ Win7 /Win10 und was Du noch so brauchst, vom OS gezeichnet werden.

Und dann pinselst Du das nach.
Trivial, aber mit Arbeit verbunden.

Winni

Antworten