| Autor |
Beitrag |
martin300
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Mi 07.01.09 23:30
Hallo,
ich möchte einen Text in einer Textkomponente bearbeiten.
Beispieltext 1) ' A Hier steht ein Text A'
im Beispieltext 2) soll das zweite Vorkommen von A durch zb. B ersetzt werden
Ergebnis : ' A Hier steht ein Text B'
Das Ergebnis soll bearbeitet werden können dh. zb Teile daraus gelöscht oder auch geändert werden. So wird aus dem Ergebnis zb. zu: ' A steht ein Text B und noch ein B'
Dieser Text soll nach dem gleichen Muster wieder nach ' A steht ein Text A und noch ein B' ersetzt werden.
Ich suche daher nach einer Möglichkeit Buchstaben zu kennzeichnen, zb. durch ein unsichtbares Zeichen, oder eine andere Komponente die es ermöglicht einzelne Wörter / Buchstaben in zwei Richtungen zu ersetzen.
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Do 08.01.09 00:08
Schau mal hier sollte eigentlich alles dabei sein was du brauchst.
delphi.about.com/od/.../blrtlstringhand.htm
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 08.01.09 00:20
Die Stringoperationen an sich sind ja nicht das Problem (denke ich mal).
Das könnte mit einem RichEdit funktionieren. Die entsprechenden Textteile könnten z.B. fett oder kursiv gesetzt werden und dann müssten die Attribute danach wieder gesucht werden.
Wie gut das funktioniert weiß ich nicht. Vor allem gibt es dann auch noch zusätzliche Überlegungen: was soll passieren, wenn der gesuchte Text geändert oder gelöscht wird, etc.?
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 08.01.09 07:56
Ein TRichtedit wäre eine dirkete und einfache Möglichkeit, aber alles andere als elegant. Man sollte nach Möglichkeit Funktion und Darstellung trennen.
Wieso kann man nicht die zu ändernden Strings als Array of [Position, Länge] speichern und dann zur Darstellung ggf in ein TRichedit packen?
Mit dem Array lässt sich eine Klasse bauen, die die gewünschte Funktionalität bereitstellt.
_________________ Na denn, dann. Bis dann, denn.
|
|
cartridge
      
Beiträge: 209
Win XP
D4 Prof,D6 Prof
|
Verfasst: Do 08.01.09 08:03
Vielleicht habe ich die Frage ja nicht richtig verstanden, aber wenn ich Textteile unsichtbar kennzeichnen will, setze ich nichtdruckbare Zeichen, wie z.B. Zeichen 1 (#1), dann irgendeinen Kenner, wenn nötig und dann z.B. Zeichen 2 (#2). Das ganze filtere ich in Schleife mit Pos wieder raus und kann es dann in der Schleife auch gleich bearbeiten.
Gruß,
_________________ ====================
Na klar bin ich sicher!!! Oder..?
|
|
martin300 
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Do 08.01.09 12:25
@jaenicke
Formatierung mit dem RichEdit habe ich mir auch überlegt. Hierbei ist jedoch
die Erkennung über Textattribute, die dann auch 'anders' aussehen. Wenn
der sich änderte Text vom Benutzer geändert wird, dann ist er nicht mehr gültig. Dh.
es müsste eventuell eine Möglichkeit geben diese Änderung zu sperren. Bei TRichedit od. TMemo gibt es das Property ReadOnly das hierbei in Abhängigkeit der Cursorpos gesetzt werden könnte.
@alzaimar
Ich möchte die STrings in der Komponente auch bearbeiten können.
@cartridge
So etwas hätte ich mir vorgestellt. Nur beim Einfügen mit #1 od. #$1 in ein TRichEdit od. TMemo wird das Sonderzeichen als nicht gefülltes Quadrat dargestellt. Lässt sich das durch Einstellungen ändern, oder benötigt man eine andere Komponente?
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 08.01.09 16:41
Hallo,
martin300 hat folgendes geschrieben : | .... Dh.
es müsste eventuell eine Möglichkeit geben diese Änderung zu sperren. Bei TRichedit od. TMemo gibt es das Property ReadOnly das hierbei in Abhängigkeit der Cursorpos gesetzt werden könnte. |
schau Dir mal RichEdit.SelAttributes.Protectedan, damit kannst Du Textbereiche im RichEdit schützen.
Textbereiche im RichEdit kannst du so verbergen:
Delphi-Quelltext 1:
| RichEdit.SelText := '{\rtf1 \v '+RichEdit.SelText+'\v0}'; |
Beides kannst Du auch in Kombination anwenden, also Bereiche verbergen und schützen.
Ps. Eventuell ist auch noch das Ereignis OnProtectChange hilfreich.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|