Darstellung von Sonderzeichen in Lazarus?

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Darstellung von Sonderzeichen in Lazarus?

Beitrag von MmVisual »

Hallo,

Ich möchte in der EXE Sonderzeichen wie z.B. "␍ ␊ Gu ␝ ␄" darstellen können.

Der Test:

Code: Alles auswählen

Procedure TForm1.FormShow(Sender: TObject);
Var s: String;
  i: Integer;
Begin
  s := #13#32#10' Gu '#$1D#32#$04;
  For i := 0 To 31 Do
    s := StringReplace(s, Chr(i), UTF8Encode(WideChar($2400 + i)), [rfReplaceAll]);
  ListBox1.Items.Add(s);
  Clipboard.AsText := s;
end;  
Anstatt der Sonderzeichen werden leider Quadrate gezeigt, mit der gleichen Schriftart in OpenOffice hingegen werden die Zeichen korrekt dargestellt. Wie kann ich die TListBox dazu überreden dass diese mit die Zeichen auch darstellt?

Die FOR-Schleife ersetzt die Zeichen #00 .. #31 in die Zeichen ab #$2400 so wie hier in der Unicode-Liste zu sehen:
https://www.compart.com/de/unicode/sear ... characters
Danach werden die in eine TListBox geschrieben sowie in die Zwischenablage damit ich den Text in z.B. Openoffice einkopieren kann.

Muss ich da noch den String s umkonvertieren damit es geht?
Bild1.png
Bild1.png (3.25 KiB) 247 mal betrachtet
Vielen Dank für eure Hilfe.
Markus

Testprojekt:
TestUnicodeZeichen.zip
(2.51 KiB) 5-mal heruntergeladen

Benutzeravatar
Winni
Beiträge: 717
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von Winni »

Hi!

Ich hab mit Deinem Code keine Probleme - siehe Anhang.

Vielleicht liegst am Betriebssystem oder der Version von fpc/Lazarus.
Bei mir Lin64, gtk2, fpc 3.2, Laz 2.0.12

Winni
Dateianhänge
UTF8crlf.png
UTF8crlf.png (5.55 KiB) 238 mal betrachtet

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

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von theo »

Afaics sind das eigentlich Steuerzeichen, keine "Sonderzeichen".

TSchnuckenbock
Beiträge: 15
Registriert: Do 20. Jul 2017, 23:47

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von TSchnuckenbock »

Ich arbeite mit Win10 64 Bit und Lazarus 2.0.6.

Wenn der Font der Listbox auf "Courier New" steht, krieg ich auch Kästchen.
Aber wenn ich Tahoma als Font für die Listbox auswähle, scheinen es die gewünschten Zeichen zu sein, wenigstens so ähnlich.

Ich vermute mal, daß nicht alle Schriften alle Zeichen mit drinne haben.

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

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von wp_xyz »

Wenn ich wie in dem Beispiel mit "Courier New" arbeite (Win 10), sehe ich in der Listbox auch die Quadrate anstatt der Sonderzeichen.

Die letzte Zeile des gezeigten Codes kopiert den String ins Clipboard. Wenn ich dann den String in LibreOffice Writer einfüge, sind die Sonderzeichen plötzlich da. Doch der Font ist nicht mit in LibreOffice angelangt, Courier New wurde ersetzt durch Liberation Serif, in dem offenbar die Sonderzeichen vorhanden sind. Formatiere ich den eingefügten Text nach Courier New um, bleiben die Sonderzeichen da, sie sehen aber so aus wie vorher mit Liberation Serif. Daher vermute ich, dass LibreOffice weiß, welche Fonts einen möglichst kompletten Zeichensatz enthalten, und ersetzt bei dem aktuell zu verwendenden Font die fehlenden Zeichen durch die aus einem dieser kompletten Fonts.

Dasselbe Experiment mit MS Word formatiert den eingefügten Text in Calibri, und anstelle der Sonderzeichen sehe ich Kästchen mit Fragezeichen. Und formatiere ich den Text in Courier New um, habe ich die Kästchen wieder.

MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von MmVisual »

Vielen Dank für die Antworten!

@Theo: Ich wandle die ASCII Steuerzeichen in lesbare Sonderzeichen und die werden dann in der TListBox protokolliert.

Sorry, hatte ich vergessen zu schreiben: Lazarus 2.0.12, Win7/64

Gibt es eine Möglichkeit heraus zu finden ob ein Zeichen in der Schriftart nicht existiert?
Wenn das "␍" Zeichen dann nicht drin wäre könnte ich stattdessen z.B, "[CR]" als normale Buchstaben ausgeben.

MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von MmVisual »

@wp_xyz:

Du hast recht, Openoffice merkt offenbar dass dieses Zeichen nicht in der Schriftart existiert.
Wenn ich in der Demo-EXE "Lucida Sans Unicode" einstelle dann klappt das auch in meinem Win7 System.

Hm. Ich überlege noch wie ich dieses Problem in Lazarus umgehen kann, so dass diese Zeichen ähnlich wie bei Openoffice dargestellt werden. Und dass dies auch problemlos bei jedem X beliebigen anderen Rechner auch funktioniert. Ich weiß ja nicht welche Schriftart wo überall drauf ist.

Benutzeravatar
Winni
Beiträge: 717
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von Winni »

Hi!

Es kann sein, dass Du alte Versionen der Fonts besitzt, die sich nicht im Namen von der neuen Version unterscheiden, sondern nur in der Größe. Ich weiss es definitiv bei Arial und der Liberation Font Gruppe. Da Du mit Win7 arbeitest: Die neuesten Fonts von Win10 besorgen - gibts auch offiziell bei M$.

Winni

Timm Thaler
Beiträge: 1201
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von Timm Thaler »

Hä?

Ich würde ja erwarten, dass wenn in einem String ein #13 #10 vorkommt der Editor einen Zeilenumbruch macht und nicht irgendwelche Schriftzeichen ausgibt. So wie sich das gehört.

Wenn ich ein Steuerzeichen z.B. aus einem Uart-Datenstrom anzeigen will, dann wandle ich es in eine Zeichenkette z.B. "$13" um und zeige diese an.

MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: Darstellung von Sonderzeichen in Lazarus?

Beitrag von MmVisual »

In dieser Codezeile:

Code: Alles auswählen

For i := 0 To 31 Do
    s := StringReplace(s, Chr(i), UTF8Encode(WideChar($2400 + i)), [rfReplaceAll]);
werden automatisch alle #$0D (=#13) in #$240D gewandelt und damit wird aus einem Steuerzeichen ein Sonderzeichen.
Diese FOR Schleife macht es für alle Steuerzeichen von 0..31

Ja, klar kann man das #13 in ein Text "$13" um wandeln, jedoch wenn im UART Datenstrom ein "$13" drin steht kann man das nicht mehr unterscheiden. Daher würde ich lieber das passende Sonderzeichen aus der Unicode Tabelle verwenden. Denn das kommt garantiert nicht über UART an.

Antworten