Delphi 关于RichEdit URL 颜色相关总结
一、代码改变字体大小和颜色
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 颜色相关总结的更多相关文章
- [BS-11] 关于RGB/ARGB颜色相关知识
关于RGB/ARGB颜色相关知识 众所周知,自然界的颜色都是由红色R.绿色G.蓝色B三元色按不同比例混合而成,每种元色取值范围是0-255.iOS中图片的颜色分为2种:24位和32位. 1. 24位( ...
- C 图像处理 颜色相关宏定义
很多年前整理的,像素处理的宏定义,包括r8g8b8到r5g6b5之间的相互转化,浮点数像素与整数值之间的相互转化,像素值的插值.取反等处理.具体没什么好说的,宏定义的代码还是很容易看的.这套东西对搞图 ...
- Delphi中处理URL编码解码
Delphi中处理URL编码解码 一.URL简单介绍 URL是网页的地址,比方 http://www.shanhaiMy.com. Web 浏览器通过 URL 从 web server请求页面 ...
- delphi 返回所有URL
delphi 返回所有URL USER MSHTMLprocedure TfrmWebEmail.btn5Click(Sender: TObject);var Doc: IHTMLDocument2; ...
- moviepy音视频剪辑:颜色相关变换函数blackwhite、colorx、fadein/out、gamma_corr、invert_colors、lum_contrast、mask_color介绍
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...
- 获取与Url链接相关的信息
以下结果的值以此示例为基础:http://www.x2y2.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere j ...
- asp.net url重写相关技术问题整理
1.IIS7配置URL重写需要注意系统是32位还是64位的 在IIS7配置URL重写的时候,需要添加“脚本映射”,如果是64位系统,会有两个地方存放.net framework分别是32位系统和64位 ...
- 用js获取当前页面的url的相关信息方法
当前页面对应的URL的一些属性: ( http://bbs.xxx.net/forum.php?mod=viewthread&tid=2709692&page=1&extra= ...
- ios url网址相关问题解说
问题1:ios网址中存在汉字的情况,需要GB_18030_2000编码方法如下: // 汉字转编码 + (NSString *)changeChineseWithEncodingGB_18030_20 ...
- 【English】五、颜色相关
一.常见颜色 黑色 black 白色 white 蓝色 blue 橙色 orange 黄色 yellow 灰色 gray ...
随机推荐
- Oracle View的Force參數有什麼用途?
1. 當建立View的SQL查詢語句因為各種問題還暫時無法執行時,可以使用Force參數先建立成功2. SQL的問題沒有修正之前,是無法正常使用View的 語法: CREATE Force VIEW ...
- VSCode-WSL配置 C++ —— 以OpenCV4为例
生成并编辑c_cpp_properties.json 命令窗口输入:>C/C++: Edit Configurations(JSON),就会自动生成该文件 在includePath中加上需要in ...
- chklist
1. 重复检查的必要性.一段代码如果在测试期间没问题,也要间隔几天再去观察是否有问题.2. 如果是集群式的服务,使用定时任务要采用分布式锁,或使用工具随机发送一台都可以.3. 如果任务跑失败,需要支持 ...
- Twitter Bootstrap Grid System
Bootstrap是什么?Bootstrap是一个用来快速并且容易的开发web页面,强大的前端框架.它包含html和css基本设计模板,包含通用用户界面组件,如:排版,形式,按钮,表格,导航,下拉框, ...
- PHP表单验证内容是否为空的实现代码
<!doctype html> <html> <head> <meta http-equiv="conent-type" conten ...
- java中对list集合进行分组
java中对list集合进行分组 Map<String, List<HealthImport>> excelIdCardNull = importList.stream() . ...
- js判断数组中对象是否存在某个值
js判断数组中对象是否存在某个值 var arr = [{ name: "回锅肉", value: "0" }, { name: "小炒肉" ...
- jmeter中返回值提取并存储。
jmeter中,关于对接口提取值如何存入CSV文件并且做到换列操作的处理.我这里简单介绍一下. 1.首先把接口调通(这个是必须条件),确认好需要提取存入csv的字段,这里以统计token跟userid ...
- Excel—时间函数
时间函数,学习之前先普及一个尝试,微软采用的是1900年纪念方式(数字1,代表的是1900年1月1日,数字1.5 代表的是1900年的1月1日的中午12:00,因为1.5正好是1天半的时间,而一天2 ...
- 51定时器:0xee的由来
定时时间=(65536-初值)×(12/晶振频率) 因为51实验板的晶振为11.0592,所以 定时时间=(65536-初值)×(12/11.0592) 定时1ms:1000=(65536-初值)×( ...