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

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
DelUser01

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

Beitrag 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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

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

Beitrag 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
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

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

Beitrag 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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

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

Beitrag von Martin Altmann »

Moin,
müsste ich heute Abend mal Zuhause testen - hier habe ich nur XP.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

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

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

Beitrag 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 ?
Gruß
Hubert
DelUser01

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

Beitrag 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
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: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Beitrag 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.
DelUser01

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

Beitrag von DelUser01 »

Hallo Peter

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

Ich Probiere es Mal aus...

Gruß
Roland
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

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

Beitrag 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
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

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

Beitrag 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
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: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Beitrag 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

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

Beitrag 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
Dateianhänge
test.zip
Tespprogramm von Alaska Hr. Herdt
(8.11 KiB) 184-mal heruntergeladen
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: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Beitrag 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"
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: Anzeige-Vergrößerungs-Faktor bei Win7 + Win8 (125%)?

Beitrag 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
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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

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

Beitrag 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 ...
Gruß
Hubert
DelUser01

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

Beitrag 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
DelUser01

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

Beitrag 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
DelUser01

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

Beitrag von DelUser01 »

JETZT GEHT ES!!!

Schlussendlich war auch noch ein Schreibfehler drin...

Gruß
Roland
Antworten