[gelöst] Umlaute in "Caption" (Schon wieder)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

[gelöst] Umlaute in "Caption" (Schon wieder)

Beitrag von Aliobaba »

Hallo,

Sorry, aber mit Umlauten und den diversen Codierungen habe ich immer wieder Probleme.
Ich muss wohl irgend etwas "verstellt" haben, denn plötzlich werden Umlaute in MessageBoxen oder Sachen wie sowas (Textzuweisung an ein Label - Caption):

Code: Alles auswählen

 
    Beispiel.caption := ('Kürzel');
 

so dargestellt: " K?rzel " (also alle Umlaute mit Fragezeichen)

Im Internet fand ich den Hinweis, dass dies:

Code: Alles auswählen

 
    Beispiel.caption := SystoUTF8('Kürzel');
 

das Problem löst -> Stimmt! Die Umlaute werden nun richtig dargestellt. (Aber nicht wie im unten genannten Beitrag " utf8tosys('Löschen'); ")

Aber wo lag mein ursprünglicher Fehler? Was habe auf meiner "Entdeckungstour" durch "Lazarus" "verstellt" und was muss ich wieder umstellen, damit die Umlaute wieder ohne diesen auf Dauer doch recht umständlichen "Trick" dargestellt werden?? Vor meiner versehentlichen "Umstellung" ging's doch auch ohne Probleme!

Aliobaba

Diesen Beitrag kenne ich, 'OLLO_S' schildert exakt mein Problem; aber irgendwie hilft er mir nicht weiter, der Quelltext selbst ist UTF8-codiert und zeigt die Umlaute "richtig":
http://www.lazarusforum.de/viewtopic.ph ... ion#p52037
Zuletzt geändert von Aliobaba am Sa 13. Sep 2014, 15:51, insgesamt 3-mal geändert.
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von Antrepolit »

Aliobaba hat geschrieben:Hallo,

Sorry, aber mit Umlauten und den diversen Codierungen habe ich immer wieder Probleme.
Welches Betriebssystem hast du? Unter Windows sollte der Quelltext eben nicht UTF-8 codiert sein.
Grüße, Antrepolit

care only if your os is really burning

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von Aliobaba »

Hallo,

... das Betriebssystem ist Windows 7.
Mein Ziel ist aber schon, dass der Programmcode auch mit Linux ausführbar ist.
Mein kleines Programm habe ich ursprünglich auf meinem (alten) Laptop geschrieben (Windows XP und Lazarus Version 1.0.?) .
Bei der "Portierung" auf Windows 7 (Lazarus Version 1.2.4) zeigt sich mein "Umlautproblem" aber in gleicher Weise.

Muss ich den Quelltext ändern? Wie? ( Quelltexteditor -> Dateieinstellungen -> Zeichenkodierung [Welche?] )

Aliobaba

(kleiner Nachtrag:
Auch Text-Files, die von der Festplatte in ein Memo-Feld geladen werden haben statt der Umlaute Fragezeichen.
Es ist also offenbar kein isoliertes Problem des Programm-Codes
Muss man wirklich überall im Quellcode "SystoUTF8" reinschreiben?? Gibt es eine "generelle" Einstllmöglichkeit? )
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von theo »

Antrepolit hat geschrieben: Welches Betriebssystem hast du? Unter Windows sollte der Quelltext eben nicht UTF-8 codiert sein.
So ein Quatsch. Alles muss UTF8 kodiert sein, also Standard.
Hast du das verstellt beim Quellcode?

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von Aliobaba »

theo hat geschrieben: So ein Quatsch. Alles muss UTF8 kodiert sein, also Standard.
Hast du das verstellt beim Quellcode?
Hallo,

Im Quellcode (im Quelltexteditor) werden alle Umlaute korrekt angezeigt.
Und wie gesagt: Irgendwann fiel mir dann "plötzlich" auf, dass die Umlaute wie oben beschrieben nicht mehr korrekt im kompilierten Programm angezeigt werden. Welcher Schritt zu diesem Verhalten(*) geführt hat kann ich eben leider nicht mehr nachvollziehen.

Aliobaba

(*)
1. Text in den Labels, wenn sie zur Laufzeit eingelesen werden (nicht wenn sie im Objektinspektor vordefiniert sind: da sind die Umlaute korrekt)
2. Die Ausgaben in "Showmessage"
3. Die Darstellung in Memos, wenn Textfiles eingelesen werden.
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von wp_xyz »

