Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ASCII-Sonderzeichen in TRichEdit (https://www.delphipraxis.net/170712-ascii-sonderzeichen-trichedit.html)

BasilBavaria 30. Sep 2012 09:56

ASCII-Sonderzeichen in TRichEdit
 
Hallo,

ich sitz aufm Schlauch: Wie kann ich in einem TRichEdit die ASCII-Sonderzeichen ab #127 - inbesondere die Linienzeichen wie ═╬═ einfügen und drucken?

Es geht dabei um eine einfache Tabellenausgabe wie in DOS-Zeiten mit einer Mono-Schriftart wie Courier New o.ä.
Als Basis dient eine uralte TP 6 Procedure, die recht einfach Boxen und Linien zeichnen konnte.
Zur Zeit kommt aber immer der erweiterte ANSI-Satz im RichEdit an.

Alternativ die Frage: Wie kann ich einfach Linien im Text zeichnen?

Vielen Dank und viele Grüße aus Niederbayern
Der Basil

himitsu 30. Sep 2012 10:00

AW: ASCII-Sonderzeichen in TRichEdit
 
Bis Delphi 2007 (ANSI), indem du dir die passende Codepage einstellst und/oder dir einen entsprechenden Font besorgst.

Ab Delphi 2009 (Unicode, bzw. vorher auch mit einer entsprechenden Unicode-Erweiterung), indem du dir im Unicode die entsprechenden Zeichencodes raussuchst, derer Zeichen welche bei der gewünschten Codepage umgesetzt sind.

[add]
Bei Google suchenDOS OEM Zeichensatz

BasilBavaria 30. Sep 2012 10:48

AW: ASCII-Sonderzeichen in TRichEdit
 
Danke für die schnelle Antwort.

Funktioniert aber leider nicht (oder ich bin zu blöd).
Im Quelltext - nur Beispiel - werden die Zeichen korrekt angezeigt:

Delphi-Quellcode:
RichEdit1.Lines.Add('═╬═');
RichEdit1.Lines.Add('│ ───┌ ┐ └ ┘├ ┤ ┬ ┴ ┼');
Ausprobiert habe ich die Schriften
  • Courier New
  • Terminal
  • Lucida Sans Unicode
und den Font-Einstellungen zum CharSet
  • default
  • ANSI
  • OEM
  • Symbol
Es werden aber die Linien-Zeichen nie korrekt angezeigt!

himitsu 30. Sep 2012 11:20

AW: ASCII-Sonderzeichen in TRichEdit
 
Wenn du die Zeichen im Quellcode siehst, hast du also die Unicodezeichen verwendet, aber dein Delphi deine VCL kann doch kein Unicode.

- also wie nachfolgend genannt, dein Delphi unicodefähig machen

- oder im Quellcode die Zeichen mit den "entsprechenden" Zeichencode verwenden (die sehn dort dann zwar anders aus) und im Edit die entsprechende Codepage einstellen, damit sie dort richtig dargestellt werden

Bummi 30. Sep 2012 11:23

AW: ASCII-Sonderzeichen in TRichEdit
 
mit Turbodelphi z.B. mit TNT-Unicode-Controls und
Delphi-Quellcode:
Richedit1.Font.Name := 'Arial Unicode MS';

BasilBavaria 30. Sep 2012 12:19

AW: ASCII-Sonderzeichen in TRichEdit
 
Ich verstehe nicht, warum ich die Zeichen im RichEdit zur Laufzeit einfügen kann, speichern und drucken kann - dies aber über den Programmcode nicht möglich ist. Wie gesagt - steh aufm Schlauch.
Wenn ich die Ausgabe speicher, habe ich folgendes Ergebnis.
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl {\f0\fnil Lucida Sans Unicode;}{\f1\fnil\fcharset0 Lucida Sans Unicode;}}
\viewkind4\uc1\pard\f0\fs22 +-+
\par
\par \f1 Kopiert aus Codetabelle
\par \fs23\u9556?\u9552?\u9559?
\par \f0\fs22
\par }
Der blau markierte Bereich wären die Zeichen aus dem Font "Lucida Sans Unicode".

Und - wenn ich das RTF-Dokument wieder lade, werden die Sonderzeichen auch korrekt dargestellt.
Zum Laden/Speichern verwende ich keine Sonderfunktionen, Typumwandlungen oder dergleichen; nur die vorgegebenen Routinen.

Bummi 30. Sep 2012 15:08

AW: ASCII-Sonderzeichen in TRichEdit
 
Das eingebettete Windowscontrol ist ja Unicodefähig, nur das Turbodelphi darunter nicht ...

himitsu 30. Sep 2012 15:49

AW: ASCII-Sonderzeichen in TRichEdit
 
Die TRichEdit-Komponente nutzt, bei dir, nunmal nur die ANSI-WinAPI's.

Du kannst versuchen dir aber selber die entsprechende Unicode-API zu implementieren und das RichEdit darüber ansprechen, zusammen mit einem WideString und PWideChar.
Das geht aber nicht mit allen WinControls ... also man kann Vieles zwar per Unicode ansprechen, aber Vieles ist und bleibt ANSI, wenn das Control als ANSI erstellt wurde.

Oder man nimmt fertige Implementationen ala den TNT-Unicode-Controls oder ein aktuelleres Delphi.

BasilBavaria 3. Okt 2012 11:09

AW: ASCII-Sonderzeichen in TRichEdit
 
Erstmal Danke für die Rückmeldungen. :-D
Eine andere Delphi-Version kommt nicht in Frage; ebenso wie die TNT-Unicode-Controls, die es nicht kostenlos gibt.

:arrow: Ich gehe jetzt einen anderen Weg: Ich erstelle mir im Speicher ein Workfile und schreibe darein direkt eine RTF-Datei wie im obigen Beitrag angegeben.
Das RichEdit dient nur als Druckvorschau für feste Texte und braucht nicht zwingend editierbar zu sein. Aber selbst das funktioniert noch bis auf den Tabellenbereich. Zudem habe ich dabei vollen Zugriff auf Formatierungen ohne dabei noch zusätzliche Funktionen zwingend implementieren zu müssen.
Den RTF-Overhead - je nach Textverarbeitung - kann man nach meiner bisherigen Erkenntnis jedenfalls immens reduzieren (meine Testtabelle war zwischen 7kb und 24kb gross - je nach Editor).

Wenn ich meine Lösung endgültig fertig hab und jemand das gleiche Problem hat, dann helf ich gern weiter.

Viele Grüße aus Niederbayern :cheers:

Bummi 3. Okt 2012 11:11

AW: ASCII-Sonderzeichen in TRichEdit
 
AFAIK gibt es noch eine freie Version der TNT's

http://www.yunqa.de/delphi/doku.php/...controls/index


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz