【Delphi】实现彩色日志显示框(TRichEdit Helper)

目录
一、前言
二、实现方法
1. 第一步
2. 第二步
3. 第三步
三、主程序代码
四、下载
1. 可执行程序
2. 程序源代码
一、前言
在用Delphi做日常开发的时候,经常需要显示程序运行的日志,一般我们会使用TMemo,使用起来简单,方便。但是缺点也很明显,就是只能显示单色文字,字体也只能统一设置,无法实现个性颜色和字体。
但是我们看大的一些系统,日志则非常美观、漂亮、专业。
例如,Delphi的编译日志如下:

那么,我们能收实现这样的日志显示框呢,当然可以,而且非常简单,无需使用任何第三方控件,使用Delphi自带的TRichEdit就可以。
二、实现方法
通过对TRichEdit进行Helper构造,增加一个显示多颜色的命令即可。
1. 第一步
编写一个uTRichEdit_Helper.pas单元,在该单元中增加一个Add_Color_Log方法,该方法有5个参数:
| 序号 | 参数 | 类别 | 默认 | 说明 |
| 1 | msg | string | 无 | 需要显示的消息字符串 |
| 2 | FontColor | TColor | clBlack(黑色) | 字体显示的颜色 |
| 3 | FontSize | Byte | 9 | 字体大小 |
| 4 | FontStyle | TFontStyles | [ ] | 字体格式 |
| 5 | LeftMargin | Byte | 4 | 左边预留空格 |
{******************************************************** 时间:2023-12-03* 作者:sensor wu* 功能:实现TRichEdit的彩色可编程 Log 功能** 此处为 VCL,FMX不支持该控件** 说明:* msg: 需要显示的消息内容* FontColor: 需要现实的颜色,默认黑色* FontSize : 字体大小,默认9号字体* FontStyle: 字体是否加粗、斜体等显示,默认不是* LeftMargin: 左边留空格数量,默认是4** 快捷用法:* 1. RichEdit.Add_Color_log('编译成功!'#13#10, clGreen); //显示一行绿色* 2. RichEdit.Add_Color_log('编译错误:');* RichEdit.Add_Color_log('23行缺少逗号...'#13#10,clRed); //显示一行:编译错误: 23行缺少逗号... 前面黑色,后面红色*******************************************************}
unit uTRichEdit_Helper;interface
usesVcl.Graphics, //TColorWinapi.Messages, //消息常量,例如:EM_SCROLLCARET ,为了减少空间,可以不引该单元,直接使用数字解开Winapi.Windows, //消息常量,例如:SB_ENDSCROLLVcl.ComCtrls;typeTRichEditHelper = class helper for TRichEditpublicprocedure Add_Color_log(msg: string; FontColor : TColor = clBlack; FontSize : Byte = 9; FontStyle : TFontStyles = []; LeftMargin: Byte = 4);end;implementation{ TRichEditHelper }procedure TRichEditHelper.Add_Color_log(msg: string; FontColor: TColor;FontSize: Byte; FontStyle: TFontStyles; LeftMargin: Byte);
begin//此处省略了实现代码
end;end.
2. 第二步
在主程序中引用该单元:
implementationusesuTRichEdit_Helper;
3. 第三步
使用:
RichEdit1.Add_Color_log(#13#10);RichEdit1.Add_Color_log('Checking project dependencies...'#13#10,clBlack,9,[fsBold]);RichEdit1.Add_Color_log('Compiling RichEdit_Helper_Demo.dproj (Debug,Win32)'#13#10,clBlack,9,[fsBold]);RichEdit1.Add_Color_log('brcc32 command line for "RicheEdit_Helper_Demo.vrc"'#13#10,clBlack);RichEdit1.Add_Color_log('dcc32 command line for "RicheEdit_Helper_Demo.dpr"'#13#10,clBlack);RichEdit1.Add_Color_log('Success'#13#10,clGreen,9,[fsBold]);RichEdit1.Add_Color_log('Elapsed time: 00:00:01.2'#13#10);
三、主程序代码
unit uMainForm_RichEdit;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdUDPServer, IdGlobal, IdSocketHandle,Vcl.ExtCtrls, IdUDPClient, System.ImageList, Vcl.ImgList,Vcl.VirtualImageList, Vcl.BaseImageCollection, Vcl.ImageCollection,IdBaseComponent, IdComponent, IdUDPBase, Vcl.Menus, Vcl.ExtActns,System.Actions, Vcl.ActnList, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.VirtualImage,Vcl.Buttons;typeTForm_RichEdit = class(TForm)Panel_Command: TPanel;SpeedButton6: TSpeedButton;SpeedButton1: TSpeedButton;SpeedButton2: TSpeedButton;SpeedButton7: TSpeedButton;SpeedButton10: TSpeedButton;VirtualImage1: TVirtualImage;Panel_Client: TPanel;Panel_LeftCommand: TPanel;SpeedButton4: TSpeedButton;RichEdit1: TRichEdit;ActionList1: TActionList;Action_Start: TAction;Action_Stop: TAction;Action_RegService: TAction;Action_UnRegService: TAction;Action_SetParams: TAction;SendMail1: TSendMail;ImageCollection1: TImageCollection;VirtualImageList1: TVirtualImageList;procedure SpeedButton4Click(Sender: TObject);procedure Action_StartExecute(Sender: TObject);procedure Action_SetParamsExecute(Sender: TObject);procedure Action_StopExecute(Sender: TObject);procedure Action_RegServiceExecute(Sender: TObject);procedure Action_UnRegServiceExecute(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm_RichEdit: TForm_RichEdit;implementationusesuTRichEdit_Helper;{$R *.dfm}procedure TForm_RichEdit.Action_RegServiceExecute(Sender: TObject);
beginRichEdit1.Add_Color_log('Web服务端口号: ');RichEdit1.Add_Color_log('8080'#13#10,clBlue,9,[]);
end;procedure TForm_RichEdit.Action_SetParamsExecute(Sender: TObject);
beginRichEdit1.Add_Color_log(#13#10);RichEdit1.Add_Color_log('Checking project dependencies...'#13#10,clBlack,9,[fsBold]);RichEdit1.Add_Color_log('Compiling RichEdit_Helper_Demo.dproj (Debug,Win32)'#13#10,clBlack,9,[fsBold]);RichEdit1.Add_Color_log('brcc32 command line for "RicheEdit_Helper_Demo.vrc"'#13#10,clBlack);RichEdit1.Add_Color_log('dcc32 command line for "RicheEdit_Helper_Demo.dpr"'#13#10,clBlack);RichEdit1.Add_Color_log('Success'#13#10,clGreen,9,[fsBold]);RichEdit1.Add_Color_log('Elapsed time: 00:00:01.2'#13#10);
end;procedure TForm_RichEdit.Action_StartExecute(Sender: TObject);
beginRichEdit1.Add_Color_log('服务已经成功启动 (绿色)'#13#10,clGreen,9,[]);
end;procedure TForm_RichEdit.Action_StopExecute(Sender: TObject);
beginRichEdit1.Add_Color_log('服务已经成功停止 (红色)'#13#10,clRed,9,[]);
end;procedure TForm_RichEdit.Action_UnRegServiceExecute(Sender: TObject);
beginRichEdit1.Add_Color_log('UDP在这个端口');RichEdit1.Add_Color_log('8192',clGreen,9,[fsBold,fsItalic]);RichEdit1.Add_Color_log('收到数据');RichEdit1.Add_Color_log('(' + FormatDateTime('YYYY-MM-DD hh:mm:ss',Now) +')'#13#10,clGray,9,[]);
end;procedure TForm_RichEdit.SpeedButton4Click(Sender: TObject);
beginRichEdit1.Clear;
end;end.
四、下载
1. 可执行程序
下载(EXE)程序
2. 程序源代码
下载(源程序:¥14.9)
相关文章:
【Delphi】实现彩色日志显示框(TRichEdit Helper)
目录 一、前言 二、实现方法 1. 第一步 2. 第二步 3. 第三步 三、主程序代码 四、下载 1. 可执行程序 2. 程序源代码 一、前言 在用Delphi做日常开发的时候,经常需要显示程序运行的日志,一般我们会使用TMemo,使用起来简单,…...
Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!
1、背景 集群配置为:8 个 node 节点,16 核 32G,索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高,search 没有慢查询的状态。 2、集群压测性能不能上去,cpu 使用未打…...
图像批量设计软件Retrobatch Pro mac中文版功能特色
Retrobatch Mac是一款灵活的批量图像处理工具。用户可以自由创建Workflow来实现相应的功能,这些Workflow能取代大量的重复劳动,提高生产力。Retrobatch Mac的一般操作是从左边栏拖动相应动作到工作区形成节点(Nodes),节…...
python第3天之函数
深入理解 Python 中的函数 简介 在编程中,函数是组织和复用代码的基本单元。Python 作为一门高级编程语言,提供了丰富的函数特性来帮助开发者编写清晰、模块化和高效的代码。在本文中,我们将深入探讨 Python 函数的定义、调用、参数、返回值…...
SQL Server 数据库,为products表添加数据
在插入数据的时候,需要注意以下事项。 > 每次插入一整行数据,不可能只插入半行或几列数据。 > 数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的 列匹配。 > INSERT语句不能为标识列指定值&#…...
C语言结构体详解(二)(能看懂文字就能明白系列)文章很长,慢慢品尝
系列文章目录 第一章 结构体的介绍和基本使用 🌟 个人主页:古德猫宁- 🌈 信念如阳光,照亮前行的每一步 文章目录 系列文章目录🌈 *信念如阳光,照亮前行的每一步* 前言前面一篇文章主要介绍了结构体的基础…...
WPF不使用AllowsTransparency实现高性能透明背景异形窗体
前言 最近在WPF项目中使用到异形窗体结合Webbroswer组件做web界面的公告展示,当时不想太麻烦引入Cef组件,就想用自带的Webbroswer来做展示,为了美观还做了异形窗体,结果测试就杯具了,自带的Webbroswer在AllowsTransparency=“True” 模式下根本就无法显示,界面一片空白,…...
唯创知音WT2605C语音芯片MP3音频IC:轻松实现指令随机播放与无缝循环播放等功能
在现代化的电子产品中,音频功能的重要性日益凸显。无论是智能家居、玩具、医疗设备还是仪器仪表,富有吸引力的音效与语音提示都能显著提升用户体验。唯创知音WT2605C语音芯片MP3音频IC便是为了满足这一需求而诞生的,它具备指令随机播放、无缝…...
uniapp+微信小程序监听返回事件
代码附在最后 适用场景:uniapp开发微信小程序 需求是我点击列表进入数据信息的详情界面,点击详情界面的收藏,返回上一界面后,更新列表中的收藏情况。 目录 一、使用onUnload监听页面卸载 二、使用getCurrentPages()获取当前页…...
Python函数的高级用法
Python 的函数是“一等公民”,因此函数本身也是一个对象,函数既可用于赋值,也可用作其他函数的参数,还可作为其他函数的返回值。 使用函数变量 Python 的函数也是一种值:所有函数都是 function 对象,这意…...
excel单元格内换行按什么快捷键
如果我们使用excel软件的时候,因为一些日常的操作太过繁琐想要简化自己的操作步骤的话,其实是有很多快捷方式在其中的。那么对excel单元格内换行按什么快捷键这个问题,据小编所知我们可以在表格中使用Alt Enter来进行换行。详细内容就来看下…...
docker容器内部文件挂载主机
docker images执行该命令可以发现一个centos镜像 docker run --namemycentos -itd --privilegedtrue --restartalways -p 88:80 -v C:\Users\Administrator\Desktop\dockerTest:/bin/gh:ro centosdocker run 命令用于在 Docker 上创建和运行容器。 --namemycentos 指定容器…...
python 实现一个简单的计算器
python 实现一个简单的计算器 本文主要整合下tkinter ,实现下简单的计算器. 代码如下: #!/usr/bin/python3 # -*- coding: UTF-8 -*- """Author: zhTime 2023/12/2 下午13:01 .Email:Describe: """ import tkinter as tk# 创建计算器窗口 ro…...
前端对浏览器的理解
浏览器的主要构成 用户界面 - 包括地址栏、后退/前进按钮、书签目录等,也就是你所看到的除了用来显示你所请求页面的主窗口之外的其他部分。 浏览器引擎 - 用来查询及操作渲染引擎的接口。 渲染引擎 - 用来显示请求的内容&#…...
Linux(openssl):X509_verify通过ca证书的public key验证证书的签名
/docs/man3.0/man3/X509_verify.html (openssl.org) 提供了方法用于通过ca证书的public key验证证书的签名 //verify_cert.hpp #include <string> #include <memory> #include <filesystem> #include <openssl/pem.h>using namespace std; namespace …...
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
JSSDK使用步骤 步骤一:绑定安全域名: 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 步骤二:引入JS文件: 在需要调用JS接口的页面引入如下JS文件,(支持https):http://…...
深入了解汉字转拼音转换工具:原理与应用
一、引言 汉字作为世界上最古老、最具象形意的文字之一,承载了数千年的历史文明。然而,在现代信息技术环境下,汉字的输入、输出和检索等方面存在一定的局限性。拼音作为汉字的一种音标表达方式,能够有效地解决这些问题。本文将为…...
沈阳师范大学期末考试复习pta循环数组函数指针经典编程题汇总+代码分析
目录 前言:临近期末,接下来给大家分享一些经典的编程题,方便大家复习。不一定难,但都是入门的好题,尽可能的吃透彻。因为据说期末考试的题很多来自pta上面的原题。 对于一些语言我是用c来写的,不妨碍理解…...
【面试攻略】Oracle中blob和clob的区别及查询修改方法
大家好,我是小米,欢迎来到小米的技术小屋!今天我们要一起来聊聊一个在面试中常常被问到的问题——“Oracle中Blob和Clob有啥区别,在代码中怎么查询和修改这两个类型的字段里的内容?”别急,跟着小米一步步揭…...
An illegal reflective access operation has occurred问题记录
报错 2023-11-30T01:08:18.7440800 [ERROR] [system.err] WARNING: An illegal reflective access operation has occurred 2023-11-30T01:08:18.7450800 [ERROR] [system.err] WARNING: Illegal reflective access by com.intellij.ui.JreHiDpiUtil to method sun.java2d.Sun…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
