Попробуйте так: "Подключите" следующую процедуру к событию OnFind для
FindDialog. Единственная проблема заключается в том, что в DBMemo я не могу
получить выделенный текст, тем не менее в стандартном Memo такой проблемы
нет.
procedure TMainForm.FindDialog1Find(Sender: TObject);
var
Buff, P, FT: PChar;
BuffLen: Word;
begin
with Sender as TFindDialog do
begin
GetMem(FT, Length(FindText) + 1);
StrPCopy(FT, FindText);
BuffLen := DBMemo1.GetTextLen + 1;
GetMem(Buff, BuffLen);
DBMemo1.GetTextBuf(Buff, BuffLen);
P := Buff + DBMemo1.SelStart + DBMemo1.SelLength;
P := StrPos(P, FT);
if P = nil then
MessageBeep(0)
else
begin
DBMemo1.SelStart := P - Buff;
DBMemo1.SelLength := Length(FindText);
end;
FreeMem(FT, Length(FindText) + 1);
FreeMem(Buff, BuffLen);
end;
end;
|
Попробуйте так: "Подключите" следующую процедуру к событию OnFind для
FindDialog. Единственная проблема заключается в том, что в DBMemo я не могу
получить выделенный текст, тем не менее в стандартном Memo такой проблемы
нет.
begin
DBMemo1.SelStart:= P - Buff;
DBMemo1.SelLength:= Length(FindText);
end;
FreeMem(FT, Length(FindText) + 1);
FreeMem(Buff,BuffLen);
DBMemo1.SetFocus;
end;
|
|