2

(如果您能更好地理解和定义我的问题,请编辑标题。)

我遇到的问题是 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没有任何关系,更何况我没有RichEdit.SelAttributes.Style为REMain改变任何地方,除了我展示的一个地方,有同一个单元中的另一个 RichEdit,我确实改变了它的线条样式,但这不可能以任何方式相关......可以吗?(不,它没有,我刚刚检查过。)

基本上:德尔福到底是什么?没有比这更简单的了,我仍然失败了,有人可以解释和/或解决这个问题吗?问问题,如果有不清楚的地方,我会尽可能详细地说明。

4

2 回答 2

6

要将格式应用于新添加的行,请使用以下命令:

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;
于 2012-05-18T00:43:07.777 回答
0

这对我有用:

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;

但是由于我不知道更好,请批评并建议我如何做得更好。

于 2012-05-18T08:34:03.993 回答