[gelöst] Anzeige Text mit Umlauten in ListBox

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

[gelöst] Anzeige Text mit Umlauten in ListBox

Beitrag von juelin »

Hallo,
ich hoffe mein Beitrag ist hier richtig.
Mein Problem:
Ich lese daten aus einer Datenbank und zeige sie in einer ListBox an.
Aber manchmal stimmt der Abstand nicht (siehe bild1 - bild4).
Zeile 1 ist der Text so wie ich ihn gerne ausgeben möchte.
Zeile 2 ist der Text als Hexadezimal
Zeile 3 ist der Hexadezimal als Char (komischer Weise stimmen die Abstände hier)
Zeile 4 ist der Hexadezimal als Char ohne Leerzeichen
Hier der Code:

Code: Alles auswählen

    f19:=ialpha;
    f2:=Form1.Blankweg(3,f2);          // Blanks am Anfang und am Ende entfernen
    f4:=Form1.Blankweg(3,f4);
    f19:=Form1.Blankweg(3,f19);
    f2:=Form1.Blankdazu(2,30,f2);    // Feld mit Blanks auf Länge bringen (hier 30 Stellen)
    f4:=Form1.Blankdazu(1,4,f4);
    f19:=Form1.Blankdazu(2,34,f19);
                                                        // Variable tt, iaöpha, f2, f4, f16, f17, f18, f19 = string
                                                        // Variable l, fb, fc = integer
    ialpha:=f19;
    tt:='  | '+f2+' | '+ialpha+' | '+f4+' Gramm |';
    ListBox1.Items.Add(tt);              // Ausgabe Zeile 1 Text
    z5:=z5 + 1;
    f18:='';
    f19:='';
    f16:='';
    l:=Length(tt);
    if l > 0 then  
    begin
      for fc:=1 to l do  
      begin
        f17:=Copy(tt,fc,1);
        fb:=Ord(f17[1]);
        f18:=f18+HexStr(fb,2)+' ';
        f19:=f19+' '+Char(fb)+' ';
        f16:=f16+Char(fb);
      end;
      ListBox1.Items.Add(f18);          // Ausgabe Zeile 2 Hexadezimal von Text
      ListBox1.Items.Add(f19);          // Ausgabe Zeile 3 Text zu Hexadezimal
      ListBox1.Items.Add(f16);          // Ausgabe Zeile 4 Text  
    end;
Bei Königskerzen ist der '|' ein zu kurz.
Bei Blätter (letzte) ist der '|' ein zu lang.
Kann mir das jemand erklären?

Danke und Gruß
Jürgen
Dateianhänge
bild3.jpg
bild3.jpg (175.81 KiB) 502 mal betrachtet
bild2.jpg
bild2.jpg (193.71 KiB) 502 mal betrachtet
bild1.jpg
bild1.jpg (229.5 KiB) 502 mal betrachtet
Zuletzt geändert von juelin am Do 17. Apr 2025, 14:00, insgesamt 3-mal geändert.

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Anzeige Text mit Umlauten in ListBox

Beitrag von juelin »

letztes Bild
Dateianhänge
bild4.jpg
bild4.jpg (160.91 KiB) 499 mal betrachtet

Benutzeravatar
Zvoni
Beiträge: 363
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Anzeige Text mit Umlauten in ListBox

Beitrag von Zvoni »

So langsam sollte man doch wissen, wenn man einen UTF8-String Byte für Byte durchlauft (Length-Funktion!!), dass nur Mist rauskommt....
.... und im Satz oben drüber ist ein Hinweis.....

und wenn du eine "ListBox" mit mehreren Spalten haben willst, nimm ein StringGrid
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Anzeige Text mit Umlauten in ListBox

Beitrag von juelin »

Du hast mein Problem nicht verstanden.
Nicht Die Hexwerte sind das Problem sonder der Klartext.
Schau dir mal die senkrechten Striche '|' an.
Hinter der Köningskerze ist er eins zu kurz und bei Sptzwegerich hinter Blätter ein zu lang.
Gruß
Jürgen

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

Re: Anzeige Text mit Umlauten in ListBox

Beitrag von theo »

Könnte auch an Blankweg und Blankdazu liegen.
Length <> UTF8Length.
Schwer zu sagen.

Benutzeravatar
Zvoni
Beiträge: 363
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Anzeige Text mit Umlauten in ListBox

Beitrag von Zvoni »

Achso...
ändert nix an der Tasache dass es UTF8-CodePoints sind.
Zeig mal den Code für "BlankWeg" und "BlankDazu".
Das Problem liegt wahrscheinlich dort
theo hat geschrieben: Do 17. Apr 2025, 13:09 Könnte auch an Blankweg und Blankdazu liegen.
Length <> UTF8Length.
Schwer zu sagen.

Sogar ziemlich sicher....

LazUtils zu benötigte Packages hinzufügen,
dann das hier ausführen:

Code: Alles auswählen

program Project1;
{$mode objfpc}{$H+}
Uses SysUtils, LazUTF8;

Var
  s:String;

begin
  s:='Königskerze';
  Writeln('Length=',length(s),' - UTF8Length=',UTF8Length(s));
  Readln;
end.
EDIT: Übrigens: Wenn du Blanks Links oder Rechts an einen String hängen willst.
Uses StrUtils;
https://www.freepascal.org/docs-html/rt ... right.html
Zuletzt geändert von Zvoni am Do 17. Apr 2025, 13:26, insgesamt 1-mal geändert.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Anzeige Text mit Umlauten in ListBox

Beitrag von juelin »

anbei nochmal ein Bild, damit es deutlich wird.
Dateianhänge
bild5.jpg
bild5.jpg (194.13 KiB) 460 mal betrachtet

Benutzeravatar
Zvoni
Beiträge: 363
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Anzeige Text mit Umlauten in ListBox

Beitrag von Zvoni »

*schulterzuck*

Code: Alles auswählen

program Project1;
{$mode objfpc}{$H+}
Uses SysUtils, LazUTF8, StrUtils;
Var
  h:String;
  k:String;
begin
  h:='Huflattich';
  k:='Königskerze';
  h:=PadRight(h,30);
  k:=PadRight(k,30);
  Writeln('|'+h+'|');
  Writeln('|'+k+'|');
  Writeln('-----------------------------------');
  h:=PadRight(h,30+(Length(h)-UTF8Length(h)));
  k:=PadRight(k,30+(Length(k)-UTF8Length(k)));
  Writeln('|'+h+'|');
  Writeln('|'+k+'|');
  Writeln('-----------------------------------');
  Readln;
end.
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
juelin
Beiträge: 237
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Anzeige Text mit Umlauten in ListBox

Beitrag von juelin »

Ja Danke ZVONI,
die UTF8Length hat mich drauf gebracht.
Ich prüfe die UTF8Length und passe dann die Länge entuell an.
1. verkürzen
2. verlängern
anders herum gibt Fehler.

Code: Alles auswählen

    fc:=UTF8Length(f2);
    While fc > 30 do
    begin
      f2:=Copy(f2,1,fc-1);
      fc:=UTF8Length(f2);
    end;
    fc:=UTF8Length(f2);
    While fc < 30 do
    begin
      f2:=f2+' ';
      fc:=UTF8Length(f2);
    end;
Gruß
Jürgen

Antworten