Difference between revisions of "TFindDialog"
Line 3: | Line 3: | ||
'''TFindDialog''' [[Image:tfinddialog.png]] is a component that aids in searching information. It can be found on the [[Dialogs tab]] of the [[Component Palette]]. | '''TFindDialog''' [[Image:tfinddialog.png]] is a component that aids in searching information. It can be found on the [[Dialogs tab]] of the [[Component Palette]]. | ||
− | It is important to know that the dialog itself does not perform a search; it just provides a user interface for all the search parameters. To activate a FindDialog, call its <tt>Execute()</tt> function. Create an <tt>OnFind</tt> method in which the search itself is performed. | + | It is important to know that the dialog itself does not perform a search; it just provides a user interface for all the search parameters. To activate a FindDialog, call its <tt>Execute()</tt> [[Function|function]]. Create an <tt>OnFind</tt> [[Method|method]] in which the search itself is performed. |
[[image:component-TFindDialog.png]] | [[image:component-TFindDialog.png]] | ||
== Usage == | == Usage == | ||
− | The following examples illustrate usage of TFindDialog for search a specific phrase within the text stored in a memo. | + | The following examples illustrate usage of TFindDialog for search a specific phrase within the text stored in a memo ([[TMemo]]). |
<syntaxhighlight lang="pas"> | <syntaxhighlight lang="pas"> | ||
procedure TForm1.Button1Click(Sender: TObject); | procedure TForm1.Button1Click(Sender: TObject); | ||
Line 30: | Line 30: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | If you want to repeat the operation several times with the same search text you must remember the last found position and continue searching from here - the function <tt>PosEx()</tt> in unit StrUtils is perfect for this purpose: | + | If you want to repeat the operation several times with the same search text you must remember the last found position and continue searching from here - the function <tt>PosEx()</tt> in [[Unit|unit]] StrUtils is perfect for this purpose: |
<syntaxhighlight lang="pas"> | <syntaxhighlight lang="pas"> |
Revision as of 09:52, 13 October 2019
│
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
中文(中国大陆) (zh_CN) │
TFindDialog is a component that aids in searching information. It can be found on the Dialogs tab of the Component Palette.
It is important to know that the dialog itself does not perform a search; it just provides a user interface for all the search parameters. To activate a FindDialog, call its Execute() function. Create an OnFind method in which the search itself is performed.
Usage
The following examples illustrate usage of TFindDialog for search a specific phrase within the text stored in a memo (TMemo).
procedure TForm1.Button1Click(Sender: TObject);
begin
FindDialog1.Execute();
end;
procedure TForm1.FindDialog1Find(Sender: TObject);
var
k: integer;
begin
with Sender as TFindDialog do begin
k := Pos(FindText, Memo1.Lines.Text);
if k > 0 then begin
Memo1.SelStart := k - 1;
Memo1.SelLength := Length(FindText);
end else
Beep();
end;
end;
If you want to repeat the operation several times with the same search text you must remember the last found position and continue searching from here - the function PosEx() in unit StrUtils is perfect for this purpose:
uses
StrUtils;
type
TForm1 = class(TForm)
private
FFoundPos: Integer;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
with FindDialog1 do
begin
if frEntireScope in Options then // Search begins at file start
FFoundPos := 0
else
FFoundPos := Memo1.SelStart; // Serach begins at current cursor position
Execute;
end;
end;
procedure TForm1.FindDialog1Find(Sender: TObject);
begin
with Sender as TFindDialog do
begin
FFoundPos := PosEx(FindText, Memo1.Lines.Text, FFoundPos+1);
if FFoundPos > 0 then
begin
Memo1.SelStart := FFoundPos - 1;
Memo1.SelLength := Length(FindText);
end else
Beep();
end;
end;
See also