使用 TFindDialog 实现 F3 查找下一个

发布于 2024-09-01 18:40:18 字数 141 浏览 11 评论 0原文

我在表单上使用 TFindDialog 实现了搜索。一切运行良好,除了我无法找到一种方法来模仿记事本中的“F3 - 查找下一个”行为。输入搜索字符串后,按 F3 即可查找下一个实例,而无需打开搜索对话框。

问候,彼得。

I've implemented a search using the TFindDialog on my form. Everything works well except that I cannot find a way to mimic the "F3 - Find Next" behaviour as in Notepad. Once you have entered a search string, pressing F3 finds the next instance without opening the search dialog.

Regards, Pieter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吾性傲以野 2024-09-08 18:40:18

这是一个如何做到这一点的草图:

type
  TForm1 = class(TForm)
    FindDialog1: TFindDialog;
    procedure FindDialog1Find(Sender: TObject);
    procedure SearchFind1Execute(Sender: TObject);
    procedure SearchFindNext1Execute(Sender: TObject);
  private
    FSearchText: string;
    procedure Search;
  end;

以及

procedure TForm1.Search;
begin
  // Do the real searching here...
  MessageBox(Handle, PChar('Looking for "' + FSearchText + '".'), nil, 0);
end;

procedure TForm1.SearchFind1Execute(Sender: TObject);
begin
  // Triggered by Ctrl-F
  FindDialog1.FindText := FSearchText;
  FindDialog1.Execute;
end;

procedure TForm1.SearchFindNext1Execute(Sender: TObject);
begin
  // Triggered by F3
  if FSearchText = '' then
    SearchFind1.Execute
  else
    Search;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
begin
  // Triggered by button click in FindDialog1
  FSearchText := FindDialog1.FindText;
  Search;
end;

Here's a sketch how one could do this:

type
  TForm1 = class(TForm)
    FindDialog1: TFindDialog;
    procedure FindDialog1Find(Sender: TObject);
    procedure SearchFind1Execute(Sender: TObject);
    procedure SearchFindNext1Execute(Sender: TObject);
  private
    FSearchText: string;
    procedure Search;
  end;

and

procedure TForm1.Search;
begin
  // Do the real searching here...
  MessageBox(Handle, PChar('Looking for "' + FSearchText + '".'), nil, 0);
end;

procedure TForm1.SearchFind1Execute(Sender: TObject);
begin
  // Triggered by Ctrl-F
  FindDialog1.FindText := FSearchText;
  FindDialog1.Execute;
end;

procedure TForm1.SearchFindNext1Execute(Sender: TObject);
begin
  // Triggered by F3
  if FSearchText = '' then
    SearchFind1.Execute
  else
    Search;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
begin
  // Triggered by button click in FindDialog1
  FSearchText := FindDialog1.FindText;
  Search;
end;
匿名。 2024-09-08 18:40:18

或者,您可以尝试标准操作 TSearchFind/TSearchFindNext。不过我自己还没有尝试过,所以我不能说它们在实践中效果如何。

Alternativaly you could try the standard actions TSearchFind/TSearchFindNext. However I haven't tried them myself, so I can't say how well they work in practice.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文