2016-05-10 4 views
1

Ich versuche, ein Zeichensatzsymbol auf einer Leinwand zu zeichnen. Ich verwende die Schriftart Ionicons. Alles, was ich bekomme, ist ein Rechteck auf dem Bildschirm.Delphi - Zeichnen Sie ein Unicode-Zeichen?

var 
    x1, y1: integer; 
    xChr: WideChar; 
begin 

    x1 := 10; 
    y1 := 10; 

    fMaleIcon := $f202; 
    fFemailIcon := $f25d; 

    if xRep.Male then 
    xChr := Char(fMaleIcon) 
    else 
    xChr := Char(fFemaleIcon); 

    xCanvas.TextOut(x1, y1, xChr); 
end; 

Was mache ich falsch?

Dank - Steve

+1

Welche Delphi-Version? Warum deklarierst du 'xChr: WideChar' und wirfst deine beiden Konstanten dann auf' Char'? –

+1

Ich folge, dass 'Char' ein Alias ​​für' WideChar' ist und die Besetzung benötigt wird, da eine ganze Zahl nicht mit 'Char' kompatibel ist. Sie sollten 'Char' anstelle von' WideChar' für den Typ verwenden. Sie sollten '# $ f202' und' # $ f25d' für die Zeichenliterale verwenden. –

+0

Jetzt fühle ich * wirklich * dumm - ich habe einen Tippfehler für den Schriftnamen gemacht !!!! –

Antwort

2

Das leere Rechteck bedeutet, dass die verwendete Schriftart enthält keine Glyphen für diese Zeichen. Sie müssen eine Schriftart verwenden, die dies tut.

Ihr Code ist ziemlich verworren. Ich würde es so schreiben:

var 
    xChr: Char; 
begin 
    if xRep.Male then 
    xChr := #$f202; 
    else 
    xChr := #$f25d; 

    xCanvas.TextOut(10, 10, xChr); 
end; 

Oder vielleicht:

const 
    GenderChars: array [Boolean] of Char = (#$f25d, #$f202); 
.... 
xCanvas.TextOut(10, 10, GenderChars[xRep.Male]); 

Vielleicht möchten einen Aufzählungstyp erklären Geschlecht Information zu halten, anstatt eine Boolean.

Verwandte Themen