Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Form einem Panel zuweisen (https://www.delphipraxis.net/212179-form-einem-panel-zuweisen.html)

blawen 30. Dez 2022 16:44

Delphi-Version: 11 Alexandria

Form einem Panel zuweisen
 
Liste der Anhänge anzeigen (Anzahl: 1)
In der Vergangenheit habe ich statt Frames normale Formulare verwendet und diese jeweils in einem Panel im Hauptformular eingeblendet.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Parent     := Panel1.Parent;
  Form2.Align      := alClient;
  Form2.Borderstyle := bsNone;
  Form2.Windowstate := wsMaximized;
  Form2.Show;
end;
Dies klappte bisher problemlos und auch mit D11.2 klappt es prinzipiell.
Aber sobald ich in einer Umgebung mit unterschiedlichen Monitorauflösungen arbeite (4k, 200% / HD, 100%), funktioniert dieser Ansatz nur noch bedingt.

Ein minimales Beispiel habe ich angehängt:
- Sobald der Monitor gewechselt wird, wird die eingeblendete Form2 nicht mehr angezeigt - es ist lediglich die Form1 sichtbar
- In einer 1 Monitor-Umgebung geschieht dies i.d.R., wenn der Bildschirmschoner zugeschlagen, bzw. der Monitor abgeschaltet hat.
- Ab und an geschieht es, dass das Programm nicht mehr bedient werden kann.
- Wenn ich in den Projektoptionen die "DPI-Unterstützung" ausschalte, funktioniert das Programm wie erwartet.

Das eigentliche Programm ist über die letzten Jahre und IDE's gewachsen und diesbezüglich hatte ich vor D11.x keine Probleme.
Ist es effektiv ein Bug von D11.(2) oder habe ich beim zuweisen etwas wichtiges vergessen, welches sich wegen der Thematik 4k erst jetzt auswirkt?

KodeZwerg 30. Dez 2022 22:36

AW: Form einem Panel zuweisen
 
Ich könnte mir gut vorstellen das bei solch einem vorgehen die message-chain (die auf system messages reagiert) kaputt geht bzw nicht für das "panel-formular" greift.

dataspider 2. Jan 2023 08:52

AW: Form einem Panel zuweisen
 
Hast du es schon mal ohne Form2.Windowstate := wsMaximized probiert?

Frank

TBx 2. Jan 2023 09:44

AW: Form einem Panel zuweisen
 
Dein Problem liegt vermutlich im falschen Parent.
Du weist Deiner Form2 den Parent von Panel1 als Parent zu. Da solltest Du Panel1 als Parent zuweisen.
Ich gehe davon aus, dass Deine Form2 auch bei den verschiedenen Monitorauflösungen angezeigt wird, aber von Panel1 verdeckt wird.

Auch halte ich es für keine gute Idee, ein global erzeugtes Form auf diese Art einzubinden. Verwendet man dieses Globale Form an verschiedenen Stellen, kann das unerwünschte Effekte haben.

Wie sieht es mit diesem Ansatz aus:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Form: TForm2;
begin
  Form := TForm2.Create(self);
  Form.Parent     := Panel1;
  Form.Align      := alClient;
  Form.Borderstyle := bsNone;
  Form.visible := True;
end;
Um eine Freigabe von Form brauchst Du Dich nicht zu kümmern, das übernimmt Form1.

BerndS 2. Jan 2023 10:24

AW: Form einem Panel zuweisen
 
Ich habe bisher noch nie ein Form in ein Panel gelegt.
Aber ich vermute mal, dass die Message WM_DPICHANGED vom Haupformular nicht bei dem Form im Panel ankommt und es so nicht selber skaliert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz