delphi 怎样在memo查找某个字符?

请先把整个思路帮我说下,还有要用到的memo的哪些函数都帮我说下,其实我也在网上查很久了,网上都有挺多例子的,但大都只给出程序而语焉不详的的很难看得懂。请各位耐心指导我。... 请先把整个思路帮我说下,还有要用到的memo的哪些函数都帮我说下,其实我也在网上查很久了,网上都有挺多例子的,但大都只给出程序而语焉不详的的很难看得懂。请各位耐心指导我。
比如在我用finddialog1这个查找控件在memo中查找‘世界’这个词,查找到后光标显示在上面,然后点击下一个光标就会跳转到下一个‘世界’这个词。
请应我要示帮我细心讲解,必定加分重谢!
展开
 我来答
zjgzfs
推荐于2018-05-06 · TA获得超过428个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:484万
展开全部
很简单啊!

procedure TForm1.btnSearchClick(Sender: TObject);
var
SearchText:string;
k:integer;
begin
SearchText:=edit1.Text; //查找edit1中输入的文本
k:=pos(SearchText,memo1.Text); //求出首次出现SearchText的位置
if k=0 then
showmessage('找不到')
else
begin
memo1.SelStart:=k;
memo1.SelLength:=length(SearchText);
memo1.SetFocus; //这一句很重要,否则就会看不到文字被选中
end;
end;

这段代码我不到3分钟就写出来了,而且一点错都没有。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
e__jin
2010-03-26
知道答主
回答量:73
采纳率:0%
帮助的人:21.7万
展开全部
完善一下似乎因该

...
memo1.SelStart:=0;
s:=memo.Text ;

k:=pos(SearchText,s);
while k>0 do
begin
memo1.SelStart:=memo1.SelStart+k;
memo1.SelLength:=length(SearchText);
memo1.SetFocus;
//... 等待消息 ...
//继续执行
delete(s,1,k);
k:=pos(SearchText,s) ;
end;

//////////////////////
Var
FoundAt: Integer;
LastFoundAt: Integer;
SearchStrLen: Integer;
AllText: String;
Begin //"查找下一个" 算法
Result := -1;
FoundAt := 0;

If frDown In Options Then //"向下" 查找,找出搜索范围
AllText := System.Copy(Text, SelStart + SelLength + 1, Length(Text))
Else //"向上" 查找,找出搜索范围
AllText := System.Copy(Text, 1, SelStart);

If Not (frMatchCase In Options) Then //非大小写敏感
Begin
AllText := UpperCase(AllText);
SearchStr := UpperCase(SearchStr);
End;

If frDown In Options Then //执行"向下查找"
Begin
FoundAt := Pos(SearchStr, AllText);
If FoundAt = 0 Then
Exit;
//定位光标到指定的字符串
FoundAt := SelStart + SelLength + FoundAt - 1;
End;

If Not (frDown In Options) Then //执行"向上查找"
Begin
SearchStrLen := Length(SearchStr);
FoundAt := Pos(SearchStr, AllText);
If FoundAt = 0 Then //整个部分没找到
Exit
Else //至少找至一个相符的字串
Begin
LastFoundAt := FoundAt; //保存搜到的"第1个字串"位置
Repeat
FoundAt := Posex(SearchStr, AllText, FoundAt + SearchStrLen);
If FoundAt <> 0 Then
LastFoundAt := FoundAt;
Until FoundAt = 0;
FoundAt := LastFoundAt - 1;
End;
End;

Result := FoundAt;

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gencheng/archive/2007/04/07/1555957.aspx
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式