WIN 7 DPI Abfragen

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

WIN 7 DPI Abfragen

Beitrag von Rolf Ramacher »

hallo zusammen

ich möchte dpi abfragen erhalte aber bei dllfunction DllFuncton GetDC einen syntaxfehler beim comipilieren


Code: Alles auswählen

Proc Main()
*FUNCTION GET_SCREEN_DPI

   // Ermittelt die eingestellte Gr”sse fr Windows-Schriftarten,
   // also z.B. 96dpi oder 120dpi
   parameters oWindow

   private nHdc
   private nRes
   private nWinHandle

   // ein bestimmtes Fenster ?
   if pcount() = 0
      nWinHandle := 0                  // 0 --> Desktop-"Fenster"
   else
      nWinHandle := oWindow:getWND()   // Handle des bergebenen Fenster holen.
   endif

   // Aus dem Handle machen wir einen "Device-Context" (DC)
   nHdc := GetDC(nWinHandle)

   // und jetzt k”nnen wir beliebige Daten des DC abfragen (Deklaration --> WINCONST.CH)
   nRes := GetDeviceCaps(nHdc, LOGPIXELSX) // Aufl”sung in vertikaler Richtung

   // den DC entsorgen (soll man machen)
   ReleaseDC(nWinHandle, nHdc)

return 


DLLFUNCTION GetDC(nHandle)USING STDCALL FROM user32


/***********************************************************************************************************/
DLLFUNCTION ReleaseDC(hWnd, hdc) USING STDCALL FROM user32


/***********************************************************************************************************/
DLLFUNCTION GetWindowDC(nHandle)USING STDCALL FROM user32


/***********************************************************************************************************
   "GetSystemMetrics"
   Informationen ber die Bildschirmanzeige.
   The GetSystemMetrics function retrieves various system metrics (widths and heights of display elements)
   and system configuration settings. All dimensions retrieved by GetSystemMetrics are in pixels. 
    - nIndex     = system metric or configuration setting to retrieve
*/
DLLFUNCTION GetSystemMetrics(nIndex) USING STDCALL FROM user32
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: WIN 7 DPI Abfragen

Beitrag von georg »

Hallo, Rolf -


'ne Antwort auf Deine Frage habe ich nicht, aber eine Lösung:

http://www.xbaseforum.de/viewtopic.php? ... 875#p87643

Da hat Jimmy ein tolles Xbase-Beispiel gepostet, mit dem das auch "so" geht. Voraussetzung: manifest-Datei mit dem DPI-Aware Eintrag.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Wolfgang Ciriack »

Oder vielleicht mal die dll.ch mit einbinden ?
Viele Grüße
Wolfgang
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Jan »

... ich will ja nicht lästern. Aber Vereinsmitglieder haben nach dem Vortrag von Till auf der diesjährigen Jahreshauptversammlung eine dermaßen einfache und elegante Lösung gesehen, wie man das ohne jeglichen DLL-Aufruf hinbekommt ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Koverhage »

Jan,

das Beispiel von Jimmy entspricht so ziemlich dem von Till.
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Koverhage »

Georg,
Voraussetzung: manifest-Datei mit dem DPI-Aware Eintrag.
Hier funktioniert das auch ohne (XP und Win7)
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Jan »

Klaus,

denke ich mal nicht. Till macht keinerlei DLL-Aufrufe in seinem Beispiel.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Koverhage »

Jimmy auch nicht, kennst Du das Beispiel von Jimmy überhaupt ?
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Koverhage »

Das Beispiel von Jimmy kommt ja von Till!
Gruß
Klaus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Jan »

Hallo Klaus,

OK, da ist was durcheinander gelaufen. Mit den DLL-Aufrufen bezog ich mich auf den Code von Rolf im Eingangsposting. Auf Jimmy hatte ich zuerst garnichts gesagt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von brandelh »

zu dem Thema ... vor kurzem war ein Test von 4K Monitoren (chip oder c't) ...
Fazit: "wer einmal ein Foto auf einem 4K Monitor angesehen hat, will keinen anderen mehr"

Ich war schon fast geneigt über neue Hardware nachzudenken, dann kamen die "Tricks" die nötig sind um
das Teil zum Laufen zu bringen ... ohne Displayport hat man nur 30 Bilder/Sek ...
viele Grafikkarten / Treiber machen noch Probleme ...
Fast keine Software kommt mit der riesen Auflösung zurecht, Win 7 kann nur 150 % und für die Auflösung braucht man mehr ...

Ich habe es erst mal gelassen und warte ab bis die Probleme gelöst sind :badgrin:
Gruß
Hubert
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Herbert »

Hubert, manchmal kann ich deinen Einträgen nur ganz am rande folgen :roll:
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von brandelh »

nun, die automatische DPI und Größenanpassung ist auf einem normalen Rechner mit 19" Monitor (oder 16:9 24") Luxus, solange man "normale" Augen oder eine funktionierende Brille hat.
Bei Smartphones mit den höheren DPI Werten oder kommenden Monitoren (etwa 4000 Pixel breit statt jetzt 1280 oder 1920) ist es schlicht notwendig, dass die Software ordentlich auf die hohe Auflösung reagiert.
Gruß
Hubert
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Herbert »

