Pixel in MM geht nicht unter Vista?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Pixel in MM geht nicht unter Vista?

Beitrag von Tafkadasom2k5 »

Hiho!
Ich muss aus einer Millimeter-Anzahl errechnen, wie sie am Besten auf den Bildschirm passt. Also wenn in meiner Datei "100mm" steht, muss ich das so umrechnen, dass es mit diesem Bildschirm und der momentanen Auflösung auch 100mm ergibt. Hier der soweit funktionierende Codeschnippsel:

Code: Alles auswählen

	    LOCAL lWidth, lHeight AS LONG
	    lWidth = 100 '100 mm Breite
       lHeight = 100 '100mm Höhe
	    LOCAL hDC AS DWORD
	    hDC = GetWindowDC(GetDesktopWindow())
	    
	    LOCAL lWidthPX, lHeightPX, lWidthMM, lHeightMM AS LONG
	    lWidthMM = GetDeviceCaps(hDC, %HORZSIZE) 'Screenbreite in MM
	    lHeightMM = GetDeviceCaps(hDC, %VERTSIZE)'Screenhöhe in MM
	    lWidthPX = GetDeviceCaps(hDC, %HORZRES)'Screenbreite in px
	    lHeightPX = GetDeviceCaps(hDC, %VERTRES)'Screenhöhe in px
	    ReleaseDC GetDesktopWindow(), hDC

	    LOCAL hNewWindow AS DWORD
	    LOCAL lNW_Width, lNW_Height AS LONG
	    lNW_Width = (lWidthPX/lWidthMM)*lWidth
	    lNW_Height= (lHeightPX/lHeightMM)*lHeight

       DIALOG NEW PIXELS, GetDesktopWindow(), "Fenster mit den Maßen 100mm x 100mm", 40, 40,lNW_Width, lNW_Height, %WS_CHILD OR _
	        %WS_BORDER OR %WS_CLIPSIBLINGS OR _
	        %WS_VISIBLE OR %DS_NOFAILCREATE OR _
	        %DS_SETFONT OR %WS_SYSMENU OR %WS_CAPTION OR_
           %WS_DLGFRAME, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT _
	        OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hNewWindow
Klar, jetzt fehlt noch der ganze Callback Mist, aber das tut ja auch nichts zur Sache ;)

Sobald ich jetzt aber auf meinem neu aufgesetzten Vista-PC das Programm ausführe, erhalte ich bei 100x100 nur noch 73mm auf dem Bildschirm. Das Gleiche auf einem anderen Notebook, mit XPPro SP2. Bei einem anderen Kollegen mit einem Notebook und XPPro SP2 läuft alles nach Maß. Und als ich noch XP drauf hatte,m war das Maß auch korrekt.

Das verwirrt mich :freak:
Hat jemand schonmal so eine Umrechnung geschrieben?

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Haste auch ne PB Version?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Fluid Byte hat geschrieben:Haste auch ne PB Version?
Das ist eine PB Version :lol:

@Tafkadasom2k5
Bitte nur PureBasic-Source hier im API-Forum, ansonsten unter andere
Sprachen! Passe es bitte an, ich denke mit verschieben nach ander Sprachen
ist Dir nicht gedient
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

mKay, hier eben in Purebasic hingeschmoddert.

Code: Alles auswählen

      lWidth  = 100 ;100mm  Breite
      lHeight = 100  ;100MM Höhe
      
      
      hDC = GetWindowDC_(GetDesktopWindow_())
      
      lWidthMM = GetDeviceCaps_(hDC, #HORZSIZE) ;Screenbreite in MM
      lHeightMM = GetDeviceCaps_(hDC, #VERTSIZE);Screenhöhe in MM
      lWidthPX = GetDeviceCaps_(hDC, #HORZRES)  ;Screenbreite in px
      lHeightPX = GetDeviceCaps_(hDC, #VERTRES );Screenhöhe in px
      ReleaseDC_(GetDesktopWindow_(), hDC)
      
      lNW_Width = (lWidthPX/lWidthMM)*lWidth
      lNW_Height= (lHeightPX/lHeightMM)*lHeight
      
      #WindowTest = 1
       OpenWindow(#WindowTest,10,10,lNW_Width,lNW_Height, "Fenster mit theoretisch 100mm x 100mm", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)

       While WindowEvent() ! #PB_Event_CloseWindow
        Delay(1)
       Wend
Das Fenster sollte, egal an welchem Bildschirm (sofern man nicht das Fenster auf einen anderen Bildschirm mit anderer Auflösung verschiebt), mit dem Linieal 100mm hoch und breit sein.

Ich weiß jetzt nur nicht mehr, ob Pure auch wirklich mit Pixeln arbeitet und nicht mit Units...
Falls Pure mit Units arbeitet, brauch ich eben Hilfe, wie man die Fenster für Pixel empfänglich machen kann ;)

Gr33tz
Tafkadasom2k5

Edit:
Code Endkorrigiert.
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Code nochmals korrigiert, dürfte jetzt ohne Meckereien laufen.
Ich brauche Hilfe von XP und auch Vista-Usern, die das Programm testen (sind es wirklich 100mm am Bildschirm?).

Zudem brauche ich unter Umständen eine gute Alternative, wie ich an die Pixel/MM-Angabe komme, die dann auch unter anderen Win-Systemen funzt.

Danke im Vorraus für alle Mühen!

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Ja, PB arbeitet mit Pixeln, nicht mit units oder ähnlichem quatsch.
Antworten