[gelöst] Umlaute in Variable und Bildschirm

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
juelin
Beiträge: 243
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] Umlaute in Variable und Bildschirm

Beitrag von juelin »

Hallo zusammen,
wahrscheinlich ist die Frage schon tausendmal gestellt worden.
Ich frage trotzdem nochmal.
Wenn ich in Windows Daten aus der Datenbank in eine Varibale vom Typ string lese
und iese variaable auf dem Bildschirm ausgebe under String enthält Umlaute
so habe ich folgendes Problem.
Der Umlaut in der Variablen belegt 2 Byte (da Lazarus UTF8 hat).
Auf dem Bildschirm belegt der Umlaut natülich nur 1 Byte.

Die Ausgabe soll aber Formatiert sein, d.h. alle Werte untereinander stehen.
Variable1 = abcdef (wird auf Länge 10 mit Blanks vergrößert) in Zeile 1
Variable1 = äbcdef (wird auf Länge 10 mit Blanks vergrößert) in zeile 2
Variable2 = 1234
Weil ich den Inalt der Variablen so verlängere, dass sie sie Maximalgröße haben.
Beispiel: Varibale1:=Variable1+' ';
Ausgabe dann z. B. Listbox1.Itents.Add(Variable1+' '+Variable2);
Die Ausgabe am Bildschirm sieht aber so aus (wegen des Umlautes in Zeile 2)
Zeile 1 = abcdef 1234
Zeile 2 = äbcdef 1234

Gibt es da eine einfache Lösung zum Problem?

Danke und Gruß
Jürgen
Zuletzt geändert von juelin am So 4. Mai 2025, 16:27, insgesamt 2-mal geändert.

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

Re: Umlaute in Variable und Bildschirm

Beitrag von theo »

Du zeigst nicht, was du machst. Deshalb kann ich nur vermuten:
UTF8PadRight in LazUTF8.
https://dsiders.gitlab.io/lazdocsnext/l ... right.html

Benutzeravatar
juelin
Beiträge: 243
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: Umlaute in Variable und Bildschirm

Beitrag von juelin »

theo, habe geändert im Original.
Gruß
Jürgen

Benutzeravatar
juelin
Beiträge: 243
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: Umlaute in Variable und Bildschirm

Beitrag von juelin »

hi,
ich habe natülich auch schon eine Lösung,
aber die ist meiner Mainung nach zu umständlich.
Ich Frage den numerischen Code der Zeichen im String ab.
Umlaute haben ja 2 Byte und fangen immer mit 195 im ersten Byte an.
Gruß
Jürgen

Code: Alles auswählen

procedure TForm1.UTF8pruef(TextVar: string);
  var
    stelle: integer;
    lang: integer;
    wert1: integer;
    wert2: integer;
begin
  Umlaute:=0;
  lang:=Length(TextVar);
  if lang > 0 then
  begin
    for stelle:=1 to lang do
    begin
      wert1:=Ord(TextVar[stelle]);
      if stelle < lang then
      begin
        wert2:=Ord(TextVar[stelle+1]);
        if wert1 = 194 then
        begin
          if wert2 = 167 then Umlaute:=Umlaute+1;
          if wert2 = 176 then Umlaute:=Umlaute+1;
          if wert2 = 180 then Umlaute:=Umlaute+1;
        end;
        if wert1 = 195 then
        begin
          if wert2 = 132 then Umlaute:=Umlaute+1;
          if wert2 = 150 then Umlaute:=Umlaute+1;
          if wert2 = 156 then Umlaute:=Umlaute+1;
          if wert2 = 159 then Umlaute:=Umlaute+1;
          if wert2 = 164 then Umlaute:=Umlaute+1;
          if wert2 = 182 then Umlaute:=Umlaute+1;
          if wert2 = 188 then Umlaute:=Umlaute+1;
        end;
      end;
    end;
  end;
end;

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

Re: Umlaute in Variable und Bildschirm

Beitrag von theo »

Wie gesagt: UTF8PadRight ist die Lösung.

Code: Alles auswählen

 ListBox1.Items.add(UTF8PadRight('äbcdef',10)+'1234');
 ListBox1.Items.add(UTF8PadRight('abcdef',10)+'1234');  

Benutzeravatar
Ally
Beiträge: 279
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: x64

Re: Umlaute in Variable und Bildschirm

Beitrag von Ally »

Hallo Jürgen,

du hast geschrieben:
Umlaute haben ja 2 Byte und fangen immer mit 195 im ersten Byte an.
Damit du da nicht allzu viel Arbeit investierst, UTF8-Zeichen können bis zu vier Byte lang sein. (siehe https://de.wikipedia.org/wiki/UTF-8)

Ich bin da auch nicht so der Experte und nutze deshalb gerne die UTF8-Funktionen die Lazarus so bietet.
Eine hat theo ja schon genannt, viele weitere findest du unter https://lazarus-ccr.sourceforge.io/docs ... dex-5.html

Das Ganze wird aber sowieso nur mit proportionalen Schriften wie z.B. Courier funktionieren.
Bei nichtproportionalen Schriften wie z.B. Arial kommt es dann je nach Inhalt, immer noch zu Verschiebungen.

Viele Grüße
Roland

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

Re: Umlaute in Variable und Bildschirm

Beitrag von theo »

Ally hat geschrieben: So 4. Mai 2025, 12:28 Das Ganze wird aber sowieso nur mit proportionalen Schriften wie z.B. Courier funktionieren.
Bei nichtproportionalen Schriften wie z.B. Arial kommt es dann je nach Inhalt, immer noch zu Verschiebungen.
Das stimmt natürlich, lässt sich aber in einer Listbox kaum verhindern.
Ein Grid wäre hier wahrscheinlich sowieso geeigneter. Z.B. TStringGrid.

Benutzeravatar
juelin
Beiträge: 243
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: Umlaute in Variable und Bildschirm

Beitrag von juelin »

Hallo Theo,
danke für den Hinweis.
Frage noch: was für ein Package muss man in USES einfügen für UTF8PadRight?
Danke und Gruß
Jürgen

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

Re: Umlaute in Variable und Bildschirm

Beitrag von theo »

A
juelin hat geschrieben: So 4. Mai 2025, 14:29 Frage noch: was für ein Package muss man in USES einfügen für UTF8PadRight?
Habe ich doch oben geschrieben, in der ersten Antwort (Es ist übrigens eine Unit, kein Package).
Sonst steht es auch noch in der verlinkten Doku.
Und wenn ich es nicht angegeben hätte, könntest du die IDE danach suchen lassen. Den Begriff in den Code schreiben -> Kompilieren -> Rechtsklick auf der Fehlermeldung im Nachrichtenfenster -> "Suche Bezeichner".

Benutzeravatar
juelin
Beiträge: 243
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: Umlaute in Variable und Bildschirm

Beitrag von juelin »

Hallo Theo,
ja danke es funktioniert einwandfrei.
Meine Lösung klappt zwar auch, ist aber nicht so schön.
Nochmals Danke und Gruß
Jürgen

Antworten