Seite 1 von 1

Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 11:51
von DelUser01
Hallo

Das wurde zwar an anderer Stelle schon Diskutiert aber das Problem mit dem Skalierungs-Faktor habe ich immer noch.
In meiner App muss ich die verwendete Fontgröße reduzieren wenn der User seine Anzeige-Einstellung z.B. auf 125% stellt.
Die Beispiele aus
http://www.xbaseforum.de/viewtopic.php? ... 150#p78811
http://www.xbaseforum.de/viewtopic.php? ... aps#p13848
habe ich mir angeschaut und eingebaut.

ABER ich bekomme immer 96 zurück, egal wie die Anzeige eingestellt ist (100%/125%/150%).
Ich kann also keine Skalierung ausrechnen.
Lese ich etwas falsches aus?

Vielleicht hatte jemand diesen Effekt auch schon und kennt eine Lösung.

Gruß
Roland

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 12:09
von Martin Altmann
Moin,
also bei mir klappt das auch unter Windows 7:

Code: Alles auswählen

FUNCTION AppDesktopDPI()
LOCAL nHWnd := AppDesktop():GetHWnd()
LOCAL nHDC := DllCall("User32.DLL", DLL_STDCALL, "GetDC", nHWnd)
LOCAL nLogPix := 96 // default for Small Fonts
if nHDC > 0
	nLogPix := DllCall("GDI32.DLL", DLL_STDCALL, "GetDeviceCaps", nHDC, LOGPIXELSY )
	DllCall("User32.DLL", DLL_STDCALL, "ReleaseDC", nHWnd, nHDC)
endif
return (nLogPix)
Den Zoomfaktor bekommt man dann natürlich, indem man die Rückgabe der Funktion durch 96 teilt. Und dann muss man nur die Postionen- bzw. Größenangaben der Controls mit diesem Zoomfaktor multiplizieren - ja nachdem, was man will.

Viele Grüße,
Martin

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 12:23
von DelUser01
Hallo Martin

die Funktion habe ich ja auch so eingebaut und die läuft ja auch.
Das Problem ist nur, das eben IMMER 96 zurückgegeben wird.
Und 96/96 bleibt halt 1

Was gibt Dir denn Deine Funktion zurück wenn Du die Anzeige auf 125% stellst?

MfG
Roland

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 12:34
von Martin Altmann
Moin,
müsste ich heute Abend mal Zuhause testen - hier habe ich nur XP.

Viele Grüße,
Martin

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 13:46
von brandelh
Unter NT habe ich bei 17" Monitoren auf 120dpi gestellt, später dann nicht mehr.
Ich meine mich aber zu erinnern, dass 125% nicht unbedingt die dpi Zahl ändert bzw. beides (ab Vista ?) unterschiedlich geregelt wird.

Bei Win7 finde ich ... Systemsteuerung\Darstellung und Anpassung\Anzeige => % Wert,
links dann ... "Benutzerdefinierte Textgröße (DPI) ... festlegen" und da gibt es eine Box "DPI ... im XP Stil festlegen" ... eventuell ist hier etwas verstellt ?

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 14:00
von DelUser01
Hallo Hubert

da ist natürlich was verstellt - mit Absicht.
(Die Änderung mit % ist oben im selben Fenster)
Ich bin gerade bei dem Kunden und überall kommt als Resultat des GetDeviceCaps die 96.

Gruß
Roland

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 19:38
von peternmb
ich hatte das gleiche Problem, dass (fast) immer der Wert 96 zurückgegeben wurde.

Ich lasse das jetzt als Workaround bei 96 in einer Schleife noch einige Male durchlaufen und beim 3. oder 4. mal kommt der richtige Wert ;-)

Da die Funktion nur einmal beim Programmstart aufgerufen wird und recht flott ist kann ich keine nennenswerte Verzögerung erkennen.

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 20:57
von DelUser01
Hallo Peter