Falls du dir Lazarus verkonfiguriert hast, könntest du, da alle Einstellungen in deinem Profilordner abgelegt werden, Lazarus mit neuem Profil starten. Dazu den Profilordner vorübergehend umbenennen, so dass er von Lazarus beim nächsten Start mit Defaultwerten neu angelegt wird. Der Profilordner ist üblicherweise in c:\Benutzer\<loginname>\AppData\Local\lazarus. Allerdings sind dann halt alle Einstellungen und installierten Zusatzkomponenten futsch. Aber wenn du später den alten Profil-Ordner wieder zurückbenennst, ist alles wieder da.

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von theo »

Aliobaba hat geschrieben: Muss ich den Quelltext ändern? Wie? ( Quelltexteditor -> Dateieinstellungen -> Zeichenkodierung [Welche?] )
Und was steht dort?

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von Aliobaba »

Hallo,

die Zeichenkodierung war schon auf UTF8 eingestellt. Das "Caption" Problem ist aber nun offenbar gelöst, nachdem ich den Button "Mit anderer Codierung erneut einlesen" gedrückt habe.

Ein weiteres - wahrscheinlich damit zusammenhängendes Problem besteht noch:
Warum erkennt " If (fileexists () ) " ein File nicht, das im Namen Umlaute enthält. Mit "umlautfreien" File-Namen hat die Procedur keine Probleme.

Code: Alles auswählen

  
procedure TForm1.Bt_Laden__NotCrypClick(Sender: TObject);
var
   sss : string;
begin
   OpenDialog1.InitialDir:=Cry_Pfad;
   if OpenDialog1.Execute then
   begin
      sss := OpenDialog1.FileName;
      SystoUTF8(sss);                              // das " SystoUTF8 " bringt hier aber nichts
      Ed_test.Text:=sss;  // nur zur Kontrolle sss  (Variable wird mit den Umlauten korrekt eingelesen)
   end
   else
   begin
   end;
 
   If  (fileexists (sss) )  then  // Ein file, das im Namen Umlaute enthält wird als "nicht existent" behandelt
   begin
     Memo_NonCry.Lines.LoadFromFile(sss);
   end;
   Show_NonCry;
end;        
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von theo »

Verwende hier "FileExistsUTF8".
Das Problem ist, dass die RTL nicht mit Unicode arbeitet, also muss man solchen Funktionen auf die Sprünge helfen.
Mit den Komponenten der LCL ist das nicht nötig.

http://wiki.freepascal.org/LCL_Unicode_ ... Dateinamen

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von Aliobaba »

Danke, Theo!

Bin jetzt einen wichtigen Schritt weiter: Das Programm "springt" jetzt immerhin schon in die "if"-Abfrage,
bleibt dann aber bei " Memo_NonCry.Lines.LoadFromFile (sss); " hängen mit der Fehlermeldung:

Projekt ... hat Exception-Klasse "EDOpenError" ausgelöst mit der Meldung:
Unable to open file "C:\MyGPGNoSpy\Cry\testü.txt"

Bei Adresse 4300075

Code: Alles auswählen

 
   If  (FileExistsUTF8 (sss) )  then
   begin
     Memo_NonCry.Lines.LoadFromFile (sss);
   end;
   Show_NonCry;     
Probiert habe ich das:

Code: Alles auswählen

    begin
     UTF8toSys(sss); 
     Memo_NonCry.Lines.LoadFromFile (sss);
   end; 
und das:

Code: Alles auswählen

    begin
     UTF8ToAnsi (sss); 
     Memo_NonCry.Lines.LoadFromFile (sss);
   end; 
und auch das ohne Erfolg:

Code: Alles auswählen

    begin
     SystoUTF8(sss); 
     Memo_NonCry.Lines.LoadFromFile (sss);
   end;
<<<<<<<<<<<<<<<<<<<<<<<
Falls es jemanden interessiert:
Der Code kommt aus aus meinem (Anfänger-)Programm "MyGPGNoSpy", das für den Anwender möglichst einfach die Funktionen des symmetrischen Verschlüsselns (und nur des symmetrischen (!)) in eine graphische Oberfläche bringen soll:
http://www.mymemorydb.n-bay.de/DL/MyGPGNoSpy.7z
(Eine Konvertierung zu Linux möchte ich bald folgen lassen; mit "Wine" läuft's aber auch ganz prima)
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von wp_xyz »

UTF8ToSys und UTF8ToAnsi sind Funktionen, das Ergebnis der Konversion hast du weggeworfen:

Code: Alles auswählen

 
  Memo_NonCry.Lines.LoadFromFile(UTF8ToAnsi(sss));
 

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: Umlaute in "Caption" (Schon wieder)

Beitrag von Aliobaba »

DANKE! :oops:

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Antworten