![]() |
Code tags umwandeln?
Hallo leute,
kleine frage und zwar habe ich ein richedit, wenn dort jetzt ein spezieller tag vorkommt, soll der Text unterschiedlich formatiert werden. Formatierungen sind genaugenommen BBCodes. Das heisst wenn ich z.B.
Code:
eingebe, dann erkennt der das und macht hallo fett.
[B]hallo[/B]
Ich habe mir mal überlegt wie ich das machen soll. Nur da gibt es noch einige probleme. Ich habe mal folgenden code:
Delphi-Quellcode:
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean;
var StartPos, Position, Endpos: Integer; begin StartPos := 0; with RichEdit do begin Endpos := Length(RichEdit.Text); Lines.BeginUpdate; while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do begin Endpos := Length(RichEdit.Text) - startpos; Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]); Inc(StartPos, Length(SearchText)); SetFocus; SelStart := Position; SelLength := Length(SearchText); end; Lines.EndUpdate; end; end;
Delphi-Quellcode:
nur jetzt stosse ich schon auf das erste problem.
procedure TForm1.Button1Click(Sender: TObject);
begin SearchForText_AndSelect(RichEdit1, 'Some Text'); end; Wie kann ich dem sagen dass er nach * suchen soll?
Delphi-Quellcode:
geht natürlich nicht, da er * als variable und nicht als "irgend ein beliebiger Text" ansieht.
SearchForText_AndSelect(RichEdit1, '[b]'+*+'[/b]');
wie mache ich das am besten? Und was mache ich wenn ich den text gefunden habe, soll ich den in eine variable speichern dann formatieren und wieder einfügen ohne die tags? Bitte um hilfe mfg headi |
Re: Code tags umwandeln?
Nabend,
soll er dabei die Tags gleich entfernen oder soll er einfach nur das zwischen den Tags fett machen? Mit Pos kriegst du ja raus wo er anfängt und ebenfalls auch wo er aufhört (dort halt +3). Danach setzt du die selection (glaub jedenfalls das beim RichEdit die Position gleichbedeutend ist mit der Menge der Zeichen) und machst sie mit SelAttributes fett. Wenn du die Tags weg haben willst, musst du ja die nur entfernen und die Positionen umsetzen. Ist nur kurz hingekritzelt und ungetestet:
Delphi-Quellcode:
greetz
while Pos(RichEdit.Text,'[a]')>0 do
begin StartPos:=Pos(RichEdit.Text,'[a]'); EndPos:=Pos(RichEdit.Text,'[/a]'); if (StartPos>0) and (EndPos>0) then begin RichEdit.SelStart:=StartPos+3; RichEdit.SelLength:=(EndPos-StartPos)-3; //Hier Code zum entfernen der 2 Tags einfügen end; end; Steffen |
Re: Code tags umwandeln?
Wenn du irgendwann die Lust an RichEdit verloren hast, dann schau dir doch mal
![]() MfG Thorsten |
Re: Code tags umwandeln?
Zitat:
was muss ich denn hinzufügen um die tags zu löschen? Also ich komm da irgendwie nicht so mit den formaten zu recht, was bekomme ich bei RichEdit.SelLength:=(EndPos-StartPos)-3; Ich denke mal das ist die länge des Textes der Formatiert werden muss, Nur wie kann ich den jetzt auch formatieren, oder erst markieren?? @Omata: SynEdit habe ich mir schon angeschaut, aber versteh das nicht so ganz wie ich da ne eigene liste machen kann... Hab mir auch schon den SynGen oder wie der heisst angeschauen aber krieg das irgendwie nicht hin. |
Re: Code tags umwandeln?
Hallo,
der Code färbt alles in der Art '[ B]irgendwas[ /B]' rot und entfernt die Tags. Der Code ist nicht optimiert, aber man kann die Vorgehensweise gut erkennen.
Delphi-Quellcode:
with RichEdit1 do
while FindText('[B]', 0, Length(RichEdit1.Text), [stMatchCase])<>-1 do begin //SelStart auf Anfang '[B]..' setzen SelStart := FindText('[B]', 0, Length(RichEdit1.Text), [stMatchCase]); //SelLength auf Ende(also +4) '...[/B]' setzen, //durch Abzug von Selstart ist genau der String incl. Tags selectiert. SelLength := FindText('[/B]', 0, Length(RichEdit1.Text), [stMatchCase])+4-Selstart; //selectierten Bereich einfärben SelAttributes.Color := clred; //selectierten Bereich durch String ohne Tags ersetzen SelText := Copy(RichEdit1.Text,SelStart+4,SelLength-7); end; |
Re: Code tags umwandeln?
Hallo Headi,
vielleicht bringt dich dieses kurze Code-Beispiel auf fruchtbare Gedanken: ![]() Grüße vom marabu |
Re: Code tags umwandeln?
Zitat:
also b klein dann funktioniert das ganze natürlich nicht. Warum funktioniert dies eigentlich nicht? :
Delphi-Quellcode:
Rein theoretisch müsste das doch gehen ? also kann ich nicht einfach
while FindText('[B]'or'[b]', 0, Length(RichEdit1.Text), [stMatchCase])<>-1 do
[edit] achso ich habe jetzt gerade gesehen dass man bei findtext das ja einstellen kann... muss ich nur noch rausfinden wie. [/edit] if a or b = ich möchte ja nicht immer if a = if b = vielen dank greez headi |
Re: Code tags umwandeln?
Liste der Anhänge anzeigen (Anzahl: 1)
So hier ist ein Beispiel für SynEdit.
Vielleicht gefällt es dir ja. MfG Thorsten |
Re: Code tags umwandeln?
Hallo,
nimm stMatchCase raus, dann wird nicht mehr nach Groß- Kleinschreibung unterschieden:
Delphi-Quellcode:
Du musst aber noch abfangen ob die Tags auch wieder geschlossen wurden!
FindText('[B]', 0, Length(RichEdit1.Text), []);
|
Re: Code tags umwandeln?
Zitat:
@Omata: ja ich seh jetzt dass es so ansatzweise funktioniert, nur sind da ja noch viele probleme, ich kann immer nur etwas benutzen also fetter kommentar geht bei deinem beispiel nicht, bei [b ] fett [/b ] werden nur die beiden tags fett und nicht der text, abgesehen davon müssen die tags ja auch noch gelöscht werden. Könntest du mir vielleicht noch ein bisschen genäuer erklären wie man so eine formatierung definieren kann? vielen dank euch beiden greez headi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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