RichEdit 中的关键字用红颜色出来(已实现),如何鼠标悬浮到关键字上后把该关键字提取出来,并弹出对话框呢
RichEdit 中的关键字用红颜色出来(已实现),如何鼠标悬浮到关键字上后把该关键字提取出来,并弹出对话框呢?
具体描述如下:窗体上放置一个 RichEdit1 一个 Button1
以下是实现单击关键字变颜色,比如将关键字“交流 '变成红色,如何实现当鼠标悬浮到“交流 '时弹出一个“交流 '的对话框。如何实现,请高手指点
//首先恢复原色
procedure ReSetKey(FEdit: TRichEdit);
begin
with FEdit do
begin
SelStart := 0;
SelLength := Length(FEdit.Text);
SelAttributes.Color := SelAttributes.Color;
SelAttributes.Style := SelAttributes.Style;
end;
end;
//设置颜色
procedure setKeySelect(FEdit: TRichEdit; strKey: string; theColor: TColor);
var StartPos: Integer;
ToEnd: Integer;
FindAt: Integer;
begin
StartPos := 0;
ToEnd := Length(FEdit.Text);
repeat
FindAt := FEdit.FindText(strKey, StartPos, ToEnd, [stMatchCase]);
StartPos := FindAt + Length(strKey);
ToEnd := Length(FEdit.Text) - StartPos;
FEdit.SelStart := FindAt;
FEdit.SelLength := Length(strKey);
if theColor = null then
theColor := clRed;
FEdit.SelAttributes.Color := theColor; //修改颜色为红色。
FEdit.SelAttributes.Style := FEdit.SelAttributes.Style + [fsBold]; //加粗
FEdit.SelAttributes.Style := FEdit.SelAttributes.Style + [fsItalic]; //倾斜
FEdit.Hint := 'dddddddddddddddddd ';
FEdit.SelAttributes.Style := FEdit.SelAttributes.Style + [fsUnderline]; //下划线
until FindAt = -1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ReSetKey(RichEdit1);
setKeySelect(RichEdit1, '交流 ', clRed);
end;
[解决办法]
随便写了几行代码,这也许能满足部分需求。
procedure TForm1.RichEdit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var pos,st,ed:integer;begin If RichEdit1.SelAttributes.Color = clred then begin pos := RichEdit1.SelStart; while RichEdit1.SelAttributes.Color = clred do begin RichEdit1.SelStart := RichEdit1.SelStart - 1; RichEdit1.SelLength := 0; st := RichEdit1.SelStart; end; RichEdit1.SelStart := pos; while RichEdit1.SelAttributes.Color = clred do begin RichEdit1.SelStart := RichEdit1.SelStart + 1; RichEdit1.SelLength := 0; ed := RichEdit1.SelStart; end; RichEdit1.SelStart := st; RichEdit1.SelLength := ed - st - 1; ShowMessage(RichEdit1.SelText); end;end;