Jaaaa, aber dein Eintrag hier ist fast off-topic.
Deshalb hatte ich zuerst Mühe, den Zusammenhang zum gegebenen Thema zu finden.
Würde eher zu "Brille kaputt" (http://www.xbaseforum.de/viewtopic.php?f=23&t=7875) passen. In diesem Fall wäre mein Lösungsansatz dann hilfreich.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von brandelh »

das mit "Brille kaput" ... ich dachte tatsächlich, dass ich dort war :oops: "ungelesene Beiträge" und fast gleiches Thema ... OK DANN ZUR FRAGE !
Rolf Ramacher hat geschrieben: ich möchte dpi abfragen erhalte aber bei dllfunction DllFuncton GetDC einen syntaxfehler beim comipilieren
Ja welche Frage hat er denn eigentlich gestellt :wink:
Dann frage ich mal, WELCHE Fehlermeldung und in welcher ZEILE wird denn ausgegeben ?
Gruß
Hubert
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: WIN 7 DPI Abfragen

Beitrag von peternmb »

Hallo Rolf,

ich nutze in meinen Programmen die unten gezeigte Funktion.

Da nach meinen Erfahrungen der Rückgabewert nicht immer korrekt ist wird dabei in einer Schleife 20x geprüft.
Die Funktion wird nur einmal beim Programmstart aufgerufen, deshalb fällt der zeitliche Faktor kaum ins Gewicht.

Code: Alles auswählen

dpi= AppDesktopDPI()/96   // Standard (100%)=1 bei 125% z.B. 1.25

***********************************************************************************************************************************
*** Feststellen, welche Auflösung der Rechner hat
***********************************************************************************************************************************
FUNCTION AppDesktopDPI
//
LOCAL nHWnd := AppDesktop():GetHWnd()
LOCAL nHDC := DllCall("User32.DLL", DLL_STDCALL, "GetDC", nHWnd)
LOCAL nLogPix := 96
LOCAL LOGPIXELSY := 88
//
LOCAL z:=1
do while nHDC <= 0
   nHDC := DllCall("User32.DLL", DLL_STDCALL, "GetDC", nHWnd)
   z++
   if z=21
      exit
   endif
enddo
//
IF nHDC > 0
   nLogPix := DllCall("GDI32.DLL", DLL_STDCALL, "GetDeviceCaps", nHDC, LOGPIXELSY)
   DllCall("User32.DLL", DLL_STDCALL, "ReleaseDC", nHWnd, nHDC)
ELSE
   msgbox("Die DPi-Einstellungen konnten nicht ausgegelesen werden!   "+chr(13)+ ;
          "Darstellung der Schriftarten ist vermutlich nicht korrekt! "+chr(13)+ ;
          "Ein Neustart des Programmes könnte das Problem beheben.","Problem "+str(z,3,0))
ENDIF
//
RETURN nLogPix
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Wolfgang Ciriack »

Oder die von Jimmy veröffentlichte Version (bei mir um Parameter erweitert):

Code: Alles auswählen

#include "common.ch"
FUNCTION GetTextDPI(art)
** Rückgabe bei art=1 dpi, 2=Zoomfaktor
LOCAL oPS, aTmp, r
DEFAULT art TO 1

oPS := XbpPresSpace():New():Create( AppDesktop():WinDevice(), ;
                                       {100,100}, GRA_PU_LOENGLISH )
aTmp:= oPS:SetViewport()
oPS:Destroy()
r:=aTmp[3]-aTmp[1]
RETURN iif(art=1, r, round(r/96,2))
Viele Grüße
Wolfgang
Wolfram Riedel
Rookie
Rookie
Beiträge: 1
Registriert: So, 04. Mär 2012 18:35

Re: WIN 7 DPI Abfragen

Beitrag von Wolfram Riedel »

Für die Ermittlung der DPI (Win7) verwende ich folgende Funktion:
unter Verwendung von XClass
napplieddpi := applieddpi_ermitteln()


STATIC FUNCTION applieddpi_ermitteln()

// steht in Registry in HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\ REG_DWORD AppliedDPI

Code: Alles auswählen

LOCAL nrueck := 0
LOCAL oreg
LOCAL csubkey := "Control Panel\Desktop\WindowMetrics"
LOCAL nret := 0
oreg := DSREGISTRY():NEW( HKEY_CURRENT_USER )
nret := oreg:OPENKEY( cSubKey )        //  0 zurück für erfolgreich geöffnet
IF nret = 0
  nrueck := oreg:GETVALUE( csubkey, "AppliedDPI" )
  IF nrueck = NIL
    oreg:CLOSEKEY( cSubKey )
    DSCONFIRMBOX( , "Der Registrierungsschlüssel " + csubkey + " konnte nicht ausgelesen werden! Programmabbruch",;
      "Meldung " + PROCNAME() + " " + ALLTRIM( STR( PROCLINE() ) ), XBPMB_OK )
    RETURN( nrueck ) // 0 = nicht erkannt
  ENDIF
ENDIF
oreg:CLOSEKEY( cSubKey )

RETURN( nrueck )
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: WIN 7 DPI Abfragen

Beitrag von Werner_Bayern »

RETURN( nrueck ) // 0 = nicht erkannt
Vorsicht, hier wird NIL und nicht 0 zurückgegeben.
es grüßt

Werner

<when the music is over, turn off the lights!>
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von UliTs »

Jan hat geschrieben:Hallo Klaus,

OK, da ist was durcheinander gelaufen. Mit den DLL-Aufrufen bezog ich mich auf den Code von Rolf im Eingangsposting. Auf Jimmy hatte ich zuerst garnichts gesagt.

Jan
Und warum hast Du dann "Klaus" geschrieben :?: :shock: :D :lol:
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: WIN 7 DPI Abfragen

Beitrag von Jan »

Weil ich auf seinen Beitrag geantwortet habe?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten