Ich habe leider ein Problem mit Delphi 10.3.1 festgestellt, bei dessen Lösung/Workaround ich um Eure Hilfe bitten möchte. (ich weiß nicht, ob es bei 10.3.3 auch noch so ist...)
Ich lade Form2 in einem Panel in Form1:
Delphi-Quellcode:
Form2.Parent := Panel1;
Form2.BorderStyle := bsNone;
Form2.Align := alClient;
Form2.Show;
Starte ich die Anwendung auf einem Bildschirm mit HighDPI wie z.B. 150%, dann funktioniert alles bis auf eine Ausnahme korrekt. Das einzige Problem sind die PopupMenus, die auf Form2 enthalten sind. Bei diesen werden zwar die Bilder und Item-Höhen korrekt skalliert, nicht jedoch die Schriftgröße.
PopupMenu auf Form1:
PopupMenu auf Form2:
Skurril: Wenn das PopupMenu auf Form2 keine Bilder enthält, dann ist die Schriftgröße wiederrum korrekt:
Nach einigem Ausprobieren habe ich festgestellt, dass es daran liegt, ob der Owner die Hauptform ist oder die im Panel geladene Form. Ich könnte natürlich alle PopupMenus, die irgendwo in meinem Programm vorkommen, auf die Hauptform legen, aber das möchte ich nicht. Als Alternative habe ich herausgefunden, dass es reichen würde, den Owner jedes einzelnen PopupMenus zur Laufzeit zu verlegen:
Delphi-Quellcode:
Self.InsertComponent(Form2.PopupMenu2);
Form2.Memo1.PopupMenu := Self.FindComponent('PopupMenu2') as TPopupMenu;
Das funktioniert dann zwar, aber es fühlt sich auch nicht richtig an.
Im Anhang füge ich das kleine Beispielprojekt zum Überprüfen an. Der Monitor muss natürlich entsprechend mit mehr als 100% eingestellt sein, um das Problem nachzuvollziehen.
Sieht jemand eine bessere Möglichkeit, das Problem zu lösen?