如题~
用delphi 程序实现。

解决方案 »

  1.   

    Delphi里面有ScanString,你可以把txt装入然后查找
    如果文件比较大
    一般查找是很快的,主要时间在装入内存上
    大体代码为
    aa:=Tstringlist.create;
    aa.loadformfile('yourfile');
    use pos('substr',aa.text);
    //这里,你也可以用TstringList的Find方法查找 
    function Find(const S: string; var Index: Integer): Boolean; virtual;
      

  2.   

    回复人: Kshape([伟大的大伟!]) ( ) 信誉:110 
    謝謝~
    但是我想要的是在记事本上控制光标移动到第一次出现的关键字的位置.如果没法,也可以考虑把txt内容放在memo上,在memo上定位,当然这样使用起来没有上面那样方便.
      

  3.   

    //参考如下代码
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vHandle: THandle;
      vBuffer: PChar;
      vLength: Integer;
      vIndex: Integer;
      vString: string;
    begin
      vHandle := Memo1.Handle; { TODO : 得到句柄 }
      vLength := SendMessage(vHandle, WM_GETTEXTLENGTH, 0, 0);
      if vLength <= 0 then Exit;
      Inc(vLength);
      GetMem(vBuffer, vLength);
      try
        SendMessage(vHandle, WM_GETTEXT, vLength, Integer(vBuffer));
        vString := Edit1.Text; //输入字符
        vIndex := Pos(vString, vBuffer);
        if vIndex <= 0 then Exit;
        Dec(vIndex);
        SendMessage(vHandle, EM_SETSEL, vIndex, vIndex + Length(vString));
      finally
        FreeMem(vBuffer, vLength);
      end;
    end;
      

  4.   

    回复人: zswang(伴水清清)(专家门诊清洁工) ( ) 信誉:170  2005-03-04 22:24:00  得分: 0  
    ---------->
    果然是高手啊,太歷害了!用memo可以實現了。
    不知在記事本上有沒有辦法實現呢?
      

  5.   

    to merkey2002:只要你得到记事本中Edit的句柄就可以了,看你也有不少专家分,就没给你多加说明    vHandle := Memo1.Handle; { TODO : 得到句柄 }
      

  6.   

    //查找..
    var
       Found:Longint;
       startpos,Toend:integer;
      //startpos从选择点到结束点的长度
    begin
       with Editor do
       begin
           if sellength<>0 then
           startpos:=selstart+sellength
           else
           startpos:=0;
           Toend:=length(text)-startpos;
           Found:=FindText(finddialog1.FindText,startpos,Toend,[stMatchCase]);
           if Found<>-1 then
           begin
               setfocus;
               Selstart:=Found;
               sellength:=Length(finddialog1.FindText);
           end
           else
             messagedlg('没有你想要找的内容或已查找完毕',mtconfirmation,[mbYes],0);
      end;
    end;//替换
    var
      Selpos:integer;
    begin
       with Replacedialog1 do
       begin
          Selpos:=pos(FindText,Editor.Lines.Text);
          if Selpos>0 then
          begin
              Editor.SelStart:=Selpos-1;
              Editor.SelLength:=length(Findtext);
              Editor.SelText:=Replacetext;
          end
          else
          messagedlg(Concat('could not find"',Findtext,'"in Editor.'),mtError,[mbYes],0);
       end;
    end;这是我以前作记事本的一段源码..应该对你有点用
      

  7.   

    用了一个Finddialog ,一个Replacedialog1
      

  8.   

    伴水前辈:
    我的专家分都是从数据库,报表这些方面赚来的
    其它方面我都好菜的说.只要你得到记事本中Edit的句柄就可以了
    ----->
    这个我还不会呢,我只会得到记事本的handle
      vhandle:= FindWindow(nil, '11.txt - 记事本');  { TODO : 得到句柄 }
    我瞎试了一下,再加上这句,就刚好得到记事本上edit的handle,哈哈.现在功能都可以实现了.
      vhandle:=getwindow(vhandle,gw_child);凑巧而已,不知按正确的操作方法的话应该如何写呢?
      

  9.   

    //to merkey2002,已经接近了,根据类名找合理一些,标题会被打开的文件不同影响
      vHandle := FindWindow('Notepad', nil);
      vHandle := GetWindow(vHandle, GW_CHILD);