如何解决如何在richedit中设置文本可点击
在互联网上,我发现了如何在 Richedit 中识别 url 并使其像链接一样可点击并转到网站。
var
mask: Word;
begin
mask := SendMessage(RichEdit1.Handle,EM_GETEVENTMASK,0);
SendMessage(RichEdit1.Handle,EM_SETEVENTMASK,mask or ENM_LINK);
SendMessage(RichEdit1.Handle,EM_AUTOURLDETECT,Integer(True),0);
end;
protected
procedure WndProc(var Message: TMessage); override;
var
p: TENLink;
strURL: string;
begin
if (Message.Msg = WM_NOTIFY) then
begin
if (PNMHDR(Message.lParam).code = EN_LINK) then
begin
p := TENLink(Pointer(TWMNotify(Message).NMHdr)^);
if (p.Msg = WM_LBUTTONDOWN) then
begin
SendMessage(RichEdit1.Handle,EM_EXSETSEL,Longint(@(p.chrg)));
strURL := RichEdit1.SelText;
ShellExecute(Handle,'open',PChar(strURL),SW_SHOWnorMAL);
end
end
end;
inherited;
end;
procedure HTMLSyntax(Richedit: TRichEdit; TextCol,TagCol,DopCol: TColor);
var
i,iDop: Integer;
s: string;
Col: TColor;
isTag,isDop: Boolean;
begin
iDop := 0;
isDop := False;
isTag := False;
Col := TextCol;
Richedit.SetFocus;
for i := 0 to Length(Richedit.Text) do
begin
Richedit.SelStart := i;
Richedit.SelLength := 1;
s := Richedit.SelText;
if (s = '(') or (s = '{') then
isTag := True;
if isTag then
if (s = '"') then
if not isDop then
begin
iDop := 1;
isDop := True;
end
else
isDop := False;
if isTag then
if isDop then
begin
if iDop = 1 then
Col := DopCol;
end
else
Col := TagCol
else
Col := TextCol;
Richedit.SelAttributes.Color := Col;
iDop := 0;
if (s = ')') or (s = '}') then
isTag := False;
end;
Richedit.SelLength := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.Lines.BeginUpdate;
HTMLSyntax(RichEdit1,clBlue,clRed,clYELLOW);
RichEdit1.Lines.EndUpdate;
end;
前两个代码会自动检测以“www”开头的文本。并将其视为“.com”的网络链接。 我的问题是如何使用第三个代码突出显示括号中的文本并将其设置为第一个代码中的网络链接并显示一条消息而不是在第二个代码中打开浏览器。 更清楚地说,假设 Richedit 中有一篇科学文本,并且您想在不同的点提供参考,例如 (19)。 如果用户单击该文本,则会出现带有完整参考地址的消息。 谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。