(如果你能更好地理解和定义我的问题,有人编辑标题。
我遇到的问题是 RichEdit 的样式格式"恢复"回默认的"无"(即[]
(,然后回到我设置的任何内容,例如粗体或斜体。
有问题的事情 - 我假设,因为我不知道它是如何破坏事情的 - 是一个过程(REMainLinesCheck(,它检查 RichEdit 中的行数并删除第一个,直到达到某个点(一次最多显示 14 行(,如下所示:
while REMain.Lines.Count > 14 do
REMain.Lines.Delete(0);
在其他向 RichEdit 添加行的过程中,我有 6 次出现上述过程,但没有一个改变RichEdit.SelAttributes.Style
,只有一个,它只添加一个粗体行,如下所示:
REMain.SelAttributes.Style := [fsBold];
REMain.Lines.Add('something');
REMainLinesCheck;
所以我删除了除那一个之外的所有出现并开始四处闲逛,没过多久就看到它实际上工作得很好,正常添加的规则和粗体行和删除的多余行 - 没有问题。但是一旦我将 REMainLinesCheck 过程重新引入另一个过程(为了清楚起见,我们称之为 Proc3Lines,因为它就是这样做的:添加 3 行,然后调用检查多余的行(,遵循此 Proc3Lines 的每一行都应该是粗体不是......从我在这里的经验来看,REMainLinesCheck似乎在Proc3Lines中做了一些事情,因为没有它一切都很好。
显然,这不是一个相互调用的过程圈,但是代码的其他部分与此RichEdit无关,更不用说除了我展示的一个地方之外,我没有为REMain更改RichEdit.SelAttributes.Style
任何地方,在同一个单元中还有另一个RichEdit,我确实像那样更改了其行的样式, 但这不可能以任何方式相关...可以吗?(不,它没有,我只是检查过。
基本上:德尔菲到底是什么?它没有比这更简单的了,我仍然设法失败,有人可以解释和/或解决这个问题吗?提出问题,如果不清楚,我会尽可能多地详细说明。
若要将格式应用于新添加的行,请使用以下命令:
procedure TForm1.Button1Click(Sender: TObject);
var
LineIndex: Integer;
begin
LineIndex := RichEdit1.Lines.Add('Something');
RichEdit1.SelStart := RichEdit1.Perform(EM_LINEINDEX, LineIndex, 0);
RichEdit1.SelLength := RichEdit1.Perform(EM_LINELENGTH, RichEdit1.SelStart, 0);
RichEdit1.SelAttributes.Style := [fsBold];
end;
我有用:
procedure TformStart.Proc;
var
endtxtpos: integer;
begin
endtxtpos := Length(REMain.Text);
REMain.Lines.Add('something');
REMain.SelStart := endtxtpos-(REMain.Lines.Count-1);
REMain.SelLength := Length('something');
REMain.SelAttributes.Style := [fsBold];
end;
但是,由于我不知道更好,请批评并建议我如何做得更好。