Seite 1 von 1

Pixel in MM geht nicht unter Vista?

Verfasst: 25.05.2007 10:04
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

Verfasst: 25.05.2007 14:53
von Fluid Byte
Haste auch ne PB Version?

Verfasst: 25.05.2007 14:59
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

Verfasst: 25.05.2007 15:56
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.

Verfasst: 28.05.2007 22:10
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

Verfasst: 29.05.2007 21:08
von Zaphod
Ja, PB arbeitet mit Pixeln, nicht mit units oder ähnlichem quatsch.