gpt4 book ai didi

delphi - TRichEdit颜色问题

转载 作者:行者123 更新时间:2023-12-03 18:25:08 34 4
gpt4 key购买 nike

ans:= RichEdit1.Text     
for i:=1 to Length(ans) do
begin
RichEdit1.SelStart := i-1;
RichEdit1.SelLength:= 1;
if ans[i] = correct[i] then
RichEdit1.SelAttributes.Color := clRed
else
RichEdit1.SelAttributes.Color := clBlue;


如果 ans中的字母与与 correct字符串中的字母在相同位置的字母匹配,则将其涂成红色,否则将其涂成蓝色。

我的问题是,当我再次键入时,整个RichEdit1文本的颜色与第一个字母相同(如果 RichEdit1的第一个字母为蓝色,则整个文本变为蓝色)。

顺便说一下,这不是我刚刚简化的实际代码,因为有多个TRichEdits。
TRichEdits是只读的,我用 RichEdit1.Text := RichEdit1.Text+Key;之类的字母来分配字母
(这样做是因为它是一个多键盘程序,我需要分开用户输入)

这是正确的行为吗?如何阻止我的颜色更改覆盖默认颜色?


更新:解决了...草率的方式(每当有人键入内容时应用默认颜色),但我保持开放状态,以防有人提出更好的解决方案。

最佳答案

如您所知,完成后必须重置默认颜色,例如:

ans := RichEdit1.Text;
for i := 1 to Length(ans) do
begin
RichEdit1.SelStart := i-1;
RichEdit1.SelLength := 1;
if ans[i] = correct[i] then
RichEdit1.SelAttributes.Color := clRed
else
RichEdit1.SelAttributes.Color := clBlue;
end;
RichEdit1.SelStart := RichEdit1.GetTextLen;
RichEdit1.SelLength := 0;
RichEdit1.SelAttributes.Color := RichEdit1.Font.Color;


有比每次给一个字母上色更有效的方法,例如:

const
colors: array[Boolean] of TColor = (clRed, clBlue);
var
ans: string;
start, len: Integer;
cur_state: Boolean;

procedure ColorRange(AStart, ALength: Integer; AColor: TColor);
begin
RichEdit1.SelStart := AStart;
RichEdit1.SelLength := ALength;
RichEdit1.SelAttributes.Color := AColor;
end;

begin
RichEdit1.Lines.BeginUpdate;
try
ans := RichEdit1.Text;
start := 0;
len := 0;
cur_start := False;

for i := 1 to Length(ans) do
begin
if (ans[i] = correct[i]) = cur_state then
Inc(len)
else begin
if len > 0 then
ColorRange(start, len, colors[cur_state]);
start := i-1;
len := 1;
cur_state := not cur_state;
end;
end;
if len > 0 then
ColorRange(start, len, colors[cur_state]);
ColorRange(RichEdit1.GetTextLen, 0, RichEdit1.Font.Color);
finally
RichEdit1.Lines.EndUpdate;
end;
end;


另外,使用Text属性附加单个Char效率很低。请改用SelText属性,例如:

RichEdit1.SelStart := RichEdit1.GetTextLen;
RichEdit1.SelLength := 0;
RichEdit1.SelAttributes.Color := ...; // optional
RichEdit1.SelText := Key;

关于delphi - TRichEdit颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765982/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com