读书人

RichEdit 中的关键字用红颜色出来(已

发布时间: 2012-03-20 14:01:11 作者: rapoo

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;

[解决办法]
随便写了几行代码,这也许能满足部分需求。

Delphi(Pascal) code
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; 

读书人网 >.NET

热点推荐