Autor Beitrag
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 209

Win XP
D4 Prof,D6 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 08.01.09 16:41 
Hallo,

user profile iconmartin300 hat folgendes geschrieben Zum zitierten Posting springen:
.... 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:
ausblenden 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 )