放置组件:在窗体上放置一个 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;
浙公网安备 33010602011771号