Interessanter Vorschlag - eine Funktion so lange rechnen zu lassen bis das Ergebnis stimmt!

Ich Probiere es Mal aus...

Gruß
Roland

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 21:00
von Martin Altmann
Hallo Roland,
habe es gerade versucht (Windows 7 Ultimate, 64 Bit).
Bei 100% kommt 96 und bei 125% kommt 120 bei der Funktion zurück. Nach dem Umstellen muss ich mich jeweils ab- und neu anmelden an Windows, da es sonst nicht zieht.

Viele Grüße,
Martin

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 21:29
von DelUser01
Hallo

ich erlaube mir eine Antwort zum Thema vom Alaska-Support zu veröffentlichen. Die haben was herausgefunden:

Code: Alles auswählen

Hallo Herr Gentner,
Ich habe hier bei uns Code gefunden, mit dem die DPI Einstellungen abgefragt werden. Der Code arbeitet identisch mit dem was Sie mir geschickt haben:
  hWnd := oDesktop:getHWND()
  hDC := GetDC( hWnd )
  ? GetDeviceCaps( hDc, LOGPIXELSX )
  ReleaseDC( hWnd, hDC )
Wie sich nach Recherchen heraus stellte, funktioniert die Windows API
GetDeviceCaps() nur dann, wenn in den “Benutzer definierten DPI Einstellungen”
das Häkchen für "DPI Skalierung im Windows XP Stil” gesetzt ist.
Um auch ohne dieses Häkchen eine DPI Abfrage machen zu können, muss die
Anwendung “DPI aware” sein. Dies kann man erreichen, wenn man dies in der
Manifest Datei der Anwendung mitteilt.
Andreas Herdt
Alaska Technical Support
Die von Hr. Herdt mitgelieferte Manifest-Datei:

Code: Alles auswählen

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>
Ich schaue ob das klappt...

Gruß
Roland

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 21:36
von Jan
Interessant.

Das was Andreas da schreibt hat Till auf der Jahreshauptversammlung des Vereins in diesem Jahr auch gesagt. Nicht in diesem Zusammenhang, aber er hat genau diese Einstellung empfohlen.

Daß das in der Manifest einzustellen ist ist aber toll. Dann muß man nicht dem Kunden aufdrücken, irgendwo in den Einstellungen rumzufuhrwerken.

Jan

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Mi, 11. Sep 2013 22:58
von DelUser01
Hallo

Habe jetzt einfach die Manifest-Datei erstellt und bei der Exe gespeichert
gsg1.exe + gsg1.exe.manifest
und den Text reinkopiert.
Schade - leider bringt die Abfrage immer noch 96 ! ?

Anbei ein Testprogramm von Alaska, Hr. Herdt.
Das funktioniert seltsamer Weise!!!
Kann mir jemand sagen warum das mit der Manifest-Datei bei meinen Exe's nicht geht?

Gruß
Roland

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Do, 12. Sep 2013 2:24
von AUGE_OHR
Roland Gentner hat geschrieben:Die von Hr. Herdt mitgelieferte Manifest-Datei:
witzig ... hatte gerade paar Stunden vorher im Thread http://www.xbaseforum.de/viewtopic.php?f=36&t=7432 darauf aufmerksam gemacht ;)

zu bemerken an "der" XP Manifest Datei ist das es eine "Kurzfassung" ist d.h. wenn man visual Style haben will muss man eine vollständige XP Manifest Datei verwenden.

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="X86"
    name="My Programm"
    type="win32"
/>
<description>Xbase++ Form Designer</description>
<dependency>
    <dependentAssembly>
         <assemblyIdentity
             type="win32"
             name="Microsoft.Windows.Common-Controls"
             version="6.0.0.0"
             processorArchitecture="X86"
             publicKeyToken="6595b64144ccf1df"
             language="*"
        />
    </dependentAssembly>
</dependency>

