Поиск в TMemo с использованием TFindDialog

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Оформил: DeeCo

Автор: http://www.swissdelphicenter.ch

private

{ Private declarations }

FSelPos: integer;

public

{ Public declarations }

end;

var

Form1 : TForm1;

implementation

{$R *.dfm}

procedure TForm1.FindDialog1Find(Sender : TObject);

var

S : string;

startpos : integer;

begin

with TFindDialog(Sender) do

begin

{If the stored position is 0 this cannot be a find next. }

if FSelPos = 0 then

Options := Options — [frFindNext];

{ Figure out where to start the search and get the corresponding

text from the memo. }

if frfindNext in Options then

begin

{ This is a find next, start after the end of the last found word. }

StartPos := FSelPos Length(Findtext);

S := Copy(Memo1.Lines.Text, StartPos, MaxInt);

end

else

begin

{ This is a find first, start at the, well, start. }

S := Memo1.Lines.Text;

StartPos := 1;

end;

{ Perform a global case-sensitive search for FindText in S }

FSelPos := Pos(FindText, S);

if FSelPos > 0 then

begin

{ Found something, correct position for the location of the start

of search. }

FSelPos := FSelPos StartPos — 1;

Memo1.SelStart := FSelPos — 1;

Memo1.SelLength := Length(FindText);

Memo1.SetFocus;

end

else

begin

{ No joy, show a message. }

if frfindNext in Options then

S := Concat(‘There are no further occurences of «‘, FindText,

‘» in Memo1.’)

else

S := Concat(‘Could not find «‘, FindText, ‘» in Memo1.’);

MessageDlg(S, mtError, [mbOK], 0);

end;

end;

end;

// Show the FindDialog

// Den FindDialog anzeigen

procedure TForm1.Button1Click(Sender : TObject);

begin

FSelPos := 0;

FindDialog1.Execute;

end;

{/codecitation}

Добавить комментарий