eine blöde Frage

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
juelin
Beiträge: 297
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

eine blöde Frage

Beitrag von juelin »

Hallo,
vielleicht bin ich nur zu blöd.
Ich möchte in einem Label das © Zeichen ausgeben.
Ich mache das mit Label2.Caption:=Chr(169);
Aber Lazarus gibt nur ein ? aus.
Was ist der Trick?
Gruß
Jürgen

Soner
Beiträge: 739
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: eine blöde Frage

Beitrag von Soner »

Wie machst du dir das Leben nicht einfacher:
Label2.Caption:='©';
oder
Label2.Caption:=#0169;

Ab 128 ist es Unicode.

Benutzeravatar
juelin
Beiträge: 297
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: eine blöde Frage

Beitrag von juelin »

Hallo soner,
ja so geht es mit Label1.Caption:=#0169;
Aber hast Du eine Ahnung warum Chr(169) nicht geht?
Danke und Gruß
Jürgen

Soner
Beiträge: 739
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: eine blöde Frage

Beitrag von Soner »

Ich glaube man muss das als UTF8 dekodiert angeben, also so etwas wie Char($c2a9), aber es funktioniert nicht, auch utf8Char nicht.
Vielleicht meldet sich ein Experte dazu.

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

Re: eine blöde Frage

Beitrag von wp_xyz »

