DPI-Einstellung auslesen

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

DPI-Einstellung auslesen

Beitrag von peternmb »

Hallo,

da immer öfters bei hohen Monitorauslösungen die Schriftgradeinstellungen auf 125% (=120dpi) oder sogar auf 150% gesetzt werden suche ich eine Möglichkeit die DPI-Einstellung auszulesen um entsprechende Anpassungen in meinem Programm vorzunehmen.

Ich habe hier im Forumm was älteres gefunden, das scheint allerdings nur mit XP zu funktionieren.
Zuletzt geändert von peternmb am Fr, 01. Mär 2013 17:22, insgesamt 2-mal geändert.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: DPI-Einstellung auslesen

Beitrag von Tom »

Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: DPI-Einstellung auslesen

Beitrag von Jan »

Ich mach das so:

Code: Alles auswählen

***********************************************************************************************************************************
*** 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

IF nHDC > 0
   nLogPix := DllCall("GDI32.DLL", DLL_STDCALL, "GetDeviceCaps", nHDC, LOGPIXELSY)
   DllCall("User32.DLL", DLL_STDCALL, "ReleaseDC", nHWnd, nHDC)
ENDIF

RETURN nLogPix
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
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: DPI-Einstellung auslesen [erledigt]

Beitrag von peternmb »

Danke - genau das habe ich gesucht :blob8:
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: DPI-Einstellung auslesen [erledigt]

Beitrag von peternmb »

Das funktioniert bei mir leider recht unzuverlässig.
Bei ca. jedem 2.Programmstart erhalte ich nHDC=0, was doch eigentlich nicht sein sollte :banghead:
Ich habe unter XP und Win7/32 getestet, mit 96 und mit 120 dpi.

Ich habe es jetzt so gemacht, aber das ist eigentlich nicht Sinn der Sache:

Code: Alles auswählen

***************************************************************************************************************
*** 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
//
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")
ENDIF
//
RETURN nLogPix
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: DPI-Einstellung auslesen [erledigt]

Beitrag von AUGE_OHR »

peternmb hat geschrieben:Das funktioniert bei mir leider recht unzuverlässig.
Bei ca. jedem 2.Programmstart erhalte ich nHDC=0, was doch eigentlich nicht sein sollte :banghead:
Ich habe unter XP und Win7/32 getestet, mit 96 und mit 120 dpi.
hm ... :-k

Code: Alles auswählen

PROCEDURE APPSYS ; RETURN
PROCEDURE MAIN
LOCAL i
   FOR i = 1 TO 60
      AppDesktopDPI()
      SLEEP(100)
   NEXT
RETURN
ohne Probleme ...
gruss by OHR
Jimmy
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: DPI-Einstellung auslesen

Beitrag von peternmb »

auch unter Win8 muss ich das Programm manchmal mehrmals starten bevor der dpi-Wert richtig ausgelesen werden kann.
Könnte das evtl. an meiner GK liegen? Alle Systeme befinden sich auf dem gleichen Rechner.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9355
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: DPI-Einstellung auslesen

Beitrag von Tom »

Betriebssysteminstallation nicht ganz konsistent? Lass doch mal im Kommandozeilenfenster (mit Adminrechten starten!)

SFC /SCANNOW

laufen.
Herzlich,
Tom
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: DPI-Einstellung auslesen

Beitrag von peternmb »

Tom hat geschrieben:Betriebssysteminstallation nicht ganz konsistent? Lass doch mal im Kommandozeilenfenster (mit Adminrechten starten!)

SFC /SCANNOW

laufen.
Kann eigentlich nicht zutreffen, da ich das Problem unter XP, WIn7 und Win8 habe,
allerdings alles auf dem gleichen Rechner mit Multiboot-System.
Antworten