Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#1

TPopupMenu mit HighDPI und Form-in-Panel Problem

  Alt 17. Mär 2020, 18:41
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?
Miniaturansicht angehängter Grafiken
form1-correct.png   form2-incorrect.png   form2-withoutimages.png  
Angehängte Dateien
Dateityp: zip Vcl Menu HighDPI.zip (6,2 KB, 8x aufgerufen)
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat