2014-01-08 14 views
7

Ich dachte, eine Anwendung in FireMonkey skalieren sollte einfach sein, wie es auch ein Retina-Mac funktionieren soll. Es scheint, dass es Hintergrundmagie gibt, die einen anderen Stil wählt, aber das scheint in Windows nicht der Fall zu sein.Delphi Firemonkey Maßstab für High DPI Windows

In VCL gab es TForm.Scaled, die die Arbeit (mehr oder weniger).

Für FireMonkey habe ich diese Article by Embarcadero gefunden, aber es scheint Embarcadero ist nicht ganz sicher, ob dieser Ansatz sinnvoll ist, da in XE5 das Beispielprojekt "ControlsDemo" die Scale-Trackbar nicht mehr enthält. Außerdem muss in allen Formularen, für die der Skalierungsfaktor festgelegt werden kann, ein Root-TLayout vorhanden sein. Ich habe so ein Element in meinen Formen nicht (und ich habe Angst, eins hinzuzufügen, weil ich nicht sicher sein kann, wenn ich in einem anderen Feuermonkey-Programmlauf als laufe).

Also, wie kann ich verschiedene DPI-Einstellungen mit FireMonkey berücksichtigen?

Edit: Ich habe versucht, TPlatFormWin und setzen CurrentScreenScale 2 Hacking, aber es hat nicht funktioniert: Ich schwarze Symbolleisten bekam, aber keine Skalierung, aber zumindest verwendet er die HighRes Alternative aus dem bereitgestellten TImage.MultiResBitmap.

+0

Haben Sie also einen Monitor mit hoher Auflösung oder versuchen Sie, auf einer normalen 96-dpi-Anzeige zu simulieren? –

+1

Beide ;-) Ich habe ein HighDPI Windows Tablet und simuliere auf dem PC über Schrifteinstellungen. –

+2

Leider wurden die vektorbasierten Stile, auf die in diesem Artikel Bezug genommen wird, in XE3 durch Bitmap-basierte ersetzt (oder genauer: die 'Plattform'-Stile sind jetzt Bitmap-basiert). Daher werden 'Retina'-Displays jetzt unterstützt, indem * zwei * Sets von Mac-Bitmap-Styles hinzugefügt werden, anstatt irgendeine Eigenauflösungsunabhängigkeit des Style-Formats selbst. Wenn Sie mit einem benutzerdefinierten Stil einverstanden sind, haben Sie einen der benutzerdefinierten Stile ausprobiert, die mit dem Produkt geliefert wurden? Die meisten sind immer noch Vektor-basierte IIRC. –

Antwort

0

U kann so etwas tun die Wurzel TLayout zu ändern:

mit 100 Standard sein

if windowsscale>0 then begin 
    LayoutScale.height:=ClientHeight*100/windowsscale; 
    LayoutScale.Width :=Clientwidth*100/windowsscale; 
    LayoutScale.Scale.X:=windowsscale/100; 
    LayoutScale.Scale.Y:=windowsscale/100; 
end; 
0

Wenn jemand dies liest ... meine Erfahrung mit Windows-Desktop Firemonkey ist, dass Sie auf Achten Sie darauf, dass die DPI-Einstellungen des Betriebssystems manuell vorgenommen werden, und es ist in Ordnung, Ihre Steuerelemente in einen oberen Container (ein TLayout) zu stellen, dessen Skalierung gemäß den DPI-Einstellungen des Betriebssystembildschirms eingestellt ist (bestimmt mit einem Low-Level-Code). Es gibt jedoch Fälle, in denen Sie diese Skalierung rückgängig machen müssen - zum Beispiel muss ein Viewport3D um 1/X verkleinert werden, damit es im vergrößerten Container korrekt angezeigt wird. Andernfalls werden Pixel-Level-Artefakte angezeigt, die Bildqualität ist schrecklich. Diese Scale-Up/Scale-Back-Technik funktioniert gut.

Verwandte Themen