Difference between revisions of "High DPI/de"
(translated (in progress)) |
|||
Line 44: | Line 44: | ||
</assembly></xml> | </assembly></xml> | ||
− | + | Speichern Sie die folgende Codezeile in einer Textdatei namens "manifest.rc": | |
1 24 "manifest.xml" | 1 24 "manifest.xml" | ||
Line 53: | Line 53: | ||
MyProject\manifest.rc | MyProject\manifest.rc | ||
− | Und | + | Und schließen Sie sie in Ihrem Projekt ein: |
<delphi>implementation | <delphi>implementation |
Revision as of 12:41, 5 February 2011
│
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 wir 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 wir eine Manifest-Datei die diese Deklaration enthält. Mit der neuesten Lazarus Unterversion erreichen wir dies mit Ansicht > Projekteinstellungen > dann wählen wir die Options "Themen mit Manifest-Datei einschalten (nur in Windows)" and "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} // This includes Windows Manifest to enable Themes and High DPI</delphi>
SCHRITT 2 - Skalieren der Formulare und Steuerelemente
To do this we can call ScaleDPI procedure OnCreate event of each form in your project.
First copy the below code and save to a text file "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>
Copy the "uscaledpi.pas" file to the main folder of your project:
MyProject\uscaledpi.pas
In the "uses" section of your project you need to add "uScaleDPI":
<delphi>unit form1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs uScaleDPI; // This includes ScaleDPI procedure </delphi>
OnCreate event of each form call the procedure in this way:
<delphi>procedure TForm1.FormCreate(Sender: TObject); begin
if Screen.PixelsPerInch <> 96 then begin ScaleDPI(Self,96); // 96 is the DPI you designed the Form1 end;
end;</delphi>
Externe Links
- High DPI (Windows) MSDN article about High DPI