Skalierungen unter Windows

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Skalierungen unter Windows

Beitrag von Manfred »

in den letzten Wochen hatte ich etliche versuche, mich um Skalierungen auf den jeweiligen PC zu kümmern. Diese Formel hier habe ich in Benutzung

Code: Alles auswählen

oPS := XbpPresSpace():New():Create( AppDesktop():WinDevice(), {100,100}, GRA_PU_LOENGLISH)
       aTmp:= oPS:SetViewport()
       oPS:Destroy()
       nLogPix1 := aTmp[3]-aTmp[1]
Nur muß ich feststellen, das sie unter Windows10 wohl irgendwie nicht zufriedenstellend klappt. Ich will damit sagen, es ist ein 50/50 Spiel. Es klappt, aber nicht immer. Egal ob ich nach dem Ändern der Skalierung mich ab und wieder anmelde, oder ob ich den PC komplett neu starte. Es ist nicht nachvollziehbar, warum mal ein korrektes und mal kein korrektes Ergebnis zurückkommt. hat jemand eine Idee?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Skalierungen unter Windows

Beitrag von AUGE_OHR »

hi,

ich kenne die Berechnung wobei {100, 100} = "Genau 1x1 Zoll groß" und GRA_PU_LOENGLISH eine Einheit von 0.01 Inch ist.

ich mach es anders indem ich reale "native" Grösse und die von Windows Werte mit AppDesktop():Currentsize() vergleiche. angenommen native 1600x1200 und AppDesktop():Currentsize() sagt nur 1280x960 dann sind das 125 % Scale-Faktor

Code: Alles auswählen

#define HORZRES              0x0008
#define VERTRES              0x000A
#define LOGPIXELSX           0x0058
#define LOGPIXELSY           0x005A
#define DESKTOPVERTRES       0x0075
#define DESKTOPHORZRES       0x0076

LOCAL aSize := AppDeskTop():CurrentSize()
LOCAL hDC := @user32:GetDC( HWND_DESKTOP )
LOCAL nXLogPixel := @Gdi32:GetDeviceCaps( hDC, LOGPIXELSX )
LOCAL nYLogPixel := @Gdi32:GetDeviceCaps( hDC, LOGPIXELSY )
LOCAL nVERTRES   := @Gdi32:GetDeviceCaps( hDC, VERTRES    )
LOCAL nHORZRES   := @Gdi32:GetDeviceCaps( hDC, HORZRES    )
LOCAL nDHORZRES  := @Gdi32:GetDeviceCaps( hDC, DESKTOPHORZRES ) // native Monitor Size !
LOCAL nDVERTRES  := @Gdi32:GetDeviceCaps( hDC, DESKTOPVERTRES ) // native Monitor Size !

   @user32:ReleaseDC( HWND_DESKTOP,hDC)
p.s. das ist die Single-Monitor Lösung ... an einer Multi-Monitor, wo jeder seine eigene Skalierung haben kann, arbeite ich noch.
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: Skalierungen unter Windows

Beitrag von peternmb »

AUGE_OHR hat geschrieben: Do, 28. Feb 2019 12:20
ich mach es anders indem ich reale "native" Grösse und die von Windows Werte mit AppDesktop():Currentsize() vergleiche. angenommen native 1600x1200 und AppDesktop():Currentsize() sagt nur 1280x960 dann sind das 125 % Scale-Faktor
Funktioniert so ab Windows 8, unter Windows 7 funktioniert das dummerweise so nicht - da funktioniert dafür die "alte" dpi-Berechnung.
Habe mich auch länger damit rumgeärgert, irgendwo gibt es da auch einen Thread von mir.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Skalierungen unter Windows

Beitrag von Manfred »

Hi,
das stimmt, den gibt es. Aber ich meine daraus habe ich mir die Sachen zusammengebastelt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Skalierungen unter Windows

Beitrag von AUGE_OHR »

