![]() |
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:
Dies klappte bisher problemlos und auch mit D11.2 klappt es prinzipiell.
procedure TForm1.Button1Click(Sender: TObject);
begin Form2.Parent := Panel1.Parent; Form2.Align := alClient; Form2.Borderstyle := bsNone; Form2.Windowstate := wsMaximized; Form2.Show; end; 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? |
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.
|
AW: Form einem Panel zuweisen
Hast du es schon mal ohne Form2.Windowstate := wsMaximized probiert?
Frank |
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:
Um eine Freigabe von Form brauchst Du Dich nicht zu kümmern, das übernimmt Form1.
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; |
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 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz