Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Textsuche in mehreren TRxRichEdit's mit nur einem FindDialog


galagher - Di 28.12.10 19:09
Titel: Textsuche in mehreren TRxRichEdit's mit nur einem FindDialog
Hallo!

Ich benutze in mehreren zur Laufzeit erzeugten Forms je eine Komponente TRxRichEdit, die ihren eigenen Find-Dialog mitbringt. Klappt auch in jenem Form, in dem ich den Dialog aufrufe:

Delphi-Quelltext
1:
2:
 RxRichEdit1.FindDialog(RxRichEdit1.SelText).Position :=
  Point(Mouse.CursorPos.X-10, Mouse.CursorPos.Y-10);  //Zeigt das Dialogfenster an
Ich möchte aber, dass alle RxRichEdit's in allen Forms nach dem Suchtext durchsucht werden.

Die Forms erzeuge ich ganz einfach: Note := TForm2.Create(Application);

Ich denke, ich muss mit FindComponent arbeiten, aber wie wende ich den Dialog - oder vielmehr den Suchtext - auf die RxRichEdit's der anderen Forms an? Oder geht das einfacher?

TRxRichEdit hat eine Funktion FindText, die folgende Parameter erwartet:
const SearchStr: string; StartPos, Length: Integer; Options: TRichSearchTypes und ein Integer zurückgibt.

Ich weiss aber nicht, wie ich das alles zusammenfügen kann.


platzwart - Di 28.12.10 19:57

Ein Array erstellen mit den TRichEdits drin und das Array durchgehen.


galagher - Di 28.12.10 20:41

user profile iconplatzwart hat folgendes geschrieben Zum zitierten Posting springen:
Ein Array erstellen mit den TRichEdits drin und das Array durchgehen.
Wie muss das Array aussehen? Ich weiss nicht mal, wie ich die Suche korrekt starten soll.

Bis jetzt habe ich das:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
 RxRichEdit1.FindDialog(RxRichEdit1.SelText).Position :=
  Point(Mouse.CursorPos.X-10, Mouse.CursorPos.Y-10);

 if not RxRichEdit1.FindDialog(RxRichEdit1.SelText).Execute then exit;  //Wirkt sich nicht aus
 s := RxRichEdit1.FindDialog(RxRichEdit1.SelText).FindText;  //Das klappt

 //Das führt zu einer Zugriffsverletzung:
 for i := 0 to iNotesCount do  //Beginne bei der 1. Form und gehe alle durch
 begin
  if Pos(s, TForm2(Application.FindComponent('Notiz'+IntToStr(i))).RxRichEdit1.Text) > 0 then
  begin
  //...

Der Code geht einfach nach if not RxRichEdit1.FindDialog(RxRichEdit1.SelText).Execute then exit; weiter!