DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jeff1314
今日帖子: 14
在线用户: 15
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 chencong5025 (Nicosoft) ▲▲▲△△ -
普通会员
2024/3/18 13:41:52
标题:
关于RichEdit设置字体颜色一点测试 浏览:498
加入我的收藏
楼主: 代码:
Procedure TForm1.LogtoEdit(Data: String; Headcol: TColor);
Begin
  TThread.Synchronize(nil,
    Procedure
    Begin
      Var Pos := Length(RichEdit1.Text)-1;
      Var Head := Now.ToString+'-->';
      Var Msg := Data;
      RichEdit1.Lines.Add(Head + Msg);

      RichEdit1.SelStart := Pos;
      Richedit1.SelLength := Head.Length;
      Richedit1.SelAttributes.Color := Headcol;

      Pos:= Pos+Head.Length;
      RichEdit1.SelStart := Pos;
      Richedit1.SelLength := Msg.Length;
      Richedit1.SelAttributes.Color := clBlack;
    End);
End;

Procedure TForm1.Button3Click(Sender: TObject);
Begin
    LogtoEdit('第一次',clred);
    LogtoEdit('第二次',clGreen);
    LogtoEdit('第三次',clred);
End;

想实现的是  

日期-->内容  每一行这样的形势  然后颜色定义的是 日期--> 这一部分的颜色。
此帖子包含附件:
PNG 图像
大小:203.3K
----------------------------------------------
-
作者:
男 chencong5025 (Nicosoft) ▲▲▲△△ -
普通会员
2024/3/18 13:43:29
1楼: 该如何实现  希望大家 帮个忙
----------------------------------------------
-
作者:
男 chencong5025 (Nicosoft) ▲▲▲△△ -
普通会员
2024/3/18 14:52:57
2楼: 已经通过GPT4解决。GPT比3.5 强了很多。

下面贴一些代码

代码1 (有效一次过)
procedure TForm1.LogToEdit(Data: String; HeadCol: TColor);
var
  TimeStamp: string;
begin
  // 获取当前时间戳
  TimeStamp := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);

  // 确保我们是在主线程中更新UI
  if RichEdit1.HandleAllocated then
  begin
    // 将RichEdit的光标移动到最后
    RichEdit1.SelStart := Length(RichEdit1.Text);
    RichEdit1.SelLength := 0;

    // 插入时间戳并设置颜色
    RichEdit1.SelAttributes.Color := HeadCol;
    RichEdit1.SelText := TimeStamp + ' --> ';

    // 插入数据并使用默认颜色
    RichEdit1.SelAttributes.Color := clWindowText; // 或者其他你想用的颜色
    RichEdit1.SelText := Data + sLineBreak;

    // 滚动到最新的日志位置
    SendMessage(RichEdit1.Handle, EM_SCROLLCARET, 0, 0);
  end;
end;

追问
RichEdit1.SelText 这个命令会不会导致遍历所有Text。如果Edit内的字符串很多 会不会有效率问题

第二次代码 (有效通过)
procedure TForm1.LogToEdit(Data: String; HeadCol: TColor);
var
  TimeStamp: string;
begin
  // 获取当前时间戳
  TimeStamp := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);

  // 关闭更新以避免重绘
  SendMessage(RichEdit1.Handle, WM_SETREDRAW, WPARAM(False), 0);

  try
    // 将RichEdit的光标移动到最后
    RichEdit1.SelStart := Length(RichEdit1.Text);
    RichEdit1.SelLength := 0;

    // 插入时间戳并设置颜色
    RichEdit1.SelAttributes.Color := HeadCol;
    RichEdit1.SelText := TimeStamp + ' --> ';

    // 插入数据并使用默认颜色
    RichEdit1.SelAttributes.Color := clWindowText; // 或者其他你想用的颜色
    RichEdit1.SelText := Data + sLineBreak;

  finally
    // 重新打开更新
    SendMessage(RichEdit1.Handle, WM_SETREDRAW, WPARAM(True), 0);

    // 强制控件重绘
    RedrawWindow(RichEdit1.Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
  end;

  // 滚动到最新的日志位置
  SendMessage(RichEdit1.Handle, EM_SCROLLCARET, 0, 0);
end;
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2024/3/18 16:42:22
3楼: 哪里可以使用chatgpt4?我想知道unimemo怎么改变某一行的颜色。
----------------------------------------------
-
作者:
男 xiaomajia52 (sun小马) ▲▲▲△△ -
普通会员
2024/3/18 17:15:47
4楼: @sxqwhxq www.openai.com 这里注册充值后使用
----------------------------------------------
-
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2024/3/18 21:16:10
5楼: 打不开网页,打开了也不知道怎么充值
----------------------------------------------
-
作者:
男 chencong5025 (Nicosoft) ▲▲▲△△ -
普通会员
2024/3/19 13:01:13
6楼: @sxqwhxq

需要科学上网
----------------------------------------------
-
作者:
男 wufan314 (真的吗) ★☆☆☆☆ -
普通会员
2024/3/23 3:40:41
7楼: 是类似这种吗?
此帖子包含附件:
PNG 图像
大小:40.6K
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行140.625毫秒 RSS