Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Bildschirm-Groesse in mm auslesen (https://www.delphipraxis.net/159831-bildschirm-groesse-mm-auslesen.html)

thomas2009 14. Apr 2011 15:25

Bildschirm-Groesse in mm auslesen
 
Hi

gibt es eine andere alternative Methode um den Bildschirm-Groesse
in Millimeter auslesen zu können ?
Delphi-Quellcode:
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;
Ich erhalte :
271 mm
x
203 mm
:|

DeddyH 14. Apr 2011 15:32

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.

shmia 14. Apr 2011 15:39

AW: Bildschirm-Groesse in mm auslesen
 
Also irgendwie habe ich gerade ein Déjà-vu:
Pixel in Millimiter umrechnen mit dieser Funktion ? by thomas2009

Satty67 14. Apr 2011 15:54

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.

thomas2009 14. Apr 2011 16:43

AW: Bildschirm-Groesse in mm auslesen
 
Danke Andreas für den Link ;)

Also wenn ich genauso tue :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
x: Double;
begin
x:= screen.Width/screen.Height * Screen.PixelsPerInch;
Caption:=FloatToStr(x);
end;
Ich erhalte : 128
Was bedeutet das dann ?

jfheins 14. Apr 2011 16:51

AW: Bildschirm-Groesse in mm auslesen
 
Zitat:

Zitat von thomas2009 (Beitrag 1095139)
Danke Andreas für den Link ;)

Also wenn ich genauso tue :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
x: Double;
begin
x:= screen.Width/screen.Height * Screen.PixelsPerInch;
Caption:=FloatToStr(x);
end;
Ich erhalte : 128
Was bedeutet das dann ?

Es gibt viele Möglichkeiten, aber ich tippe darauf: Du hast einen Monitor mit 4:3 Seitenverhältnis und 96 ppi Auflösung.

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:
screen.Width/Screen.PixelsPerInch
Rechnet. Dann kommen Zoll raus ;)

Aphton 14. Apr 2011 17:18

AW: Bildschirm-Groesse in mm auslesen
 
Warum eine andere Methode?

EDIT:
Delphi-Quellcode:
{1}
DC := GetDC(Form1.Handle);
{2}
Edit1.Text := FloatToStr(Round( (StrToInt('1024')*10) / cm));
Edit2.Text := FloatToStr(Round( (StrToInt('768')*10) / cm));
{1}
Warum das Handle der Form?
{2}
*facepalm

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:

Zitat von http://msdn.microsoft.com/en-us/library/dd144877%28v=vs.85%29.aspx
Number of pixels per logical inch along the screen width. In a system with multiple display monitors, this value is the same for all monitors.

Ansonten, hier
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;

thomas2009 14. Apr 2011 18:26

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:
procedure TForm1.Button1Click(Sender: TObject);
var
x: Double;
begin
X:=screen.Width/Screen.PixelsPerInch;
Caption:=FloatToStr(x*25.43);// screen.Width in mm
end;
Ich erhalte : 271,25333 :thumb:

DeddyH 14. Apr 2011 18:46

AW: Bildschirm-Groesse in mm auslesen
 
Und ganz ohne StrToInt :mrgreen:

thomas2009 14. Apr 2011 19:12

AW: Bildschirm-Groesse in mm auslesen
 
Wie rufe ich die Funktion auf ?
Delphi-Quellcode:
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;
Ich erhalte -1 :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz