Короче пишу я текст. редактор, используя TRichEdit. Кинул на форму Файнд диалог и пытаюсь найти нужное слово вот таким способом:
procedure TForm1.N12Click(Sender: TObject);
begin
FindDialog1.Execute;
end;
////////////////////////////////
procedure TForm1.FindDialog1Find(Sender: TObject);
var
T: TSearchTypes;
Int: Integer;
begin
Int := 1;
Editor.FindText(FindDialog1.FindText, FindDialog1.Position.X, Int, T);
end;
type
TSearchType = (stWholeWord, stMatchCase);
TSearchTypes = set of TSearchType;
function FindText(const SearchStr: string; StartPos, Length: Integer; Options: TSearchTypes): Integer;
Editor.FindText(FindDialog1.FindText, FindDialog1.Position.X, Int, [stWholeWord]);
[stWholeWord, stMatchCase]
[]
Спасибо!
Блин, никак не могу понять, как использовать FindDialog! Вот допустим есть форма, на которой лежит РичЭдитор и сам файнд. Как заставить этот файнд искать текст по эдитору. Если можно, дайте готовый проект. Заранее благодарен!
А чем, собственно, тебя пример из Help-а по FindDialog не устраивает?
procedure TForm1.Button1Click(Sender: TObject);? Все вроде работает...
begin
FindDialog1.Execute; // <--- Запускаешь FindDialog
end;
procedure TForm1.FindDialog1Find(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
begin
with RichEdit1 do begin
if SelLength <> 0 then
StartPos := SelStart + SelLength
else
StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(FindDialog1.FindText);
Perform(EM_SCROLLCARET, 0, 0); { Это было добавлено, чтобы RichEdit прокручивался }
end;
end;
end;