peternmb hat geschrieben: Do, 28. Feb 2019 13:06 Funktioniert so ab Windows 8, unter Windows 7 funktioniert das dummerweise so nicht - da funktioniert dafür die "alte" dpi-Berechnung.
Habe mich auch länger damit rumgeärgert, irgendwo gibt es da auch einen Thread von mir.
es sind ja 6 Aufrufe also auch die DPI Werte vorhanden damit es auch unter XP funktioniert.

in Windows 8 wurden der virtuelle Desktop eingeführt damit man Multi-Monitoren jetzt unter Windows 10 mit verschiedene Skalierrung laufen kann.

ein Windows UWP App soll, wenn man die auf einen anderen Monitor schiebt, auf die neue Skalierung reagieren können. unter Xbase++ lasse ich einen Thread laufen der die Position überprüft. wenn die > AppDeskTop():CurrentSize() dann 2nd Monitor und ggf. Resize.

was mit einer UWP geht aber ich mit Xbase++ nicht hin bekomme :

1600 x 1200 und ein 1280 x 1024 und verschiedene Auflösungen.
nun bewege ich die Xbase++ App zwischen die beiden Monitore also je 1/2 auf dem Monitor

eine UWP ist nun auf beiden Monitoren "gleich hoch" was ich mit der Xbase++ (noch) nicht hin bekomme
gruss by OHR
Jimmy
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: Skalierungen unter Windows

Beitrag von georg »

Hallo, Jimmy -


ich wollte das gerade mal nachvollziehen, scheitere aber an der Definition von HWND_DESKTOP?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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: Skalierungen unter Windows

Beitrag von Jan »

Wenn ich das richtig sehe stammt der Code von Manfred von Till. Den er u. A. auch mir mal gegeben hat vor längerer Zeit, als die Diskussion um genau dieses Thema ging.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Skalierungen unter Windows

Beitrag von Manfred »

und, benutzt Du ihn auch (noch)? Klappt er bei Dir in allen Lebenslagen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Skalierungen unter Windows

Beitrag von AUGE_OHR »

georg hat geschrieben: Do, 28. Feb 2019 15:10 ich wollte das gerade mal nachvollziehen, scheitere aber an der Definition von HWND_DESKTOP?
sorry, hier aus der WinUser.ch

Code: Alles auswählen

#define HWND_DESKTOP  0 
gruss by OHR
Jimmy
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: Skalierungen unter Windows

Beitrag von Jan »

Manfred,

wenn Du mit der Frage mich gemeint hast: Ich benutze das immer noch unverändert, und habe bislang keine Probleme damit. Und auch keine negativen Rückmeldungen irgendwelcher Kunden.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Skalierungen unter Windows

Beitrag von AUGE_OHR »

Jan hat geschrieben: Do, 28. Feb 2019 15:32 Wenn ich das richtig sehe stammt der Code von Manfred von Till. Den er u. A. auch mir mal gegeben hat vor längerer Zeit, als die Diskussion um genau dieses Thema ging.
der Code von Till ist aus Isernhagen 2014 und setzt eine Manifest mit DPIAWARE voraus.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Skalierungen unter Windows

Beitrag von Manfred »

ist alles gegeben.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: Skalierungen unter Windows

Beitrag von Jan »

Jimmy,

wieso braucht man für die von Manfred gepostete Funktion eine Manifest und DpiAware?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Skalierungen unter Windows

Beitrag von AUGE_OHR »

Jan hat geschrieben: Sa, 02. Mär 2019 14:37 wieso braucht man für die von Manfred gepostete Funktion eine Manifest und DpiAware?
versuche es doch mal selbst mit dem Code von Till Isernhagen 2014.
ohne den DPIAWARE Eintrag funktioniert das ganze nicht.
gruss by OHR
Jimmy
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: Skalierungen unter Windows

Beitrag von Jan »

Jimmy,

hab ich probiert. Und auch auf einem Rechner, wo 125 % eingestellt sind, nur um ganz sicher zu gehen. Klappt.

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