ورود

View Full Version : سوال: چگونه می توان در یک متن جستجو کرد؟



mahlamahla
پنج شنبه 17 شهریور 1390, 15:52 عصر
بنام خدا
سلام
چگونه مي توان در متن يک DBMemo جستجو کرد؟
به اين صورت که در پايان جستجو کلمه جستجو شده در آن HeighLight شود
و تعداد کلمه جستجو شده هم مشخص گردد؟
متشکرم
:قلب:

Mask
پنج شنبه 17 شهریور 1390, 18:15 عصر
قبل از ایجاد پست جستجو کنید.
procedure TForm1.Button1Click(Sender: TObject);
var StartPos,ToEnd,a:integer;
begin
While a<>-1 do
begin
if RichEdit1.SelLength <> 0 then
StartPos := RichEdit1.SelStart + RichEdit1.SelLength
else
StartPos :=0;
ToEnd := Length(RichEdit1.Text) - StartPos;
a:=RichEdit1.FindText(Edit1.text,StartPos,ToEnd,[]);
if a<> -1 then
begin
RichEdit1.SelStart := a;
RichEdit1.SelLength :=Length(Edit1.text);
RichEdit1.SelAttributes.Color := clred;
end;
end;
end;
end.

mahlamahla
جمعه 18 شهریور 1390, 06:17 صبح
بنام خدا
سلام
با تشکر از پاسخ شما
اما از آنجایی که من تازه کار هستم و خیلی هم وارد نیستم اگر امکان دارد من را راهنمایی کنید
1- می خواهم این جستجو را در DBMemo انجام بدهم
2- تعداد کارکترهای پیدا شده را اعلام کنم
3- جستجو را در متن فارسی انجام دهم
4- در جستجوی بعدی کارکترهای قبلی به حالت اول برگردند.

drahmadtaraffoo
شنبه 19 شهریور 1390, 15:28 عصر
procedure TForm1.FindDialog1Find(Sender : TObject);
var
S : string;
startpos : integer;
begin
with TFindDialog(Sender) do
begin
if FSelPos = 0 then
Options := Options - [frFindNext];
if frfindNext in Options then
begin
StartPos := FSelPos + Length(Findtext);
S := Copy(DBMemo1.Lines.Text, StartPos, MaxInt);
end
else
begin
S := DBMemo1.Lines.Text;
StartPos := 1;
end;
FSelPos := Pos(FindText, S);
if FSelPos > 0 then
begin
FSelPos := FSelPos + StartPos - 1;
DBMemo1.SelStart := FSelPos - 1;
DBMemo1.SelLength := Length(FindText);
DBMemo1.SetFocus;
end
else
begin
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;