一、代码改变字体大小和颜色

 1 procedure TForm1.Button1Click(Sender: TObject);
2 var
3 sNickName, sstr: string;
4 begin
5 sstr := '改变颜色的字符串-----------------!';
6 sNickName := '用户1:';
7 richedit1.Lines.Add(sNickName + sstr);
8
9 RichEdit1.SelStart := Length(RichEdit1.Text) - Length(sstr)-2;//(Length(sNickName) + length(sstr)); //Length(sNickName);
10
11 RichEdit1.SelLength := Length(sstr);
12   richedit1.SelAttributes.Color := clRed;
13 end;

二、增加URL超级链接检测及跳转

方法一

procedure TForm.MyRichEditMouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer);
var
I,L: Integer;
S,T: string;
vRect: TRect;
begin
sPubURL := '';
vRect.Left := X;
vRect.Top := Y;
X := TRichEdit(Sender).Perform(EM_CHARFROMPOS,0,Longint(@vRect.TopLeft)) and $0000FFFF + 1;
S := TRichEdit(Sender).Text;
L := Length(S);
if (X > L) or (X < 0) or (not (S[X] in [#33..#172])) then
begin
MyRichEdit.Cursor := crDefault;
Exit;
end;
T := S[X];
for I := X - 1 downto 1 do
if S[I] in [#33..#172] then T := S[I] + T else Break;
for I := X + 1 to L do
if S[I] in [#33..#172] then T := T + S[I] else Break;
I := Pos('MAILTO:', UpperCase(T));
if I <= 0 then I := Pos('HTTPS://', UpperCase(T));
if I <= 0 then I := Pos('HTTP://', UpperCase(T));
if I <= 0 then I := Pos('FTP://', UpperCase(T));
if I <= 0 then I := Pos('WWW.', UpperCase(T));
if I <> 1 then
begin
MyRichEdit.Cursor := crDefault;
Exit;
end;
sPubURL := T;
MyRichEdit.Cursor := crHandPoint;
end; procedure TForm.MyRichEditMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if sPubURL <> '' then ShellExecute(Handle, 'open', PCharsPubURL nil, nil, SW_SHOW);
end; procedure TForm.MyRichEditChange(Sender: TObject);
var
S: string;
T: string;
I, J, L: Integer;
vSelStart: Integer;
vSelLength: Integer;
begin
TRichEdit(Sender).Perform(EM_HIDESELECTION, Longint(True), 0);
S := TRichEdit(Sender).Text;
L := Length(S);
J := 1;
vSelStart := TRichEdit(Sender).SelStart;
vSelLength := TRichEdit(Sender).SelLength;
TRichEdit(Sender).SelStart := 0;
TRichEdit(Sender).SelLength := L;
TRichEdit(Sender).SelAttributes.Color := clWindowText;
TRichEdit(Sender).SelAttributes.Style := [];
while J <= L do
begin
T := '';
for I := J to L do
if S[I] in [#33..#172] then T := T + S[I] else Break;
if T <> '' then
begin
I := Pos('MAILTO:', UpperCase(T));
if I <= 0 then I := Pos('HTTPS://', UpperCase(T));
if I <= 0 then I := Pos('HTTP://', UpperCase(T));
if I <= 0 then I := Pos('FTP://', UpperCase(T));
if I <= 0 then I := Pos('WWW.', UpperCase(T));
if I = 1 then
begin
TRichEdit(Sender).SelStart := J - 1;
TRichEdit(Sender).SelLength := Length(T);
TRichEdit(Sender).SelAttributes.Color := clBlue;
TRichEdit(Sender).SelAttributes.Style := [fsUnderline];
end;
Inc(J, Length(T));
end;
Inc(J);
end;
TRichEdit(Sender).SelStart := vSelStart;
TRichEdit(Sender).SelLength := vSelLength;
TRichEdit(Sender).Perform(EM_HIDESELECTION, Longint(False), 0);
end;

方法二


1、加载内容前调用 InitRichEditURLDetection
2、覆盖消息 procedure wndproc(var message : tmessage); override;

 1 procedure TForm1.InitRichEditURLDetection(re: TRichEdit);
2 var
3 mask: Word;
4 begin
5 mask := SendMessage(RE.Handle,EM_GETEVENTMASK, 0,0);
6 SendMessage(RE.Handle, EM_SETEVENTMASK,0, mask or ENM_LINK);
7 SendMessage(RE.Handle,EM_AUTOURLDETECT, Integer(True), 0);
8 end;
9
10 procedure TForm1.wndproc(var message: tmessage);
11 var
12 p: tenlink;
13 strurl: string;
14 begin
15 if (message.msg = wm_notify) then
16 begin
17 if (pnmhdr(message.lparam).code = en_link) then
18 begin
19 p := tenlink(pointer(twmnotify(message).nmhdr)^);
20 if (p.msg = wm_lbuttondown) then
21 begin
22 sendmessage(MyRichEdit.handle, em_exsetsel, 0, longint(@(p.chrg)));
23 strurl := MyRichEdit.seltext;
24 shellexecute(handle, 'open', pchar(strurl), 0, 0, sw_shownormal);
25 end;
26 end ;
27 end;
28 inherited;
29 end;

Delphi 关于RichEdit URL 颜色相关总结的更多相关文章

  1. [BS-11] 关于RGB/ARGB颜色相关知识

    关于RGB/ARGB颜色相关知识 众所周知,自然界的颜色都是由红色R.绿色G.蓝色B三元色按不同比例混合而成,每种元色取值范围是0-255.iOS中图片的颜色分为2种:24位和32位. 1. 24位( ...

  2. C 图像处理 颜色相关宏定义

    很多年前整理的,像素处理的宏定义,包括r8g8b8到r5g6b5之间的相互转化,浮点数像素与整数值之间的相互转化,像素值的插值.取反等处理.具体没什么好说的,宏定义的代码还是很容易看的.这套东西对搞图 ...

  3. Delphi中处理URL编码解码

    Delphi中处理URL编码解码 一.URL简单介绍     URL是网页的地址,比方 http://www.shanhaiMy.com. Web 浏览器通过 URL 从 web server请求页面 ...

  4. delphi 返回所有URL

    delphi 返回所有URL USER MSHTMLprocedure TfrmWebEmail.btn5Click(Sender: TObject);var Doc: IHTMLDocument2; ...

  5. moviepy音视频剪辑:颜色相关变换函数blackwhite、colorx、fadein/out、gamma_corr、invert_colors、lum_contrast、mask_color介绍

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...

  6. 获取与Url链接相关的信息

    以下结果的值以此示例为基础:http://www.x2y2.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere j ...

  7. asp.net url重写相关技术问题整理

    1.IIS7配置URL重写需要注意系统是32位还是64位的 在IIS7配置URL重写的时候,需要添加“脚本映射”,如果是64位系统,会有两个地方存放.net framework分别是32位系统和64位 ...

  8. 用js获取当前页面的url的相关信息方法

    当前页面对应的URL的一些属性: ( http://bbs.xxx.net/forum.php?mod=viewthread&tid=2709692&page=1&extra= ...

  9. ios url网址相关问题解说

    问题1:ios网址中存在汉字的情况,需要GB_18030_2000编码方法如下: // 汉字转编码 + (NSString *)changeChineseWithEncodingGB_18030_20 ...

  10. 【English】五、颜色相关

    一.常见颜色 黑色    black    白色    white    蓝色    blue    橙色    orange    黄色    yellow        灰色    gray   ...

随机推荐

  1. kaola

    考拉布局 CSS <style> * { margin: 0; padding: 0; } body { background-color: #f5f5f5; } .clearfix:af ...

  2. centos7 启动报错 Failed to mount /sysroot

    centos7 启动报错 Failed to mount /sysroot   场景: centos7系统异常关闭后,启动后进入不了图形化界面 解决方法: 1. 定位报错原因 进入单用户模式后执行下面 ...

  3. [*]Quadratic Residual Networks: A New Class of Neural Networks for Solving Forward and Inverse Problems in Physics Involving PDEs

    Accepted by SIAM International Conference on Data Mining (SDM21) 本文提出了二次残差网络,通过在应用激活函数之前,添加二次残差项到输入的 ...

  4. nvim比较两个文件的不同

    vim -d file1 file2 或 vimdiff file1 file2 2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: :vert diffsplit file2 ...

  5. xd p3 搭建安全扩展

    常见搭建平台脚本启用 常见平台java Python php jsp搭建要启用脚本 中间件(搭建平台):Apache IIS Tomcat Nginx 主机头值 即 域名 域名IP目录解析安全问题 域 ...

  6. 关于centos防火墙的一些问题

    防火墙有两种:firewall iptables. 两个都需要设置

  7. webpack从零开始打造react项目(更新中...)

    创建项目 创建文件夹 webpack-test  使用编辑器打开文件夹,我们初始化管理包 npm init -y 生成一个默认的 pageage.json 文件 要想创建react项目,思考我们之前使 ...

  8. TCP 粘包/拆包的原因及解决方法?

    TCP是以流的方式来处理数据,一个完整的数据包可能会被TCP拆分成多个包进行发送,也可能把多个小的包封装成一个大的数据包.由于TCP数据包之间没有边界保护,所以当发生粘包或拆包时,接收端难以从数据流中 ...

  9. yii框架中 不能正确正常使用phpredis 路径安装好后还是报 Class yii\redis\Connection does not exist!

    1,成功解决方案 在yiisoft / extensions.php 中添加如下数组 指向目录 'yiisoft/yii2-redis' =>array(      'name'=>'yi ...

  10. TCP连接connect函数返回错误

    如果是 TCP 套接字,那么调用 connect 函数将激发 TCP 的三次握手过程,而且仅在连接建立成功或出错时才返回.其中出错返回可能有以下几种情况: 三次握手无法建立,客户端发出的 SYN 包没 ...