Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TRichEdit Sonderzeichen ein-/ausblenden (https://www.delphipraxis.net/151436-trichedit-sonderzeichen-ein-ausblenden.html)

rokli 18. Mai 2010 07:35


TRichEdit Sonderzeichen ein-/ausblenden
 
Moin Zusammen.

Ich möchte gerne in einem TRichEdit die "nicht druckbaren Sonderzeichen" (so heisst es wohl in Word) ein- bzw. ausblenden. Also alle Leezeichen im Text sollen als "Punkt" dargestellt werden, TABs als ">" und CR als "CHAR(182)". Das kann im Prinzip so ziemlich jedes Tool (TextPad, NotePad++ usw.).

Der Text wird in diesem Falle nicht manuell erfasst, sondern es geht um das Anzeigen einer ASCII Schnittstellendatei, die bereits vorliegt und einfach nur in die TRichEdit eingelesen wird.

Als möglichen Lösungsansatz sehe ich: Den Text von oben nach unten durchlesen und die Spezialzeichen durch "anzeigbare" Zeichen zu ersetzen. Und beim ausblenden dan umgekehrt.

Beispiel: Dieses ist ein Satz.
Dieses░ist░ein░Satz.

Ist mein Lösungsweg der richtige oder gibt es einen eleganteren Weg, diese Zeichen im TRichEdit sichtbar zu machen?

Vielen Dank für Eure Hilfe - und einen schönen Tag noch!

Gruß
Rolf

himitsu 18. Mai 2010 08:41

Re: TRichEdit Sonderzeichen ein-/ausblenden
 
Soll der Text editiert werden können?

Wenn nicht, dann kannst du (da du ja ein unicodefähiges Delphi nutzt) diese Zeichen auch "übersetzen".
Bei ASCII sind das ja nur etwa 34 Zeichen.

Im Unicodezeichenraum gibt es auch andere sichtbare Zeichen, welche die Symbole der gewünschten Steuerzeichen darstellen.

rokli 18. Mai 2010 09:23

Re: TRichEdit Sonderzeichen ein-/ausblenden
 
Hi himitsu,

nein, der Text wird nicht editiert, ich möchte ja eingetlich nur, dass die Zeichen angezeigt werden.

Hintergrund: Ich lese eine ASCII Datei ein, die eine Schnittstelle darstellt. Also muss beim Aufbau der Datei gewährleistet werden, dass die Definition eingehalten wird: Feld1 ist 5 Zeichen lang, Feld2 ist 19 Zeichen lang, Feld3 ist 1 Zeichen lang .. usw. Da die gesammte Definition aus 285 Feldern besteht (der Satz ist 1687 Zeichen lang), soll dieses Programm den Inhalt einfach nur zeilenweise anzeigen. Da per Vereinbarung Leerstellen als ' ' (Space) in die Datei geschreiben werden, kann man diese nur schlecht sehen ... und darum gehts im Prinzip.

Ich hoffe, dass das zur Erklärung beiträgt.

himitsu 18. Mai 2010 10:06

Re: TRichEdit Sonderzeichen ein-/ausblenden
 
Schade: In meinem XP gibt es nur die Schriftart "Lucida Sans Unicode", welche diese Zeichen schon kennt,
aber in XP dürften viele Schriftarten auch nur UCS 4.x oder gar 3.x kennen,
wärend diese Zeichen erst in UCS 5.2 (Unicode Standard) eingeführt wurden.

[edit] in Windows 7 sind auch nur "Lucida Sans Unicode" und "Segoe UI Symbol" auf den Stand von UCS 5.2 und enthalten auch noch den entsprechenden Zeichenbereich.

Laut der Tabelle http://www.unicode.org/charts/PDF/U2400.pdf wäre es also:
Delphi-Quellcode:
Function TextToView(Const S: AnsiString): String;
  Var i: Integer;

  Begin
    Result := S;
    For i := Length(Result) downto 1 do
      Case Result[i] of
        #0..#31: Result[i] := Char(Ord(Result[i]) or $2400);
        ' ':    Result[i] := #$00B7; {oder #$2420}
        127:    Result[i] := #$2421;
      End;
  End;
Funktionieren tut es so schonmal
Delphi-Quellcode:
Function TextToView(Const S: AnsiString): String;
  Var i: Integer;

  Begin
    Result := S;
    For i := Length(Result) downto 1 do
      Case Word(Result[i]) of
        0..31:   Result[i] := Char(Word(Result[i]) or $2400);
        Ord(' '): Result[i] := Char($00B7); {oder #$2420}
        127:     Result[i] := Char($2421);
      End;
  End;

Function ViewToText(S: String): AnsiString;
  Var i: Integer;

  Begin
    For i := Length(S) downto 1 do
      Case Word(Result[i]) of
        $2400..$241F: S[i] := Char(Word(S[i]) and $00FF);
        $00B7:       S[i] := ' ';
        $2421:       S[i] := Char(127);
      End;
    Result := S;
  End;
Also entweder schauen, daß du eine passende Schriftart findest, welche diese Zeichen darstellen kann
oder du suchst dir ein paar andere Zeichen aus (Vorteil, du mußt dich um die Darstellung nicht kümmern)
oder du fügst Bilder in den Text ein, bzw. zeichnest den Text selber und malst dann was Passendes für die entsprechenden Zeichen hin.


[add]
Zitat:

Leezeichen im Text sollen als "Punkt" dargestellt werden, TABs als ">" und CR als "CHAR(182)"
als Minimal-Version würde dieses deiner Definition entsprechen:
Delphi-Quellcode:
Function TextToView(Const S: AnsiString): String;
  Var i: Integer;

  Begin
    Result := S;
    For i := Length(Result) downto 1 do
      Case Result[i] of
        #09: Result[i] := '>'; // oder besser #$00BB (») ?
        #10: Result[i] := #$00B6;
        ' ': Result[i] := #$00B7;
      End;
  End;
Diese Zeichen dürften sogar auch direkt möglich sein:
Delphi-Quellcode:
*       #09: Result[i] := '»';
        #10: Result[i] := '¶';
        ' ': Result[i] := '·';

rokli 18. Mai 2010 16:01

Re: TRichEdit Sonderzeichen ein-/ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 2)
In der Anlage mal ein Bild mit und ein Bild ohne Sonderzeichen - schon klasse! Dann wird schon deutlich, dass mit eingeblendeten Sonderzeichen die Prüfung auf Stellengenauigkeit einfacher ist!

Vielen Dank noch mal
Rolf

MPirnstill 20. Jul 2012 10:33

AW: TRichEdit Sonderzeichen ein-/ausblenden
 
Hallo,

ich habe ein ähnliches Problem wie bereits in diesem Thread beschrieben.
Auch ich möchte Sonderzeichen (Leerzeichen, Zeilenschaltung sowie Absatzmarke) in einer TRichEdit-Komponente wie in Word sichtbar machen.

Derzeit ersetze ich auch die Leerzeichen manuell mit deinem ASCII 183 (Punkt auf mittlerer Zeilenhöhe). Das Problem was dabei auftritt ist, daß es mir den Zeilenumbruch durcheinander bringt, da anscheinend dieser Punkt mehr Platz als das eigentliche Leerzeichen einnimmt.

Mir gehen diesbezüglich langsam die Ideen aus. Hat hier evtl. noch jemand einen Lösungsansatz?

Zum Programm:
Dieses dient zum Ablegen von Tastschreibprüfungen, wo Prüflinge eine Vorlage zeilengleich oder auch im Fließtext abtippen müssen. Dieser Text soll natürlich am Bildschirm genauso aussehen wie auf der Vorlage bzw. einem anschl. Ausdruck. Die Zeilenbreite synchronisiere ich darüber, daß ich das TRichEdit-Feld auf 21 cm breite einstelle. Nicht schön, aber funktioniert. Bis auf den Umstand, wenn ich die Leerzeichen anzeigen will. Zeilen- und Absatzschaltung würde ich auch gern anzeigen, hab ich aber noch nicht drin, da mir die Leerzeichen noch Probleme bereiten.

Ich würde mir über Ideen hier freuen. Vielen Dank im Voraus.

Achso, ich nutze derzeit Delphi 7.

p80286 20. Jul 2012 11:17

AW: TRichEdit Sonderzeichen ein-/ausblenden
 
Zum einen kannst Du über die Fontauswahl eine Steuerung vornehmen, zum anderen schaust Du einmal in die TTF-Doku (hier) da kannst du für jedes Zeichen erfahren mit welchen Maßen es zur Anzeige/Papier gebracht wird.

Gruß
K-H

nahpets 20. Jul 2012 11:23

AW: TRichEdit Sonderzeichen ein-/ausblenden
 
Hallo,

muss es unbedingt TRichEdit sein?

Wenn nein, dann schau Dir bitte mal http://sourceforge.net/projects/synedit/ an, das ist eine Editorkomponente mit Syntaxhervorhebung und die Anzeige von Leerzeichen... kann man mit dem Setzen eines einzigen Attributes veranlassen.

MPirnstill 23. Jul 2012 15:37

AW: TRichEdit Sonderzeichen ein-/ausblenden
 
Hallo,
ich wollte mich erstmal für eure Antworten bedanken.

Und nein, es muss nicht TRichEdit sein.

Vorgabe für das Programm ist, MS-Word unabhängig. Man soll in dem Textfeld einen Text eingeben in einer bestimmten Zeit eingeben. Anschläge und Rechschreibung sind relevant auch, wenn keine Autokorrektur gewünscht ist, denn dies Programm soll einfach für Tastschreibübungen/Prüfungen (Blind schreiben) genutzt werden.
Manipulation mit STRG-C /-V usw. fange ich schon ab.

Ich versuche derzeit die SynEdit-kompnente einzubauen. Hoffe es funktioniert.

Gruß
Micha

MPirnstill 24. Jul 2012 14:09

AW: TRichEdit Sonderzeichen ein-/ausblenden
 
So, hab die Synedit-Komponente jetzt eingebaut.
Gleich auch mit SysEditPrint.

Sieht soweit alle sehr gut aus. Gefällt mir auch gut die Komponente.

Aber noch ne Frage:
Kann man die Steuerzeichen auch mit ausdrucken?
Also ich kann die in der Anzeige super an und ausschalten.
Zeigt sogar das Absatzzeichen an. Leider unterscheidet es nicht nicht von der einfachen Zeilenschaltung (SHIFT + ENTER). Aber das ist erstmal okay, hoffe ich.

Allerdings druckt er die Steuerzeichen nicht mit aus, obwohl ich die an hatte.
Geht das auch?

Achso, noch was, wie ist denn die 80 bei RightEdge zu interpretieren.
Was für ein Wert ist das? Pixel sind's nicht und Zentimeter auch nicht.

Nochmals herzlichen Dank.
Hätte ich die Komponente nur schon früher gekannt, hätte vieles erleichtert.
Bislang war mir SynEdit nur als kompletter Editor nicht als Komponente bekannt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.

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