<asmv3:application  xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>
übrigens : dein Demo läuft "so" nicht ... "This_executable_needs_version_2_00_0"

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Do, 12. Sep 2013 6:01
von Jan
Roland,

eine Anmerkung dazu: Natürlich reicht es vollkommen aus, wenn die manifest im gleichen Verzeichnis liegt wie die exe. Aber ich persönlich mag es, wenn ich die nicht mitliefern muß. Das erreicht man, indem man die in die exe mit reinlinkt. Dazu erstellst Du eine .arc, in die dann in diesem Fall das hier rein muß:

Code: Alles auswählen

#define MANIFEST_RESID 1
#define MANIFEST 24

USERDEF MANIFEST
  MANIFEST_RESID = FILE "Test.exe.manifest"
Die Arc mit in die Projektdatei einbauen, und fertig ist die Sache. Eine Datei weniger, und gegenüber dem Kunden sieht das auch viel sauberer aus (finde ich).

Jan

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Do, 12. Sep 2013 7:08
von brandelh
Ich habe hier die Erfahrung gemacht, dass es NICHT immer reicht eine Manifest zu einer EXE zu kopieren.
Die Manifestdatei sollte schon beim LINKEN der EXE da sein. Ob das jetzt Pflicht ist, oder nur zufall war und das Problem damals wo anders lag weiß ich nicht mehr.
brandelh hat geschrieben:... "Benutzerdefinierte Textgröße (DPI) ... festlegen" und da gibt es eine Box "DPI ... im XP Stil festlegen" ... eventuell ist hier etwas verstellt ?
genau diese Checkbox "DPI im XB-Stil" meinte ich mit der Frage "ob da was verstellt ist ;-)
Auf jeden Fall ist es besser eine Manifest Datei (in oder mit der EXE) zu verwenden.
AUGE_OHR hat geschrieben:übrigens : dein Demo läuft "so" nicht ... "This_executable_needs_version_2_00_0"
das kommt darauf an, ob du die "Xbase++ 2.0 CTP3" Version nutzt ;-), ansonsten einfach neu compilieren ...

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Do, 12. Sep 2013 11:00
von DelUser01
Hallo

habe das Manifest in das ARC eingebunden - geht aber trotzdem noch nicht:

Code: Alles auswählen

ICON
1="c:\appxbase\G1\G1_1.ICO"
POINTER
101="c:\appxbase\Lib1\Cursor\lib1_101_smoothhand.cur"
#define MANIFEST_RESID 1
#define MANIFEST 24
USERDEF MANIFEST
MANIFEST_RESID = FILE "c:\appxbase\G1\gsg1.exe.manifest"
Ratlos...

Gruß
Roland

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Do, 12. Sep 2013 11:39
von DelUser01
Hallo

Das mit der richtigen DPI-Rückgabe muss an etwas anderem liegen, nicht an der Manifest-Datei.
Eventuell am Inhalt der XPI-Datei?
Ich habe auf meinem W7 Test-PC das Test-Programm von Alaska Hr. Herdt nochmal kompiliert und zuvor die Manifest-Datei gelöscht. Das test.exe zeigt trotzdem die richtige DPI!!

Code: Alles auswählen

[PROJECT]
    DEBUG         = yes
    PBUILD        = @test.txt
    MAKE          =
    VERSION       = 2.0 CTP
    OPENFILES     = test.prg
    PROJECT.XPJ
[PROJECT.XPJ]
    test.exe
[test.exe]
    COMPILE       = xpp
    COMPILE_FLAGS = /q
    DEBUG_SAVE    = yes
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    =
    RC_COMPILE    = arc
    RC_FLAGS      = /v
// $START-AUTODEPEND
    test.obj
// $STOP-AUTODEPEND
    test.prg
noch ratloser...

Gruß
Roland

Re: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Verfasst: Do, 12. Sep 2013 12:00
von DelUser01
JETZT GEHT ES!!!

Schlussendlich war auch noch ein Schreibfehler drin...

Gruß
Roland