Difference between revisions of "High DPI/de"

From Lazarus wiki
Jump to navigationJump to search
m (page copied from english wiki page)
 
(translated (in progress))
Line 2: Line 2:
  
 
== Definition ==
 
== Definition ==
Any custom DPI setting with more than 96 DPI (the default setting) [http://msdn.microsoft.com/en-us/library/ee318406(VS.85).aspx *].
+
Jede benutzerdefinierte Textgröße (DPI) mit mehr als 96 DPI (Standard) [http://msdn.microsoft.com/en-us/library/ee318406(VS.85).aspx *].
  
== Setting High DPI in Windows ==
+
== Benutzerdefinierte Textgröße (High DPI) in Windows festlegen==
In Windows 7 go to Control Panel > Appareance and Personalization > Display. Select Smaller 100% (default), Medium 125% or Larger 150%. If you select 100% (96 DPI) is the default Windows DPI setting, not High DPI. If you select 125% (120 DPI) the option "Use Windows XP style DPI scaling" is enabled, applications you run under this setting are scaled like at Windows XP. If you select 150% (144 DPI) the option "Use Windows XP style DPI scaling" is disabled (DPI Virtualization enabled), applications you run under this setting must be High DPI Awareness else they will be scaled by the system like a blurred image. Also you can set your custom DPI setting in the option "Set custom text size (DPI)" and enable/disable the DPI Virtualization. The best way to get it is changing the settings and running applications under the different settings.
+
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.
  
== High DPI in Lazarus ==
+
== Hochauflösender Text in Lazarus ==
  
With Lazarus we have to follow those steps in order to make an High DPI Awareness application for Windows 7. I'm not using ScaleBy & ScaleControls because those have a lot of bugs for this purpose.
+
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.
  
=== STEP 1 - Declare High DPI Awareness ===
+
=== SCHRITT 1 - High DPI Awareness deklarieren===
To do this we need a manifest file that includes the declaration, with the newest Lazarus subversion we can do this going to Options > Project Options > then select the options "Use Manifest to Enable Themes (Windows)" and "Dpi Aware application (for Vista +)".
+
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 +)".
  
Else you can copy the below code and save to a text file "manifest.xml":
+
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"?>
 
<xml><?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Line 44: Line 44:
 
</assembly></xml>
 
</assembly></xml>
  
And save the below code to a text file "manifest.rc":
+
Speichen Sie die folgende Codezeile in einer Textdatei namens "manifest.rc":
  
 
   1 24 "manifest.xml"
 
   1 24 "manifest.xml"
  
Then copy those files to the main folder of your project:
+
Dann kopieren Sie beide Dateien in den Hauptordner Ihres Projekts:
  
 
   MyProject\manifest.xml
 
   MyProject\manifest.xml
 
   MyProject\manifest.rc
 
   MyProject\manifest.rc
  
And include in your project:
+
Und schießen Sie sie in Ihrem Projekt ein:
  
 
<delphi>implementation
 
<delphi>implementation
Line 60: Line 60:
 
{$R manifest.rc} // This includes Windows Manifest to enable Themes and High DPI</delphi>
 
{$R manifest.rc} // This includes Windows Manifest to enable Themes and High DPI</delphi>
  
=== STEP 2 - Scale Forms and Controls ===
+
===SCHRITT 2 - Skalieren der Formulare und Steuerelemente===
 
To do this we can call ScaleDPI procedure OnCreate event of each form in your project.
 
To do this we can call ScaleDPI procedure OnCreate event of each form in your project.
  
Line 128: Line 128:
 
end;</delphi>
 
end;</delphi>
  
== External Links ==
+
== Externe Links ==
  
 
*[http://msdn.microsoft.com/en-us/library/dd464646(v=VS.85).aspx High DPI (Windows)] MSDN article about High DPI
 
*[http://msdn.microsoft.com/en-us/library/dd464646(v=VS.85).aspx High DPI (Windows)] MSDN article about High DPI

Revision as of 12:40, 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>

Speichen 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 schieß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