Forum: PC-Programmierung fpc/Lazarus: GTK zeigt String falsch oder gar nicht


von Linuxer (Gast)


Lesenswert?

Hi zusammen,
ich drehe mich gedanklich gerade etwas im Kreis - wobei ich auch nicht 
sicher bin, ob ich das Problem nicht verstanden habe oder doch ein Bug 
vorliegt...

Mein Programm ist eigentlich recht simpel: in einer Form ist ein 
TStaticText, dessen Caption ich setzen möchte.

Variante 1:
1
st.Caption:='süd';  // funktioniert korrekt

Variante 2:
1
const s: String = 'süd';
2
st.Caption:=s;      // funktioniert korrekt

Variante 3:
1
function s: String;
2
st.Caption:=s;      // GTK Fehler auf der Konsole: invalid UTF8 character
1
function s: String;
2
st.Caption:=UFT8Encode(s);   // zeigt 's?d' an

Variante 3 ist das Ziel (der Text wird dynamisch erzeugt). Was mache ich 
hier falsch? Und warum ist der String als Konstante scheinbar ein 
anderer String als als Funktions-Rückgabe?
Habe statt UFT8encode auch schon UFT8decode, UTF8toSys etc ausprobiert, 
bislang aber ohne Erfolg :(

Danke schon mal!

Viele Grüße

Andreas

P.S. Aktuell entwickle ich unter Linux. Wäre schön, wenn die Lösung auch 
unter Windows gehen würde - kann ich aber notfalls auch per 
Compiler-ifdef regeln.

von Andreas B. (bitverdreher)


Lesenswert?

Was erwartest Du, wenn Du eine Eigenschaft zuweist, die noch gar nicht 
definiert ist?
Wo ist denn diese ominöse Funktion s?
(die normalerweise auch mit s() aufgerufen wird)

von Εrnst B. (ernst)


Lesenswert?

Sind die Compiler-Optionen richtig gesetzt?
Je nachdem wird "String" zu "AnsiString" oder "UnicodeString"?
wie schaut's aus, wenn du direkt "UnicodeString" verwendest?
1
const s:UnicodeString='TestÄÖÜ 🤪 🤮 🎲';
2
..

von Linuxer (Gast)


Lesenswert?

Εrnst B. schrieb:
> Sind die Compiler-Optionen richtig gesetzt?
> Je nachdem wird "String" zu "AnsiString" oder "UnicodeString"?
> wie schaut's aus, wenn du direkt "UnicodeString" verwendest?
>
1
> const s:UnicodeString='TestÄÖÜ 🤪 🤮 🎲';
2
> ..
3
>

Hi Ernst,
vielen Dank, das war ein sehr guter Hinweis! :)
Mit AnsiString geht es nicht, mit explizit UnicodeString funktioniert 
es.
Was auch logisch ist, wenn man Deinen 2. Hinweis anschaut und in den 
Compiler-Einstellungen den Haken bei "AnsiStrings verwenden" findet. :(

Habe noch etwas weitergetrieben und auf folgende Konstellation 
heruntertitriert:
1
const s : UnicodeString = 'äöü';   // nur hier ist Unicode entscheidend!
2
function sf: String;
3
begin
4
  result:=s;
5
end;
6
st.Caption:=sf;

Vielen Dank!

Viele Grüße Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.