放置组件:在窗体上放置一个 TRichEdit (如 RichEdit1)、一个 TButton (如 Button1) 和一个 TFindDialog (如 FindDialog1)。
设置按钮事件:在按钮的 OnClick 事件中调用查找对话框。
procedure TForm1.Button1Click(Sender: TObject);
begin
  // 可选:将对话框显示在 RichEdit 旁边
  FindDialog1.Position := Point(RichEdit1.Left + RichEdit1.Width, RichEdit1.Top);
  FindDialog1.Execute; // 显示查找对话框
end;
//处理查找事件:在 TFindDialog 的 OnFind 事件中编写核心的查找逻辑。当用户在查找对话框中点击“查找下一个”时,此事件会被触发。
procedure TForm1.FindDialog1Find(Sender: TObject);
var
  FoundAt: LongInt;
  StartPos, ToEnd: Integer;
  SearchOptions: TSearchTypes;
begin
  // 初始化搜索选项
  SearchOptions := [];
  with FindDialog1 do
  begin
    if frMatchCase in Options then
      SearchOptions := SearchOptions + [stMatchCase];
    if frWholeWord in Options then
      SearchOptions := SearchOptions + [stWholeWord];
  end;

  with RichEdit1 do
  begin
    // 确定搜索的起始位置
    // 如果有选中的文本,则从选中内容之后开始查找,避免重复找到同一个词
    if SelLength > 0 then
      StartPos := SelStart + SelLength
    else
      StartPos := 0;

    // 计算从起始位置到文本末尾的长度
    ToEnd := Length(Text) - StartPos;

    // 执行查找
    FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, SearchOptions);

    // 处理查找结果
    if FoundAt <> -1 then
    begin
      // 找到:选中文本,并让 RichEdit 获得焦点以高亮显示
      SetFocus;
      SelStart := FoundAt;
      SelLength := Length(FindDialog1.FindText);
    end
    else
    begin
      // 未找到:发出提示音或显示消息
    //  Beep;
      // 或者 MessageBeep(0);
      // 更友好的方式:
     ShowMessage(Format('未找到 "%s"。', [FindDialog1.FindText]));
    end;
  end;
end;

 Delphi RichEdit用RichEdit1.FindText关键词红色高亮

var
  FoundPos: Integer;
  SearchText: string;
  StartPos: Integer;
  SearchOptions: TSearchTypes;
begin
  SearchText := Edit2.Text;
  if SearchText = '' then Exit;

  // 先重置所有文本颜色为黑色
  editor.SelStart := 0;
  editor.SelLength := Length(editor.Text);
  editor.SelAttributes.Color := clBlack;

  // 设置查找选项
  SearchOptions := [stMatchCase]; // 根据需要添加选项

  StartPos := 0;
  while True do
  begin
    // 从 StartPos 开始查找
    FoundPos := editor.FindText(
      SearchText,
      StartPos,
      Length(editor.Text) - StartPos,
      SearchOptions
    );

    if FoundPos = -1 then
      Break; // 没找到就退出

    // 高亮找到的词
    editor.SelStart := FoundPos;
    editor.SelLength := Length(SearchText);
    editor.SelAttributes.Color := clRed;

    // 移动起始位置,继续往后找(跳过已找到的词)
    StartPos := FoundPos + Length(SearchText);

    // 防止死循环(如果关键词长度为0)
    if Length(SearchText) = 0 then
      Break;
  end;

  // 取消选中状态
  editor.SelLength := 0;
  editor.SelStart := 0;
end;