Seite 1 von 1

Fontsize

Verfasst: Do, 28. Feb 2013 16:39
von Rudolf
Hallo,
ich suche eine Funktion für die Kalkulation der Länge eines Strings mit einem bestimmten Font. Irgendwo habe ich die Funktion schon gesehen, finde sie aber nicht mehr.
Grüße
Rudolf

Re: Fontsize

Verfasst: Do, 28. Feb 2013 16:41
von Jan
Hallo Rudolf,

ich mach das damit:

Code: Alles auswählen

/// <summary>
///  <para>
///    <bold>Zweck:</bold> Die exakte Länge eines Textstrings feststellen
///  </para>
///  <para>
///   <bold>Parameter:</bold> oParent, cText, cFont
///  </para>
///  <para>
///   <bold>Beispiel:</bold>
///  </para>
/// </summary>
/// <returns>
///   nLaenge
/// </returns>
///
FUNCTION TextLaenge(oParent, cText, cFont)

LOCAL oPs := NIL
LOCAL nLaenge := 0
LOCAL aTextBox := {}
LOCAL oFont := NIL

// Presentationspace für die Gra...()-Funktion erstellen
oPs := XbpPresSpace():New()
oPs:Create(oParent:WinDevice(), oParent:currentSize(), GRA_PU_LOMETRIC)

// Die korrekte Schrift setzen, damit die Textlänge stimmt
IF cFont <> NIL
   oFont := xbpFont():new(oPs)
   oFont:create(cFont)
   GraSetFont(oPs, oFont)
ENDIF

// Die Länge berechnen
aTextBox := GraQueryTextBox(oPs, cText)
nLaenge := aTextBox[3,1] - aTextBox[2, 1]

// Aufräumen
vernichteObjekt(oPs)

RETURN nLaenge
Jan

Re: Fontsize

Verfasst: Sa, 02. Mär 2013 7:56
von UliTs
Hallo Jan,

Muss das nicht

Code: Alles auswählen

IF cFont == NIL
heißen?
Uli

Re: Fontsize

Verfasst: Sa, 02. Mär 2013 8:06
von Jan
Hallo Uli,

nein, das ist so schon richtig. Denn nur wenn das nicht NIL ist, kann die Zeichenkette zwei Zeilen weiter als Font gesetzt werden.

Jan

Re: Fontsize

Verfasst: Sa, 02. Mär 2013 10:18
von Rudolf
Hallo,
danke für die Funktion. Ich verwendet TextLaenge(AppDesktop()) da ich sonst keinen Parent habe. Aber anscheinend sind die Werte zu hoch, das oDlg Objekt habe ich noch nicht wenn ich den Dialog aufbaue. Ich habe von einem Dialog alle Get Postionen und möchte überall links davon einen Label darstellen.
Grüße
Rudolf

Code: Alles auswählen

@ 20,200 dcget aGets[1] getsize 300,20  PIXEL
nPos := 200 - TextLaenge(AppDesktop(), "Datum" , "8.Arial" )-1 // links für say
@ 20,nPos dcsay "Datum" font "8.Arial"  PIXEL
---