juelin hat geschrieben: Fr 20. Sep 2024, 22:34 ja so geht es mit Label1.Caption:=#0169;
Aber hast Du eine Ahnung warum Chr(169) nicht geht?
Lazarus arbeitet mit UTF8. Da bestehen nur die ASCII-Zeichen (<#128) aus 1 Byte, alle anderen haben 2, 3 oder sogar 4 Bytes. Das Zeichen chr(169) ist kein gültiger UTF8-Codepoint, denn es liegt über #128 und es müsste also noch mindestens ein weiteres Byte vorhanden sein.

Wenn du den UTF8-Code für ein Zeichen nicht kennst, solltest du die Lazarus-Zeichentabelle öffnen ("Bearbeiten" > "Aus der Zeichentabelle einfügen"). Stelle sicher, dass der Tabellen-Reiter "Unicode" aktiv ist. Dann kannst du in der Combobox "Bereich" die gewünschte Seite einstellen. Das Copyright-Symbol findest du unter "Latin-1 Supplement". Dann auf dem Zeichen klicken, und es wird im Quelltext an der Stelle eingefügt, an der sich gerade der Cursor befindet.

paweld
Beiträge: 93
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: eine blöde Frage

Beitrag von paweld »

Ja, wie @wp Lazarus sagte arbeitet mit UTF-8 und Char über 127 wird nicht funktionieren. Aber Sie können WideChar verwenden oder Ansi in UTF-8 konvertieren

Code: Alles auswählen

  Label1.Caption := widechar(169);
  Label2.Caption := UTF8Encode(char(169));  
Grüße / Pozdrawiam
paweld

Benutzeravatar
juelin
Beiträge: 297
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: eine blöde Frage

Beitrag von juelin »

danke für die Info poweld.
Gruß
Jürgen

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 602
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: eine blöde Frage

Beitrag von Niesi »

[/quote]

...

Wenn du den UTF8-Code für ein Zeichen nicht kennst, solltest du die Lazarus-Zeichentabelle öffnen ("Bearbeiten" > "Aus der Zeichentabelle einfügen"). Stelle sicher, dass der Tabellen-Reiter "Unicode" aktiv ist.

...

[/quote]

Hilf mir mal bitte: Ich finde beides nicht, weder in der Lazarus / Fpc Stable Installation noch in der trunk ... :?: :?: :?:
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Re: eine blöde Frage

Beitrag von theo »

Niesi hat geschrieben: Sa 21. Sep 2024, 09:40 Hilf mir mal bitte: Ich finde beides nicht, weder in der Lazarus / Fpc Stable Installation noch in der trunk ... :?: :?: :?:
Das Package muss man jetzt nachinstallieren. Es heisst "charactermap_ide_pkg" (Package -> Installierte Packages einrichten..)
Früher war das standardmässig drin.
Ich halte es für eine schlechte Entscheidung, dass es nicht mehr automatisch installiert wird.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 602
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: eine blöde Frage

Beitrag von Niesi »

theo hat geschrieben: Sa 21. Sep 2024, 10:09
Niesi hat geschrieben: Sa 21. Sep 2024, 09:40 Hilf mir mal bitte: Ich finde beides nicht, weder in der Lazarus / Fpc Stable Installation noch in der trunk ... :?: :?: :?:
Das Package muss man jetzt nachinstallieren. Es heisst "charactermap_ide_pkg" (Package -> Installierte Packages einrichten..)
Früher war das standardmässig drin.
Ich halte es für eine schlechte Entscheidung, dass es nicht mehr automatisch installiert wird.
Danke, Theo, hab's gefunden und installiert ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Re: eine blöde Frage

Beitrag von wp_xyz »

Die Zeichentabelle war früher in der IDE hart eingebaut und wurde bei Laz3.0+ als separates Package ausgelagert, um zum einen die Basis-IDE zu entschlacken und zum anderen die Zeichentabelle auch für User-Code verfügbar zu machen.

Das Package ist in den vorkompilierten Release-Versionen standardmäßig enthalten, und auch wenn man die IDE mit "make bigide" aus dem Source-Code neu baut, wird es mit installiert. Nur bei einem alten Lazarus aus Quellcode, der erstmals vor der Umstellung installiert wurde und nun per git aktualisiert wird, ist es natürlich nicht enthalten und muss manuell nachinstalliert werden.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 602
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: eine blöde Frage

Beitrag von Niesi »

wp_xyz hat geschrieben: Sa 21. Sep 2024, 12:10 Die Zeichentabelle war früher in der IDE hart eingebaut und wurde bei Laz3.0+ als separates Package ausgelagert, um zum einen die Basis-IDE zu entschlacken und zum anderen die Zeichentabelle auch für User-Code verfügbar zu machen.

Das Package ist in den vorkompilierten Release-Versionen standardmäßig enthalten, und auch wenn man die IDE mit "make bigide" aus dem Source-Code neu baut, wird es mit installiert. Nur bei einem alten Lazarus aus Quellcode, der erstmals vor der Umstellung installiert wurde und nun per git aktualisiert wird, ist es natürlich nicht enthalten und muss manuell nachinstalliert werden.
Meine "Stable" ist mit FpcUpDeLuxe neu installiert, da musste ich "charactermap_ide_pkg.0.1" selbst installieren.

Um das jetzt noch mal zu prüfen, habe ich mir mit FpcUp eine weitere "Trunk" installiert - da wurde keine Charmap installiert.

Ich arbeite unter Linux Mint 22 Cinnamon, mag sein, dass es daran oder an der Installation mit FpcUp liegt - sollte mensch halt wissen ... :wink:

charactermap_ide_pkg.png
charactermap_ide_pkg.png (189.85 KiB) 2405 mal betrachtet
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Sieben
Beiträge: 292
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: eine blöde Frage

Beitrag von Sieben »

Ich knall das mal hier unten dran, weil es irgendwie verwandt scheint - warum gibt mir das ein "Gotcha!"?

Code: Alles auswählen

procedure TfrmMain.Button1Click(Sender: TObject);
var UTF8Key: TUTF8Char;
begin
  UTF8Key := 'Ӝ';
  case UTF8Key of #32..#255:
    ShowMessage('Gotcha!');
  else
    ShowMessage('Nope...');
  end;
end; 

Wird da nur das erste Byte ausgewertet? Mit #126 statt #255 gibt es "Nope,,,".

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6855
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: eine blöde Frage

Beitrag von af0815 »

Sieben hat geschrieben: So 6. Okt 2024, 12:55 Wird da nur das erste Byte ausgewertet? Mit #126 statt #255 gibt es "Nope,,,".
Wenn ich mir das hier so ansehe https://www.freepascal.org/docs-html/ref/refsu56.html so wird scheinbar wirklich auf Ebene des Chars ausgewertet, weil ein UTF8case gibt es nicht. Das heisst für mich, utf8 kann man nicht mit case auswerten.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

paweld
Beiträge: 93
Registriert: So 11. Jun 2023, 16:01
OS, Lazarus, FPC: Lazarus trunk, FPC fixes

Re: eine blöde Frage

Beitrag von paweld »

Im Falle von string ( TUTF8Char = string[7] ) werden alle im Bereich angegebenen Bytes verglichen. Gemäß der Dokumentation - Link bereitgestellt von @af0815:
The case with strings is equivalent to a series of if then else statements, no optimizations are performed.

However, ranges are allowed, and are the equivalent of an

Code: Alles auswählen

if (value>=beginrange) and (value<=endrange) then  
  begin  
  end; 
In Ihrem Fall sieht es also so aus:

Code: Alles auswählen

var
  UTF8Key: TUTF8Char;
begin
  UTF8Key := 'Ӝ';   //#211#156
  case UTF8Key of #32..#255: // if (UTF8Key >= #32) and (UTF8Key <= #255) then
    ShowMessage('Gotcha!');
  else
    ShowMessage('Nope...');
  end;
end;  
Grüße / Pozdrawiam
paweld

Antworten