Szukanie tekstu w RichEdit
arturfir
Zaczniemy od położenia na formę komponentu FindDialog z zakładki Dialog. W Inspektorze Obiektów wchodzimy do zakładki Events i klikamy dwa razy na właściwość OnFind.
W tym momencie zostanie stworzona definicja i deklaracja obsługi tego zdarzenia.
W kodzie procedury tej obsługi wprowadzamy poniższy kod:
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
begin
with RichEdit1 do
begin
{ jeśli jest zaznaczenie, to zaczyna szukać od momentu zaznaczonego tekstu w przeciwnym wypadku od początku tekstu}
if SelLength <> 0 then
StartPos := SelStart + SelLength
else
StartPos := 0;
{ ustala koniec przeszukiwanego tekstu }
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(FindDialog1.FindText);
end;
end;
teraz tylko pozostaje nam przyporządkować wywołanie okienka szukania.
Do dowolnego Button'a tworzymy procedurę onClick, w której umieszczamy:
FindDialog1.Execute;
No i oczywiście nie zapomnij wstawić komponentu RichEdit......
Milej zabawy :-)
{ jeśli jest zaznaczenie, to zaczyna szukać od momentu zaznaczonego tekstu w przeciwnym wypadku od początku tekstu}
Czego szukać?
Siema. Jest pewien sposób na to by skorzystać z opcji tj. kierunek szukania, uwzględnianie całych wyrazów, uwzględnianie wiekości liter. Nie jest to żaden algorytm ale mnie w programie się przydało. Sam spędziłem godziny na pisaniu algorytmu a ten sposób jest naprawdę prosty. Skorzystamy ze standardowych akcji jakie znajdziemy w ActionMenagerze. No to do dzieła.
Tworzymy nowy projekt. Najpierw wrzućmy na formę komponent na którym będziemy szukać naszego tekstu, ja wrzucam RichEdita z kategorii Win32. Na formę wrzucamy komponent ActionManager z kategorii Additional. Klikamy na niego dwa razy i pojawia się okno Editing ActionMenager-a. W prawym górnym rogu na zakładce Actions mamy przycisk ''New Action(Ins)". Klikamy i wybieramy "New Standard Action". W tym oknie są standardowe akcje które możemy sobie wybrać. Nas interesuje poszukiwanie tekstu tak więc w kategorii "Search" zaznaczamy TSearchFind i klikamy "OK". Mamy teraz dodane do "Categories" nową kategorie Search, klikając na nią pojawia się nam w Actions po prawej, nasza procedura "Find...". Zamykamy Editing ActionManager-a klikając na Close. Teraz od nas zależy gdzie umieścimy naszą akcję. My dodamy do naszej formy ActionMainMenuBar-a z kategorii Additional. Klikamy ponownie dwukrotnie na ActionMenagera. Teraz metodą przeciągnij i upuść, przeciągamy z ActionMamager-a naszą akcję "Find.." i puszczamy na ActionMainMenuBar. I po wszystkiemu. A jeszcze coś, jak szukamy tekstu to znaleziony tekst jest zaznaczany. Nie będzie widoczne nasze zaznaczenie ponieważ klikając na Find... wychodzimy z komponentu RichEdit. Aby zaznaczenie było widoczne należy dla komponentu RichEdit w Object Inspektorze ustawić "HideSelection" na False. Mam nadzieje, że skorzysta ktoś z tego. Narka
Taq metoda też nie działa na wyszukiwanie w zadeklarowanych polach Tekstowych (np: DB.Edit1.Text), nie wspomnę o filtrowaniu, z którym jest kłopot przy w.w. ustawieniu ;
Ta metoda nie działa dla SynEdit-a :(
A jak wyszukać np. kropę, a tekst skopiować do edit1 jak łańcuch będzie wyglądał tak: 1123.32.22.12.33.44.55566.8787.
Lipa,u mnie FindText undeclared identifier :(
Ale lipa.. dałbyś chociaż obługę opcji TFindDialog`a (kierunek szukania, uwzględniaj całe wyrazy, uwzględniaj wiekość liter itd...)
Jak dla mnie to do faq
No, nareszcie jakiś art na ten temat. Niech tylko ktoś teraz na forum się o to zapyta! :) Dzięki za wszystkich.