我正在編寫我的文本編輯器,我已完成,但我仍然有這個問題,我正試圖解決。德爾福7:使用刪除程序後的格式更改
我的問題是,我想刪除行的末尾的特定符號,這是通過按speedbutton(按鈕是關閉)創建的。所以,當我再次點擊按鈕(按鈕是),我想刪除它們,這是可行的,但我有問題的文本格式。
文本通過屬性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
,但如果我拿走刪除程序,格式化工作正常,那麼問題應該在那裏。
這項工作已經完成,所以我不想在代碼中做任何改變,我只想知道爲什麼會發生這種情況以及可能的解決方案。
關於範圍檢查的問題,發佈的代碼肯定不會按原樣運行,因爲它在i = 0時嘗試訪問RichEdit1.Text [i],遠在代碼到達字符串末尾之前修改或以其他方式.. – Deltics
@Deltics爲什麼不能運行?越界訪問並不總是一個運行時間錯誤 –
現在你已經更新了答案,問題不太明顯。以前有人認爲這個問題有可能超過了字符串的長度,並且範圍檢查會檢測到這個問題。但使用範圍檢查啓用時,第一個問題將是嘗試訪問第[0]個元素。我現在看到你已經澄清了最小索引= 1的問題。所以一切都很好。 – Deltics