![]() |
Bildschirm-Groesse in mm auslesen
Hi
gibt es eine andere alternative Methode um den Bildschirm-Groesse in Millimeter auslesen zu können ?
Delphi-Quellcode:
Ich erhalte :
procedure TForm1.Button1Click(Sender: TObject);
var DC : HDC; cm :Single; begin DC := GetDC(Form1.Handle); { or Canvas.Handle } cm:=(GetDeviceCaps(DC,LOGPIXELSX)/2.54); Edit1.Text := FloatToStr(Round( (StrToInt('1024')*10) / cm)); Edit2.Text := FloatToStr(Round( (StrToInt('768')*10) / cm)); end; 271 mm x 203 mm :| |
AW: Bildschirm-Groesse in mm auslesen
Erklär uns doch erstmal Zeile für Zeile, was Dein Code tun soll. Ich steig da nicht ganz durch.
|
AW: Bildschirm-Groesse in mm auslesen
Also irgendwie habe ich gerade ein Déjà-vu:
![]() |
AW: Bildschirm-Groesse in mm auslesen
Wenn Forms eingebunden ist, bietet sich die Verwendung von Screen an.
Screen.Width/Height mit Screen.PixelsPerInch verrechnet gibt bei mir millimetergenaue (und korrekte) Werte. |
AW: Bildschirm-Groesse in mm auslesen
Danke Andreas für den Link ;)
Also wenn ich genauso tue :
Delphi-Quellcode:
Ich erhalte : 128
procedure TForm1.Button1Click(Sender: TObject);
var x: Double; begin x:= screen.Width/screen.Height * Screen.PixelsPerInch; Caption:=FloatToStr(x); end; Was bedeutet das dann ? |
AW: Bildschirm-Groesse in mm auslesen
Zitat:
Für dein Problem zielführender ist es natürlich wenn am Ende schon von den Einheiten was anderes rauskommt. z.B. Indem man
Code:
Rechnet. Dann kommen Zoll raus ;)
screen.Width/Screen.PixelsPerInch
|
AW: Bildschirm-Groesse in mm auslesen
Warum eine andere Methode?
EDIT:
Delphi-Quellcode:
{1}
{1}
DC := GetDC(Form1.Handle); {2} Edit1.Text := FloatToStr(Round( (StrToInt('1024')*10) / cm)); Edit2.Text := FloatToStr(Round( (StrToInt('768')*10) / cm)); Warum das Handle der Form? {2} ![]() Weiters: Ich denke mal, deine Auflösung ist nicht 1024x768 und deshalb werden falsche Werte angezeigt?! Falls ja, dann gugg doch mal genauer hin -.-' EDIT2: LOGPIXELSX liefert dir folgendes zurück Zitat:
Delphi-Quellcode:
procedure GetDisplaySize(var mm: TPoint);
asm xchg eax, esi mov [esi], -1 mov [esi+4], -1 call GetDesktopWindow xchg edi, eax push edi call GetDC test eax, eax jnz @continue ret @continue: push ebp mov ebp, esp sub esp, $10 push eax push edi push $5A push eax push $58 push eax call GetDeviceCaps mov ecx, 100 mul ecx mov [ebp-$10], eax call GetDeviceCaps mov ecx, 100 mul ecx mov [ebp-$0C], eax push 1 push 0 call GetSystemMetrics mov [ebp-$08], eax call GetSystemMetrics mov [ebp-$04], eax mov eax, [ebp-$08] mov ecx, 2540 push ecx mul ecx cdq mov ecx, [ebp-$10] idiv ecx mov [esi], eax mov eax, [ebp-$04] pop ecx mul ecx cdq mov ecx, [ebp-$0C] idiv ecx mov [esi+$04], eax call ReleaseDC mov esp, ebp pop ebp xchg eax, esi end; |
AW: Bildschirm-Groesse in mm auslesen
Ich habe den Code etwas geändert, obwohl das gleiche Ergebnis erhalte
aber es ist noch einfacher
Delphi-Quellcode:
Ich erhalte : 271,25333 :thumb:
procedure TForm1.Button1Click(Sender: TObject);
var x: Double; begin X:=screen.Width/Screen.PixelsPerInch; Caption:=FloatToStr(x*25.43);// screen.Width in mm end; |
AW: Bildschirm-Groesse in mm auslesen
Und ganz ohne StrToInt :mrgreen:
|
AW: Bildschirm-Groesse in mm auslesen
Wie rufe ich die Funktion auf ?
Delphi-Quellcode:
Ich erhalte -1 :-D
var
Form1: TForm; x,y : Integer; procedure TForm1.Button1Click(Sender: TObject); begin x:=Screen.width; y:=Screen.Height; GetDisplaySize(x,y); caption:=IntToStr(x); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz