(如果您能更好地理解和定义我的问题,请编辑标题。)
我遇到的问题是,RichEdit的样式格式“还原”回默认的"nothing“(也就是[] ),然后又回到我设置的任何值,例如粗体或斜体。
错误的地方-我假设,因为我不知道它是如何破坏东西的-是一个过程(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 anywhere更改为REMain,除了我已经显示的一个地方,在同一单元中有另一个RichEdit,我确实像那样更改了它的行的样式,但这不可能以任何方式相关……可能吗?(不,我刚刚检查过了。)
基本上:见鬼的Delphi是什么?没有比这更简单的了,我仍然在设法失败,有人能解释和/或修复这个问题吗?提出问题,如果有什么不清楚的地方,我会尽可能详细地说明。
发布于 2012-05-18 08:43:08
要将格式应用于新添加的行,请使用以下命令:
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-18 16:34:04
这对我很有效:
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;但由于我不知道更好的方法,请批评并建议我如何做得更好。
https://stackoverflow.com/questions/10645033
复制相似问题