Richedit样式格式自行更改

时间:2012-05-17 23:55:13

标签: delphi styles richedit

(如果你能更好地理解和定义我的问题,有人会编辑标题。)

我遇到的问题是RichEdit的样式格式化“恢复”回默认的“无”又名[],然后回到我设置的任何内容,例如粗体或斜体。

有问题的东西 - 我认为,因为我不知道它是如何破坏的 - 是一个程序(REMainLinesCheck),它检查RichEdit中的行数并删除第一个直到达到某个点(最多显示14行),如下所示:

while REMain.Lines.Count > 14 do
  REMain.Lines.Delete(0); 

我在RichEdit中添加行的其他过程中有6次出现上述过程,但是没有一行更改RichEdit.SelAttributes.Style但只有一行,只添加了一条Bold行:

REMain.SelAttributes.Style := [fsBold];
REMain.Lines.Add('something');
REMainLinesCheck;

所以我已经删除了除了那个之外的所有事件,并且开始四处寻找,没过多久就看到它正常工作正常,常规和粗体线正常添加和多余的行被删除 - 没有问题。但是,只要我将REMainLinesCheck程序重新引入另一个程序(为了清楚起见,我们称之为Proc3Lines,因为它的作用是:添加3行,然后调用多余的行检查),此Proc3Lines之后的每一行都应该是Bold不是......从我在这里经历的看来,似乎REMainLinesCheck在Proc3Lines中做了一些事情,因为没有它,一切都很好。

显然,这不是一个相互调用的程序圈,但代码的其他部分与此RichEdit无关,更不用说我不会在任何地方更改RichEdit.SelAttributes.Style除了一个我已经展示过的地方,在同一个单元中有另一个RichEdit,我确实改变了它的线条样式,但这不可能以任何方式相关......是吗? (不,它没有,我只是检查过。)

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;

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