[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/privacyprotection/cron/task/anonymize_ip.php on line 83: A non-numeric value encountered
Inoffizielles deutsches Xbase-Forum • Skalierungen unter Windows
Seite 1 von 1

Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 10:46
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?

Re: Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 12:20
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.

Re: Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 13:06
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.

Re: Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 13:24
von Manfred
Hi,
das stimmt, den gibt es. Aber ich meine daraus habe ich mir die Sachen zusammengebastelt.

Re: Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 13:34
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

Re: Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 15:10
von georg
Hallo, Jimmy -


ich wollte das gerade mal nachvollziehen, scheitere aber an der Definition von HWND_DESKTOP?

Re: Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 15:32
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

Re: Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 16:07
von Manfred
und, benutzt Du ihn auch (noch)? Klappt er bei Dir in allen Lebenslagen?

Re: Skalierungen unter Windows

Verfasst: Do, 28. Feb 2019 20:27
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 

Re: Skalierungen unter Windows

Verfasst: Fr, 01. Mär 2019 6:44
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

Re: Skalierungen unter Windows

Verfasst: Fr, 01. Mär 2019 13:01
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.

Re: Skalierungen unter Windows

Verfasst: Fr, 01. Mär 2019 13:26
von Manfred
ist alles gegeben.

Re: Skalierungen unter Windows

Verfasst: Sa, 02. Mär 2019 14:37
von Jan
Jimmy,

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

Jan

Re: Skalierungen unter Windows

Verfasst: Sa, 02. Mär 2019 18:50
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.

Re: Skalierungen unter Windows

Verfasst: Sa, 02. Mär 2019 19:31
von Jan
Jimmy,

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

Jan