View Full Version : سوال: چگونه می توان در یک متن جستجو کرد؟
  
mahlamahla
پنج شنبه 17 شهریور 1390, 16:52 عصر
بنام خدا
سلام
چگونه مي توان در متن يک DBMemo جستجو کرد؟ 
به اين صورت که در پايان جستجو کلمه جستجو شده در آن HeighLight شود
و تعداد کلمه جستجو شده هم مشخص گردد؟
متشکرم
:قلب:
Mask
پنج شنبه 17 شهریور 1390, 19: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, 07:17 صبح
بنام خدا
سلام
با تشکر از پاسخ شما
اما از آنجایی که من تازه کار هستم و خیلی هم وارد نیستم اگر امکان دارد من را راهنمایی کنید
1-  می خواهم این جستجو را در DBMemo انجام  بدهم
2- تعداد کارکترهای پیدا شده را اعلام کنم
3- جستجو را در متن فارسی انجام دهم
4- در جستجوی بعدی کارکترهای قبلی به حالت اول برگردند.
drahmadtaraffoo
شنبه 19 شهریور 1390, 16: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;
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.