Delphi7:使用删除程序后格式发生变化
Delphi 7: Formatting changes after using delete procedure
我正在开发我的文本编辑器,我已经完成了,但我仍然有一个问题正在努力解决。
我的问题是,我想删除行尾的特定符号,这些符号是通过按下速度按钮(按下按钮)创建的。因此,当我再次单击按钮(按钮弹起)时,我想删除它们,这有效,但我遇到了文本格式问题。
通过 属性 RichEdit1.SelAttributes
.
格式化文本
如果我在 RichEdit 中更改第一个字符的格式,然后使用此功能,整个文本将更改为与此字符相同的格式。
你可以在这里看到:
如果我更改了文本某处的字符格式,然后使用此函数,格式化的字符会变回以前的格式。
你可以在这里看到:
if (Button.Down=false) and (length(RichEdit1.Text)<>0) then begin
for i:=0 to length(RichEdit1.text) do begin
if RichEdit1.Text[i] = '¶' then begin
txt:=RichEdit1.text;
delete(txt, i, 1);
RichEdit1.Text:=txt;
end;
end;
RichEdit1.SelStart:=length(RichEdit1.Text);
我想过,这个问题可能出在变量 txt
上,但如果我删除删除程序,格式化工作正常,所以问题应该在那里。
这项工作已经完成,所以我不想对代码做任何更改,我只是想知道为什么会发生这种情况以及可能的解决方案。
您提取整个文本,使用 Text
属性,修改该字符串,然后替换整个文本。当您这样做时,所有新文本都会被赋予 selected 格式属性。
您只需要 select 您希望删除的文本,然后将其删除,所有这些都在丰富的编辑控件中。这样可以避免丢失任何特定的本地格式。以这种方式进行。
RichEdit1.SelStart := i;
RichEdit1.SelLength := 1;
RichEdit1.ClearSelection;
请注意 RichEdit1.Text[i]
非常昂贵。该代码提取丰富的编辑控件的全部内容,然后挑选出一个字符。使用 SelStart
和 SelLength
和 SelText
提取子字符串效率更高。
有效的字符串索引为 1
到 Length(s)
(含)。您索引超出该范围。
同样值得注意的是,当您在删除字符的文本中移动时,您会更改文本的长度。因此很容易访问超出文本末尾的部分。正如您当前的代码所做的那样。编译器范围检查选项会在您的代码中发现该错误。
我正在开发我的文本编辑器,我已经完成了,但我仍然有一个问题正在努力解决。
我的问题是,我想删除行尾的特定符号,这些符号是通过按下速度按钮(按下按钮)创建的。因此,当我再次单击按钮(按钮弹起)时,我想删除它们,这有效,但我遇到了文本格式问题。
通过 属性 RichEdit1.SelAttributes
.
如果我在 RichEdit 中更改第一个字符的格式,然后使用此功能,整个文本将更改为与此字符相同的格式。
你可以在这里看到:
如果我更改了文本某处的字符格式,然后使用此函数,格式化的字符会变回以前的格式。
你可以在这里看到:
if (Button.Down=false) and (length(RichEdit1.Text)<>0) then begin
for i:=0 to length(RichEdit1.text) do begin
if RichEdit1.Text[i] = '¶' then begin
txt:=RichEdit1.text;
delete(txt, i, 1);
RichEdit1.Text:=txt;
end;
end;
RichEdit1.SelStart:=length(RichEdit1.Text);
我想过,这个问题可能出在变量 txt
上,但如果我删除删除程序,格式化工作正常,所以问题应该在那里。
这项工作已经完成,所以我不想对代码做任何更改,我只是想知道为什么会发生这种情况以及可能的解决方案。
您提取整个文本,使用 Text
属性,修改该字符串,然后替换整个文本。当您这样做时,所有新文本都会被赋予 selected 格式属性。
您只需要 select 您希望删除的文本,然后将其删除,所有这些都在丰富的编辑控件中。这样可以避免丢失任何特定的本地格式。以这种方式进行。
RichEdit1.SelStart := i;
RichEdit1.SelLength := 1;
RichEdit1.ClearSelection;
请注意 RichEdit1.Text[i]
非常昂贵。该代码提取丰富的编辑控件的全部内容,然后挑选出一个字符。使用 SelStart
和 SelLength
和 SelText
提取子字符串效率更高。
有效的字符串索引为 1
到 Length(s)
(含)。您索引超出该范围。
同样值得注意的是,当您在删除字符的文本中移动时,您会更改文本的长度。因此很容易访问超出文本末尾的部分。正如您当前的代码所做的那样。编译器范围检查选项会在您的代码中发现该错误。