delphi 怎样在memo查找某个字符?
请先把整个思路帮我说下,还有要用到的memo的哪些函数都帮我说下,其实我也在网上查很久了,网上都有挺多例子的,但大都只给出程序而语焉不详的的很难看得懂。请各位耐心指导我。...
请先把整个思路帮我说下,还有要用到的memo的哪些函数都帮我说下,其实我也在网上查很久了,网上都有挺多例子的,但大都只给出程序而语焉不详的的很难看得懂。请各位耐心指导我。
比如在我用finddialog1这个查找控件在memo中查找‘世界’这个词,查找到后光标显示在上面,然后点击下一个光标就会跳转到下一个‘世界’这个词。
请应我要示帮我细心讲解,必定加分重谢! 展开
比如在我用finddialog1这个查找控件在memo中查找‘世界’这个词,查找到后光标显示在上面,然后点击下一个光标就会跳转到下一个‘世界’这个词。
请应我要示帮我细心讲解,必定加分重谢! 展开
2个回答
展开全部
很简单啊!
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分钟就写出来了,而且一点错都没有。
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分钟就写出来了,而且一点错都没有。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
完善一下似乎因该
...
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
...
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询