Form in Panel einbetten zeigt WIN7 statt WIN10 Caption

Rund um die LCL und andere Komponenten
Antworten
kirchfritz
Beiträge: 172
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Form in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von kirchfritz »

Hallo,
ich habe auf meiner MainForm ein Panel. Auf dieses Panel möchte ich zur Laufzeit eine zweite Form einbetten.
Dies mache ich mit folgendem Code:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Hide;
  Form2.BorderStyle:=bsSingle;
  Form2.Parent := Panel1;
  Form2.Align := alClient;
  Form2.Show;
end;
Das klappt soweit ganz gut, nur wird die zweite Form im Panel mit einer Caption dargestellt, die ich so nur aus WIN7 Zeiten kenne.
Ich habe unter WIN10 erwartet, dass die Caption der eingebetten Form auch wie die Caption der MainForm im WIN10-Style dargestellt wird. Was mache ich falsch?

Ich arbeite mit Lazarus 2.0.10 FPC 3.2.0 unter WIN10 64bit
Screenshot habe ich mit angehängt.

Fritz
Dateianhänge
Mainform_mit_eingebetteter_secondform.PNG
Mainform_mit_eingebetteter_secondform.PNG (13.92 KiB) 2195 mal betrachtet

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

Re: Form in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von Michl »

Das MDI-Konzept ist seit 15 Jahren deprecated, d.h. wird nicht mehr unterstützt. Siehe z.B. https://stackoverflow.com/questions/319 ... windows-10

Code: Alles auswählen

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

Mathias
Beiträge: 6208
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Form in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von Mathias »

Das MDI-Konzept ist seit 15 Jahren deprecated, d.h. wird nicht mehr unterstützt.
Eigentlich schade, das es dies nicht mehr gibt.
Dies war mal ein Highlight von Win3.1 . Ich mag mich da noch gut an den Programmanger erinnern.
Auch Turbo-Pascal hatte dies mit FreeVision.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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 in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von Winni »

Hallo Matthias!

Dein gezeigter Code hat nichts mit MDI zu tun und ist völlig legal.

So wie Du Deine Form einbettest, geht InkScape mit den diversen Dialog-Formularen (Text, Farbe, Ausrichten ....) um.
Gimp hingegen lässt seine Dialog-Felder frei herumfliegen. Geht auch.

Dass angeblich eine "Win7 Caption" gezeigt wird, liegt bestimmt am Borderstyle ;= bsSingle;
Setzt den mal testweise auf bsSizeable - der müsste dann auch eine "Win10 Caption" besitzen.

Ich habe schon oft eine zweite Form in der ersten gehostet. Geht prima, wenn man beachtet dass es eben jeweils eine TForm ist.

Grüße,
Winni
Zuletzt geändert von Winni am Mo 27. Jul 2020, 19:24, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: Form in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von wp_xyz »

Wenn ich in Delphi 10.3 Community Edition ein MDI-Projekt erstelle, dann haben die MDI-Children übrigens auch den Win7-Rahmen. Scheint also kein Lazarus-Problem zu sein.

-------------
Michl hat geschrieben:
Mo 27. Jul 2020, 00:45
Das MDI-Konzept ist seit 15 Jahren deprecated, d.h. wird nicht mehr unterstützt. Siehe z.B. https://stackoverflow.com/questions/319 ... windows-10
Dennoch hat Ondrej Pokorny vor ein paar Monaten Code zur Verbesserung von MDI committet. Hab's allerdings selbst nicht getestet.

kirchfritz
Beiträge: 172
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 in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von kirchfritz »

Hallo Winni,

wenn man die borderstyle testweise auf bsSizable stellt, ändert sich nichts.
Die Caption ist unverändert im WIN7-Style.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Hide;
  Form2.BorderStyle:=bsSizeable;
  Form2.Parent := Panel1;
  Form2.Align := alClient;
  Form2.Show;
end;

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 in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von Winni »

Hallo kirchfritz!

Da hast Du es ,ja noch gut!

Ich hab das Ganze gerade mal unter Linux/GTK getestet:

Egal was man für einen BorderStyle einstellt:
Er zeigt einfach keinen TitleBar - und zwar in dem Moment, wo man der Form2 einen Parent gibt .

Also soll das wohl so sein.
Ich hör schon die nervige Antwort leise in der Ferne:
Delphi-Kompatibilität!

Grüße, Winni

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 in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von Winni »

Hallo!

Und so sieht es in Win7 aus:

Winni
Dateianhänge
Form_in_Form.Win7png.png
Form_in_Form.Win7png.png (15.79 KiB) 1989 mal betrachtet

kirchfritz
Beiträge: 172
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 in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von kirchfritz »

Hallo Winni,
und sehr interessant ist auch, dass die eingebettete Form, obwohl

Code: Alles auswählen

Form2.Align := alClient
gesetzt wurde, nicht vollständig bzw. nicht richtig im ParentPanel dargestellt wird. Der rechte und der untere Rand sind schlichtweg abgeschnitten.
Hier müsste man

Code: Alles auswählen

Form2.Align := alNone
setzen und mit

Code: Alles auswählen

Form2.SetBounds
die Höhe und Breite der eingebetteten Form an die Höhe und Breite des ParentPanels anpassen. Als Workaround für die falsche Größenberechnung müsste man aber trotzdem selbst die Strichstärke des Fensterrahmens berechnen, um eine korrekte vollständig eingebette Form zu bekommen.
Ich fürchte, vom Konzept "Form in Form einbetten" sollte man lieber die Finger lassen.
Wenn man aber auf die Rahmendarstellung vollständig verzichtet, also mit

Code: Alles auswählen

Form2.borderstyle := bsNone
arbeitet, dann funktioniert "Form in Form" hervorragend.

PascalDragon
Beiträge: 834
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 in Panel einbetten zeigt WIN7 statt WIN10 Caption

Beitrag von PascalDragon »

Winni hat geschrieben:
Mi 29. Jul 2020, 17:05
Also soll das wohl so sein.
Ich hör schon die nervige Antwort leise in der Ferne:
Delphi-Kompatibilität!
Das hat erstmal nichts mit Delphi-Kompatibilität zu tun, sondern einfach wie das Zeichnen der Fenster vom Betriebssystem und dem WidgetSet behandelt wird. Im Windows Fall wird der Non-Client-Bereich von Windows mitgezeichnet, da Windows hier die volle Kontrolle hat. Unter X11 wird der Non-Client Bereich jedoch vom Window Manager gezeichnet. Gibt man einem X11 Fenster nun einen anderen Parent als das Root Fenster, so zeichnet der Window Manager den Non-Client Bereich nicht mehr, da er sich nicht mehr zuständig sieht.
FPC Compiler Entwickler

Antworten