![]() |
Suche im Richedit
Hallo
ich habe eine kleine Suche in einem Ritchedit realisiert mit FindText. Funzt auch problemlos, nur hätte ich gerne, das man z.b. auch nach "[*]" suchen kann, so das ich dann einen Textteil markieren kann, der zwischen zwei Klammern steht. Also so eine Art Platzhalter. Geht das irgendwie? Danke tHeOmEgA |
Hi theomega,
wenn du auch Fremdkomponenten einsetzen willst, dann kannst du bei Toory oder der DSP (diehe Links) eine Kompo suchen, die dir das Suchen mit "regular expressions" erlaubt. Sowas wird sicher zu finden sein. Ansonsten kannst du das auch händisch machen (wenn auch nicht mit einem solchen Umfang, wie es dir regular expressions erlauben), indem du zuerst den nach dem Teil bis zum Sternchen suchst, dann diese Position als anfang des Textes interpretierst und dann das erste vorkomme des Teils hinter sem Sternchen suchst und, falls noch weitere Sterchen vorhanden sind, nach diesem Prinzip weitermachst. MfG, d3g |
es ist ja auch so, das das ganze keine Suchfunktion für den User werden soll, sondern nur intern für mein Programm, das bestimmte Einträge fett machen soll.
|
Hi theomega,
das dürfte aber nach dem selben Prinzip funktionieren. Ich habe eine Funktionion geschrieben (TSearchTypes entspricht den TSearchTypes des RichEdit).
Code:
MfG,
procedure BoldText(RichEdit: TRichEdit; Pattern: String; st: TSearchTypes);
type TStrArray = array of String; function ParseString(s: String; c: Char; Delimiters: Integer): TStrArray; var i, Count: Integer; begin // get count of delimiters and format array SetLength(Result, Delimiters + 1); // put string parts into array Count := 0; for i := 1 to Length(s) do if (s[i] = c) then begin Result[Count] := Copy(s, 1, i - 1); Delete(s, 1, i); Inc(Count); end; Result[Count] := s; end; var StrArray: TStrArray; i, StartPos, EndPos, Delimiters: Integer; begin Delimiters := 0; for i := 1 to Length(Pattern) do if (Pattern[i] = '*') then Inc(Delimiters); if (Delimiters < 1) then Exit; SetLength(StrArray, Delimiters + 1); StrArray := ParseString(Pattern , '*', Delimiters); EndPos := 0; while (True) do begin // find first part StartPos := RichEdit.FindText(StrArray[0], EndPos, Length(RichEdit.Text), st); if (StartPos = -1) then Exit; EndPos := StartPos; // found other parts for i := 1 to Delimiters do begin EndPos := RichEdit.FindText(StrArray[i], EndPos, Length(RichEdit.Text), st); if (EndPos = 1) then Exit; end; // set bold with RichEdit do begin SelStart := StartPos; SelLength := EndPos + Length(StrArray[Delimiters]) - StartPos; SelAttributes.Style := SelAttributes.Style + [fsBold]; SelLength := 0; end; end; end; d3g |
funzt nicht: habe als text das gennommen:
Code:
und als pattern "H*e".
===========================================================
Hinweise zur Installation von Delphi 5 =========================================================== Jetzt müßte er doch Hinweise (oder zumindest (Hinwe)) finden, wenn ich stWholeWord als Option eigebe, aber er markiert gar nichts. |
Hi theomega,
stWholeWord ist leider mit dieser Suchfunktion nicht möglich, da er zuerst ein ganzes Wort "H" und dann ein ganzes Wort "e" sucht und diese Wörter inklusive dem, was dazwischen ist markiert. Du wirst sehen, es funktioniert, wenn du
Code:
verwendest.
===========================================================
H inweis e zur Installation von Delphi 5 =========================================================== MfG, d3g |
könnte mir mal jemand einen Komponenten enpfehlen, mit dem das funzt?
|
keiner eine Idee? Vorschlag?
|
Hallo theomega,
ich hab da auch mal eine Wildcard-Suche-Funktion geschrieben. Muss heute Abend mal nachschauen, ob ich die noch finde. |
wäre nett.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 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