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

 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. Fortran笔记之过程重载,多态,泛型编程

    参考自Introduction to Modern Fortran for the Earth System Sciences 过程重载 OOP中的另一个重要技术是过程重载(Procedure Ove ...

  2. react 基础知识

    基础知识 css-module react 将js转为vdom,react-dom将vdom转为dom // 外面一层是一个动态值,里面的表示的是对象 <img src={logo} style ...

  3. vue 报错Uncaught (in promise) cancel

    解决:.catch()不能省略(因为取消操作时,无法捕获) .then(res => {...}) .catch(()=>{});(then之后把catch加上)

  4. Oracle修改查询优化器版本

    查询优化器参数optimizer_features_enable 在每个数据库版本中,Oracle都会在查询优化器中引入或启用新的特性. 如果在升级到一个新的版本后希望保留查询优化器的行为,可以通过设 ...

  5. codeforces思维题

    1.Slime Escape 次数:0 2.Meeting on the Line 题解 次数:0 3.Ugu 自己完成了线段树解法,另一种解法未完成

  6. 每日一抄 Go语言使用select切换协程

    看了两篇博客,一个说:在任何一个 case 中执行 break 或者 return,select 就结束了. 另一个说:break只能跳出select中的一个case 验证了一下,不知道对不对,感觉是 ...

  7. 将字符串数组String[]转换成List的三种方法

    通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常. String[] strArray = new String[2]; Li ...

  8. Token过期导致页面多个请求报错提示多次

    关于Token过期导致页面多个请求报错提示的问题 我们先在全局定义一个变量(global.js)来控制token是否过期 export default { // token无效标记 TokenInva ...

  9. linux 系统⽇常管理--运维必备

    [监控系统的状态] 1. w 查看当前系统的负载 相信所有的linux管理员最常⽤的命令就是这个'w' 了,该命令显⽰的信息还是蛮丰富 的.第⼀⾏从左⾯开始显⽰的信息依次为:时间,系统运⾏时间,登录⽤ ...

  10. 实时中文语音克隆——开源项目MockingBird体验

    [引子] 在今年大型网络攻防演练前不久,笔者接到一个公司的座机号码来电,上来就问防守准备得怎么样了,哪里还有不足等.等等,这声音不认识,笔者第一反应就是蓝军(Red Team)来进行社会工程攻击,于是 ...