首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中搜索备忘录?

在Delphi中搜索备忘录?
EN

Stack Overflow用户
提问于 2010-11-20 20:29:18
回答 2查看 8.4K关注 0票数 6

谁能给我一些简单的代码,让我能够在备忘录中搜索简单的字符串,并在被找到后在备忘录中突出显示它?

EN

回答 2

Stack Overflow用户

发布于 2010-11-20 21:03:33

此搜索允许文档换行、区分大小写的搜索以及从光标位置进行搜索。

代码语言:javascript
复制
type
  TSearchOption = (soIgnoreCase, soFromStart, soWrap);
  TSearchOptions = set of TSearchOption;


function SearchText(
    Control: TCustomEdit; 
    Search: string; 
    SearchOptions: TSearchOptions): Boolean;
var
  Text: string;
  Index: Integer;
begin
  if soIgnoreCase in SearchOptions then
  begin
    Search := UpperCase(Search);
    Text := UpperCase(Control.Text);
  end
  else
    Text := Control.Text;

  Index := 0;
  if not (soFromStart in SearchOptions) then
    Index := PosEx(Search, Text, 
         Control.SelStart + Control.SelLength + 1);

  if (Index = 0) and 
      ((soFromStart in SearchOptions) or 
       (soWrap in SearchOptions)) then
    Index := PosEx(Search, Text, 1);

  Result := Index > 0;
  if Result then
  begin
    Control.SelStart := Index - 1;
    Control.SelLength := Length(Search);
  end;
end;

您可以在备注上设置HideSelection = False以显示选定内容,即使备注没有被聚焦。

像这样使用:

代码语言:javascript
复制
  SearchText(Memo1, Edit1.Text, []);

也允许搜索编辑。

票数 11
EN

Stack Overflow用户

发布于 2010-11-20 20:54:20

代码语言:javascript
复制
  function TForm1.FindText( const aPatternToFind: String):Boolean;
  var
    p: Integer;
  begin
    p := pos(aPatternToFind, Memo1.Text);
    Result :=  (p > 0);
    if Result then
      begin
        Memo1.SelStart := p;
        Memo1.SelLength := Length(aPatternToFind);
        Memo1.SetFocus; // necessary so highlight is visible
      end;
  end;

如果WordWrap为true,则不会跨行搜索。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4232709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档