请问如何在Memo中实现像记事本中Ctrl+F进行字符串查找的功能?

解决方案 »

  1.   

    with Memo do
      begin
        if SelLength<>0 then StartPos:=SelStart+SelLength
        else StartPos:=0;
        ToEnd:=length(Text)-StartPos;
        FoundAt:=FindText(FindDialog1.FindText,StartPos,ToEnd,[stMatchCase]);
        if FoundAt<>-1 then
        begin
          SetFocus;
          SelStart:=FoundAt;
          SelLength:=length(FindDialog1.FindText);
        end;
      end;
      

  2.   

    你可以将找到的字符及位置记录下来(放在数组或TList中等).Tmemo本身不提供备注的功能
      

  3.   

    To:201fgq(七彩云南) 
    对不起我不知道Tmemo的本身不能FindText;
    不过你可以这样:
    把要TMemo的内容付置给RichEdit。让它去查,查到的光标在付回来。
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      FindDialog1.FindText:=Memo1.SelText;
      RichEdit1.Text:=Memo1.Text;
      FindDialog1.Execute;
    end;procedure TForm1.FindDialog1Find(Sender: TObject);
    var FoundAt:LongInt;
        StartPos,ToEnd:Integer;
        frMatchCaseTmp,frWholeWordTmp:TFindOption;
    begin
      with RichEdit1 do
      begin
        if SelLength<>0 then StartPos:=SelStart+SelLength
        else StartPos:=0;
        ToEnd:=length(Text)-StartPos;
        FoundAt:=FindText(FindDialog1.FindText,StartPos,ToEnd,[stMatchCase]);
        if FoundAt<>-1 then
        begin
         {SetFocus;
          SelStart:=FoundAt;
          SelLength:=length(FindDialog1.FindText);} //本来该付给Richedit的,付给Memo1也可以得到查找的效果。
          Memo1.SetFocus;
          Memo1.SelStart:=FoundAt;
          Memo1.SelLength:=length(FindDialog1.FindText);
        end;
      end;
    end;:)
      

  4.   

    只有自己写的,你用pos(substr,str)函数查找,str你自己在findnext的时候控制一下,找到了把selstart改到pos的值就OK了。如果要形象一点,再加个seltext,用来选中字符串