High DPI/de
│
Deutsch (de) │
English (en) │
español (es) │
русский (ru) │
Definition
Jede benutzerdefinierte Textgröße (DPI) mit mehr als 96 DPI (Standard) *.
Benutzerdefinierte Textgröße (High DPI) in Windows festlegen
Unter Windows 7 gehen Sie zu Systemsteuerung > Darstellung und Anpassung > Anzeige. Wählen Sie: Kleiner 100% (Standard), Mittel 125% oder Größer 150%. Wenn Sie 100% (96 DPI) ausgewählt haben, ist das die Standardeinstellung von Windows für den DPI-Wert, aber nicht High DPI. Bei 125% (120 DPI) ist die Option "DPI-Skalierung im Stil von Windows XP verwenden" aktiviert, Anwendungen werden unter diesen Einstellungen wie bei Windows XP skaliert. Bei 150% (144 DPI) ist die Option "DPI-Skalierung im Stil von Windows XP verwenden" deaktiviert (die DPI Virtualisierung ist aktiviert), Anwendungen die mit dieser Einstellung ablaufen müssen selbst die Hochauflösung verwalten ("High DPI Awareness") ansonsten liefert die Skalierung des Systems ein verwischtes, unscharfes Bild. Sie können den DPI-Wert auch mit dem Dialog "Benutzerdefinierte Textgröße (DPI) festlegen" einstellen und die DPI Virtualisierung aktivieren/ deaktivieren.
Hochauflösender Text in Lazarus
Mit Lazarus erzeugen Sie eine Anwendung für hochauflösende Schriftgrößen unter Windows 7 mit den folgenden Schritten. Wir benutzen nicht ScaleBy & ScaleControls, weil diese sehr fehlerbehaftet sind.
SCHRITT 1 - High DPI Awareness deklarieren
Dazu brauchen Sie eine Manifest-Datei die diese Deklaration enthält. Mit der neuesten Lazarus Unterversion erreichen Sie dies mit Ansicht > Projekteinstellungen > dann wählen Sie die Optionen "Themen mit Manifest-Datei einschalten (nur in Windows)" und "dpi-abhängige Anwendung (für Vista +)".
Andernfalls kopieren Sie den untenstehenden Code und speichern ihn in einer Textdatei names "manifest.xml":
<xml><?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><description>Windows Shell</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application>
</assembly></xml>
Speichern Sie die folgende Codezeile in einer Textdatei namens "manifest.rc":
1 24 "manifest.xml"
Dann kopieren Sie beide Dateien in den Hauptordner Ihres Projekts:
MyProject\manifest.xml MyProject\manifest.rc
Und schließen Sie sie in Ihrem Projekt ein:
<delphi>implementation
{$R *.lfm} {$R manifest.rc} // Durch dieses Windows Manifest werden Themen und High DPI aktiviert</delphi>
SCHRITT 2 - Skalieren der Formulare und Steuerelemente
Dazu rufen Sie die folgende Prozedur 'ScaleDPI' im Ereignis 'OnCreate' eines jeden Formulars aus Ihrem Projekt auf.
Kopieren Sie zuerst den nachfolgenden Code und speichern Sie ihn in einer Textdatei als "uscaledpi.pas":
<delphi>unit uscaledpi;
{$mode objfpc}{$H+}
interface
uses
Graphics, Controls;
procedure ScaleDPI(Control: TControl; FromDPI: Integer);
implementation
procedure ScaleDPI(Control: TControl; FromDPI: Integer); var
n: Integer; WinControl: TWinControl;
begin
with Control do begin Left:=ScaleX(Left,FromDPI); Top:=ScaleY(Top,FromDPI); Width:=ScaleX(Width,FromDPI); Height:=ScaleY(Height,FromDPI); end; if Control is TWinControl then begin WinControl:=TWinControl(Control); if WinControl.ControlCount > 0 then begin for n:=0 to WinControl.ControlCount-1 do begin if WinControl.Controls[n] is TControl then begin ScaleDPI(WinControl.Controls[n],FromDPI); end; end; end; end;
end;
end.</delphi>
Kopieren Sie diese Datei "uscaledpi.pas" in den Hauptordner Ihres Projekts:
MyProject\uscaledpi.pas
Fügen Sie im Abschnitt "uses" von Ihrem Projekt den Ausdruck "uScaleDPI" hinzu:
<delphi>unit form1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, uScaleDPI; // This includes ScaleDPI procedure </delphi>
Das OnCreate-Ereignis jedes Formulars ruft die Prozedur so auf:
<delphi>procedure TForm1.FormCreate(Sender: TObject); begin
if Screen.PixelsPerInch <> 96 then begin ScaleDPI(Self,96); // 96 ist der DPI-Wert beim Entwurf des Formulars end;
end;</delphi>
Externe Links
- High DPI (Windows) MSDN article about High DPI