chr() und Unicode

    chr() und Unicode

    Hallo zusammen!

    Delphi-Code

    1. procedure TForm1.CharAnzeige(Zahl : Integer);
    2. begin
    3. if (Zahl>19) and (Zahl<512) then
    4. Label3.Caption:=Chr(Zahl);
    5. end;

    Habe ein paar Fragen zu dieser kleinen Prozedur, mit der ich die Zeichen eines Zeichensatzes angezeigt bekommen möchte.
    1. Diese Prozedur funktioniert ohne Fehlermeldung wenn mit Zahl ein Wert über 255 übergeben wird. Dabei wird Chr() in der Hilfe definiert als function Chr(X: Byte): Char; . Da müsste doch bei Werten über 255 eine Fehlermeldung kommen.
    2. Ab Zahl>255 werden keine Zeichen mehr dargestellt. Ich gehe davon aus, dass schon in meiner Version Delphi XE (1) Starter mit Unicode gearbeitet wird und Char Werte über 255 erlaubt. Kann es sein, dass die Windows-Zeichensätze - ich verwende DejaVu Sans - auf 255 Zeichen beschränkt sind? Gibt es dann andere Zeichensätze mit mehr als 255 darstellbaren Zeichen?
    3. Gibt es noch eine andere Funktion, mit der Sonderzeichen wie etwa das eng zusammenhängende oe im Französischen in ein Label-Caption oder einen Edit-Text eingefügt werden können?
    Bin für jede freundliche Antwort dankbar.
    MfG Gelmo
    Aus der Hilfe zu System.Chr:
    Gibt das Zeichen für einen angegebenen ASCII-Wert zurück.

    ASCII geht nunmal nur bis 255, deshalb ist der angegebene Parameter auch vom Typ Byte. Willst Du höhere Werte verarbeiten, ohne dass dabei Bits verloren gehen, kannst Du auch einfach einen Typecast vornehmen. Soll heißen: versuch doch mal Char statt Chr.
    10 Minuten Nachdenken ersparen oftmals 10 Stunden Fehlersuche.
    Wenn ich chr(Zahl) durch char(Zahl) ersetze, passiert genau das Gleiche: Es werden nur die Zeichen bis 255 ausgegeben, zwischen 256 und 511 wird nichts angezeigt. Mir war eigentlich bekannt, dass chr() nur Werte bis 255 übernehmen kann, deshalb wunderte ich mich ja, dass bei höheren Werten keine Fehlermeldung auftrat.
    Hallo Gelmo,

    Ich habe spaßeshalber mal kurz in einem XE7 Projekt folgendes hinterlegt.

    Delphi-Code

    1. procedure TFrmMain.BitBtn1Click(Sender: TObject);
    2. begin
    3. ShowMessage(chr(366)+chr(367)+chr(368));
    4. end;


    Bei mir werten 3 Zeichen ausgegeben die zumindest auf den ersten Blick in die Kategorie "Unicode" gehören (Diverse Sonderformen eines ü - mit Kringel oben drauf bzw. schrägen ü Strichen)

    Gruß LoNi
    WENN 'Wer dumm frägt kriegt ne dumme Antwort.' = 'Wer nicht frägt bleibt dumm.' DANN ...???
    Sorry, liebe Gemeinde,
    da hat aber einer, also ich, mächtig gepennt! Nach dem Beitrag von LoNi habe ich noch mal nachgesehen und gerade festgestellt, dass der Fehler nicht in der Prozedur steckte, sondern schlicht daran lag, dass ich schon beim Aufruf festgelegt hatte, dass CharAnzeige nur aufgerufen wird, wenn Zahl kleiner als 256 ist. Da kann ich in der Prozedur die Ausführung begrenzen wie auch immer. Tut mir wirklich leid!
    Allen, die sich damit beschäftigt haben möchte ich nochmals danken.
    Habe jetzt Proben bis 65535 (hex FFFF) gemacht. Es waren nicht alle Werte mit Zeichen belegt, aber sehr viele. Das letzte (CHR(65533)) war eine Raute mit einem ausgesparten Fragezeichen.
    Nochmals Entschuldigung; ich hoffe, dass ich mich doch noch weiter hier melden darf.
    MfG Gelmo