Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Suche im Richedit (https://www.delphipraxis.net/536-suche-im-richedit.html)

theomega 6. Aug 2002 14:23


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

d3g 6. Aug 2002 15:03

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

theomega 6. Aug 2002 15:05

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.

d3g 6. Aug 2002 17:14

Hi theomega,

das dürfte aber nach dem selben Prinzip funktionieren. Ich habe eine Funktionion geschrieben (TSearchTypes entspricht den TSearchTypes des RichEdit).

Code:
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;
MfG,
d3g

theomega 6. Aug 2002 22:14

funzt nicht: habe als text das gennommen:
Code:
===========================================================
Hinweise zur Installation von Delphi 5
===========================================================
und als pattern "H*e".
Jetzt müßte er doch Hinweise (oder zumindest (Hinwe)) finden, wenn ich stWholeWord als Option eigebe, aber er markiert gar nichts.

d3g 7. Aug 2002 09:50

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:
===========================================================
H inweis e zur Installation von Delphi 5 
===========================================================
verwendest.

MfG,
d3g

theomega 7. Aug 2002 10:04

könnte mir mal jemand einen Komponenten enpfehlen, mit dem das funzt?

theomega 7. Aug 2002 22:04

keiner eine Idee? Vorschlag?

MrSpock 8. Aug 2002 08:59

Hallo theomega,

ich hab da auch mal eine Wildcard-Suche-Funktion geschrieben. Muss heute Abend mal nachschauen, ob ich die noch finde.

theomega 8. Aug 2002 10:12

wäre nett.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 Uhr.
Seite 1 von 2  1 2      

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