![]() |
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; |
AW: Bildschirm-Groesse in mm auslesen
Ich glaube nicht mehr an Bequemlichkeit und Copy&Paste Kultur, ich hoffe es ist nichts ansteckendes (und das Internet als Isolations-Schicht ausreichend ist) ;)
Delphi-Quellcode:
Ein Bier drauf, dass der Ergebnistyp weitere Schwierigkeiten macht und der Thread noch nicht zuende ist.
function ScreenSizeMM: TSize;
begin Result.cx := Round((Screen.Width / Screen.PixelsPerInch) * 25.4); Result.cy := Round((Screen.Height / Screen.PixelsPerInch) * 25.4); end; |
AW: Bildschirm-Groesse in mm auslesen
Zitat:
"Kopiers" noch einmal |
AW: Bildschirm-Groesse in mm auslesen
Hallo,
ich werf' dann mal das in's Rennen :
Code:
type fScreenMM = array[0..1] of Real; . . . function ScreenMM : fScreenMM; begin Result[0] := Screen.Width / Screen.PixelsPerInch * 25.4; Result[1] := Screen.Height / Screen.PixelsPerInch * 25.4; end; |
AW: Bildschirm-Groesse in mm auslesen
Zitat:
|
AW: Bildschirm-Groesse in mm auslesen
Ohh.. hmm
Evt xD Edit: So, tut mir echt leid! Nun sollte es funzen. Habs zuerst so programmiert, dass es mit einer TPoint Variable funktioniert und die Anpassung bei der Umstellung auf zwei Integer Variablen nicht durchgeführt. Sollte aber nun klappen! xD |
AW: Bildschirm-Groesse in mm auslesen
hallo @Satty67
das ist genau was @jfheins geschrieben hat ![]() Zitat:
|
AW: Bildschirm-Groesse in mm auslesen
Auch wenn ich nicht verstehe, warum man sowas in Assembler verschlüsseln muß. :gruebel:
Kann mir nicht vorstellen, daß eine Pascalvariante viel langsamer ist (außer daß diese dadurch kürzer und übersichtlicher würde) und so oft sollte sich die Bildschirmgröße nicht verändern, als das man dieses zumillionen Mal die Sekunde ausrechnen müßte. |
AW: Bildschirm-Groesse in mm auslesen
Eh nicht, aber da er es nicht entschlüsseln kann wird er nicht behaupten können, er habe es selbst geschrieben.
Im Falle einer Hausübung dürfte sich das für mich positiv auswirken :) Ansonsten - da er durchs Kopieren sowieso nichts lernt, macht es keinen großen Unterschied |
AW: Bildschirm-Groesse in mm auslesen
Zitat:
|
AW: Bildschirm-Groesse in mm auslesen
Und da ich nicht erkennen kann, dass Thomas seit Tagen auch nur ansatzweise einen der angebotenen Links gelesen hat und damit in der Lage wäre, die Begriffe / Maßeinheiten "Zoll", "Inch", "Pixel" und "mm" in einen logischen Zusammenhang zu bringen, mache ich hier zu.
Solange Du nicht in der Lage bist, die Ergebnisse Deiner Funktionen wenigstens über den Daumen auf ihre Qualität hin zu prüfen, könntest Du auch einen Zufallszahlengenerator einbauen. Und solange Du Dich weigerst, Dir ein Mindestmaß an Hintergrundwissen (für Deine eigenen Problemstellungen) anzueignen, weigere ich mich, dieses und andere Themen offen zu lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 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-2025 by Thomas Breitkreuz