问题描述
在互联网上,我发现了如何在 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 (将#修改为@)