Einzelnen Beitrag anzeigen

Kyro

Registriert seit: 16. Aug 2005
Ort: Wien
45 Beiträge
 
Delphi XE2 Professional
 
#1

Probleme mit Skalierung (DPI) bei - zur Laufzeit erstellter - Controls

  Alt 4. Nov 2014, 00:14
Ich versuche seit längerem eine Anwendung für höhere DPI-Skalierungen (120, 144, 192 dpi) fit zu machen...

Leider stellte ich jetzt erst heraus dass jedes Controls und sogar ganze Frames(!) die während der Laufzeit erstellt werden im Gegensatz zu den Design-Controls auf dem Formular (Mainform.Scaled=True) gar nicht auf die höhere DPI-Einstellung des Betriebssystems skaliert werden

Hat jemand eine Idee wie ich Windows dazu bringe diese Controls nachträglich zu skalieren, oder muss ich etwas anderes beim erstellen der Controls achten? (siehe Beispiel)

1) Einen Button auf die Form legen - (Width=75, Height=25, Left=100, Top=5 Caption='Button #1')
2) Im FormCreate...
Code:
procedure TMainform.FormCreate(Sender: TObject);
var RuntimeButton: TButton;
begin
  RuntimeButton := TButton.Create(Mainform);
  RuntimeButton.top := 5;
  RuntimeButton.Left := 5;
  RuntimeButton.Height := 25;
  RuntimeButton.Width := 75;
  RuntimeButton.caption := 'Button #2';
  RuntimeButton.Parent := Mainform;
end;
3) Nun das ganze auf einem PC laufen lassen auf dem z.B.: 120dpi (125%) eingestellt sind
(Meine Erwartung wäre dass die beiden Buttons gleich groß sind, leider ist Button #2 bei mir kleiner bzw. nicht skaliert)

Die komplette Skalierung selbst zu übernehmen (Mainform.Scaled=False + ScaleBy? verwenden) wäre für mich auch OK bzw. sogar wünschenswert weil man damit ja auch während der Laufzeit "frei" skalieren könnte... Allerdings scheitern meine Versuche darin das dann etliche Controls - trotz richtig gesetzter Anchors - für mich nicht nachvollziehbar überlappen. (Was nicht passiert wenn Scaled=True und der Frame im Design eingebunden wurde)

(OS=Windows 7, Windows 8.1, Delphi XE2)
  Mit Zitat antworten Zitat