Seite 1 von 1

default font gui

Verfasst: Mi, 03. Feb 2016 16:33
von Wonderer
Hallo,

ich versuche gerade für ein neu erstelltes XbpDialog und XbpParts den Standard-Font(Name) zu ermitteln.
Als Rückgabewert erhalte ich jedoch immer NIL.

folgendes habe ich versucht:

Code: Alles auswählen

cFntName := XbpDialog:setFontCompoundName
cFntName := XbpStatic:setFontCompoundName

SetAppWindow( XbpDialog )

oFnt := GraSetFont( XbpDialog;drawingArea )
Wie schon gesagt bekomme ich überall ein NIL zugewiesen.

Kann mir jmd.bitte sagen wie ich den Default-Font(Name) als Rückgabewert erhalten kann zum Speichern?

Re: default font gui

Verfasst: Mi, 03. Feb 2016 17:08
von Tom
Also.

Erstens ist SetFontCompoundName keine iVar, also keine Variable des fraglichen Objekts (Dialog, Static), sondern eine Methode. Richtig wäre also:

Code: Alles auswählen

cFntName := oDialog:SetFontCompoundName() // man beachte die Klammern
Wenn kein Font für das Objekt gesetzt ist, gibt die Methode NIL zurück. Xbase++ verwendet für alle Darstellungen dann einen Standardfont (ich meine, 10.Arial).

Zweitens verwendet man die Methode zuerst für das Setzen eines anderen Fonts - und nachrangig für dessen Abfrage:

Code: Alles auswählen

oDlg := XbpDialog():New() ...
oDlg:DrawingArea:SetFontCompoundName("14.Arial")
* jetzt gäbe die Methode auch etwas zurück

Re: default font gui

Verfasst: Do, 04. Feb 2016 7:29
von brandelh
Ich meine es ist 8. Arial ;-)

eines noch zusätzlich, ein Control sieht in der Liste seiner Parents nach, welche Fonts diese nutzen, wenn es selbst keine Vorgabe im Quellcode gibt.

Re: default font gui

Verfasst: Do, 04. Feb 2016 7:49
von brandelh

Code: Alles auswählen

oFnt := GraSetFont( XbpDialog;drawingArea )
zwischen XbpDialog und drawingArea steht ein ; ... vermutlich sollte es ein : sein.
Falls es nicht nur hier so geschrieben ist, gibt das einen Laufzeitfehler

Re: default font gui

Verfasst: Do, 04. Feb 2016 14:48
von Wonderer
ah ja, sorry. das war Pseudo-Code - die Klammern und Doppelpunkt war schon richtig gesetzt im Programm.

Das mit dem 'Durchreichen nach Oben' hat mir nichts gebracht, da das höchste mir bekannte Element

Code: Alles auswählen

oDlg := SetAppWindow()  
ist und ein Zugriff auf den Font dort lediglich NIL zurückliefert.

AppDesktop:setFontCompoundName() -> NIL
XbpDialog:setFondCompoundName() -> NIL

Ooookay, gründliches Lesen des Handbuches hat sich als erfolgreich herausgestellt :D

folgendes funktioniert für Ermittlung des Default-Fonts:

Code: Alles auswählen

oWin := XbpDialog():new( ... )
...
oWin:create()
SetAppWindow( oWin )
oFnt := GraSetFont( oWin:lockPS() )
oWin:unlockPS()
Allerdings steht im CompoundName lediglich 'Ms Sans Serif' ohne Größen-Angabe.
NominalPointSize ist eingestellt auf '8'.