Seite 1 von 1

welchen Font verwendet ein Xbase-Part?

Verfasst: Mi, 14. Apr 2021 14:26
von georg
Hallo,


mich interessiert, welchen Font ein Xbase-Part verwendet. Normalerweise habe ich erwartet, dass ich mittels :setFont() diese Information erhalten kann, aber das ist nicht der Fall:

Code: Alles auswählen

FUNCTION Main()
   oFont := AppDeskTop():setFont()
RETURN (.T.)
FUNCTION AppSys()
RETURN (.T.)
FUNCTION DbeSys()
RETURN (.T.)
oFont hat den Wert NIL. Das gilt auch für Programme mit mehr Code und mehr Xbase-Parts (AppDesktop() wird als Objekt der XbpIWindow-Klasse abgebildet).

Re: welchen Font verwendet ein Xbase-Part?

Verfasst: Mi, 14. Apr 2021 22:11
von brandelh
es muss sich um ein XbpDialog() oder XbpCrt() handel, damit man den Font abfragen kann.

Ich meine der Standardfont (bei XbpFD) ist 8.Helv.normal, bei Windows also 8.Arial

Re: welchen Font verwendet ein Xbase-Part?

Verfasst: Do, 15. Apr 2021 7:29
von georg
Guten Morgen, Hubert -


tja, das ist es leider nicht.

Ich erzeuge ein XbpStatic() und weise ihm einen Text zu. Der kommt mit dem "Standard-Font", den Xbase++ verwendet:
std-font.png
std-font.png (1.22 KiB) 5678 mal betrachtet
Weise ich dem XbpStatic() dann ein Arial-XbpFont-Objekt zu, ändert sich die Schriftart:
arial.8.png
arial.8.png (2.89 KiB) 5678 mal betrachtet
Dann habe ich auch mal Segoe UI als Schriftart zugewiesen (das ist seit Windows Vista wohl die Standard-Schriftart von Windows), dann sieht das so aus:
Segoe.8.png
Segoe.8.png (2.9 KiB) 5678 mal betrachtet
Sieht mir ziemlich nach Arial aus ... Oder auch umgekehrt.

Zu Segeo UI und der Verwendung von Schriftarten findet man hier bei Microsoft etwas mehr: https://docs.microsoft.com/en-us/window ... /vis-fonts

Mein Problem ist: ich möchte die Schriftgrösse entsprechend der Skalierung anpassen (das geht zumindest auf meinem PC nicht bzw. nur eingeschränkt automatisch), und dafür müsste ich wissen, welche Schriftart verwendet wird.

Re: welchen Font verwendet ein Xbase-Part?

Verfasst: Do, 15. Apr 2021 7:46
von Tom
Hallo, Georg.

Wenn einem XbPart nicht explizit ein Font/Fontobjekt zugewiesen ist, entscheidet das Betriebssystem. Seit Windows 10 ist diese Entscheidung nur noch schwer beeinflussbar. Die Werte hierzu finden sich in der Reg in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts und HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes. Bei Statics landest Du normalerweise auf Segoe UI. Diese Schrift ist hierfür entwickelt worden.

Die einfachste Art, mit Deinem Problem umzugehen, besteht darin, die Schriften selbst zu setzen, sie also in Deiner XbpDialog-Klasse zu setzen und zu vererben.

Ergänzung: Ich meine, Xbase++ wählt noch aus OS/2-Legacy-Gründen irgendwie irgendwo eine Helvetica, die unter Windows üblicherweise als Arial substituiert wird.

Re: welchen Font verwendet ein Xbase-Part?

Verfasst: Do, 15. Apr 2021 8:04
von georg
Guten Morgen, Tom -


jein. Es gibt mir um die Fälle, wo der Anwender eine Schriftart definiert hat, also vom Windows-Standard abweicht. Schreibe ich ihm eine andere Schriftart vor, würde meine Anwendung aus dem Rahmen fallen. Daher möchte ich ermitteln, welche Schriftart verwendet wird, und diese entsprechend skalieren.

Die Zweige der Registry listen (vorsichtig geschätzt) alle installierten Fonts und helfen mir so nicht unbedingt weiter, den verwendeten Font zu lokalisieren.

Ach, ich hatte auf eine einfache Lösung gehofft ...

So, ich habe noch einmal etwas gesucht und das hier bei Heise gefunden: https://www.heise.de/tipps-tricks/Windo ... 39691.html

Demnach kann man nicht mehr so einfach die Standardschrift verändern (wieder etwas dazugelernt).

Re: welchen Font verwendet ein Xbase-Part?

Verfasst: Do, 15. Apr 2021 8:28
von Tom
Hallo, Georg.

Ja, der Zweig listet alle installierten Fonts auf, und alles, was der Schriftartfamilie "Segoe UI" als physische Schriftartdatei zugeordnet ist, verwendet Windows für die UI/UX. Und ich schrieb ja, dass es seit Windows 10 für Laien nahezu unmöglich ist, die Windows-Standardschriftart zu beeinflussen, weil das eben nur so geht, indem man also die Fontdateien austauscht. Du dürftest deshalb kaum mit Benutzer konfrontiert sein, die das unter Windows 10 tatsächlich getan haben - höchstens eben noch unter Windows 7.

So oder so, Du wirst bei Statics in aller Regel mit Segoe UI konfrontiert sein. Wir setzen das in unserer Anwendung deshalb auch von uns aus fest, und für SLEs Calibri.

Re: welchen Font verwendet ein Xbase-Part?

Verfasst: Do, 15. Apr 2021 9:51
von AUGE_OHR
hi,
georg hat geschrieben: Do, 15. Apr 2021 7:29 Mein Problem ist: ich möchte die Schriftgrösse entsprechend der Skalierung anpassen
denke doch anders rum : User legt den Font im Setup fest :idea:

Windows wählt meistens "best fit" aus aber nur 1:1 stimmt wirklich bei "jeder" DPI (Hardware) / Skalierung (DPIaware)

das Layout von unseren Apps ist doch meistens nicht auf o:resize ausgelegt was beim "maximieren" reagiert.

---

für das Resize ist ein X,Y Faktor eine Lösung.
Die Werte von GraQueryTextBox() / API GetTextExtentPoint32() aus einem Referenz String ergeben dann den X,Y Faktor

---

der Font ergibt, nach Auswalt mit XbpFontDialog(), ein unterschiedliches Aussehen. :-k

ich nutze dazu API Code von Günter Beyes "GetTextExtentPoint32" sowie Font "create"
bei Pablo habe ich seinen Weg mit Ot4Xb genommen ( geht auch ohne Ot4Xb )
das ganze verglichen mit dem "pure" Xbase++ Resultat
CRE3FONT.ZIP
(3.5 KiB) 212-mal heruntergeladen
welche von den 3 Resultaten gefällt euch :?:

Re: welchen Font verwendet ein Xbase-Part?

Verfasst: Do, 15. Apr 2021 10:25
von Tom
Wenn man Rogers eXpress++ verwendet, muss man nur (einmalig) die Option SCALEFACTOR parametrisieren, und alle Dialoge und Parts verändern ihr Verhalten und Aussehen ganz wunderbar. Übrigens auch in die umgekehrte Richtung.