我有一個TRichEdit,里面有一些RTF(只有格式化的文本),我想知道TRichEdit的所有內容是否被選中。要做到這一點,我需要:
var AllSelectd: Boolean;
//...
AllSelectd := MyRichEdit.SelLength = MyRichEdit.GetTextLen;
這作業很好,除了當內容有3行或更多。在0...2行時,一切都很好。只要我的TRichEdit達到3行,上面的代碼就不再起作用(MyRichEdit.SelLength < MyRichEdit.GetTextLen)。每一行都是以CRLF(#13#10)結束的。
這是一個錯誤嗎?我怎樣才能可靠地檢查TRichEdit中的所有內容是否被選中呢?
我使用Delphi 10.4,如果它能改變什么的話。
uj5u.com熱心網友回復:
正如在本主題中提到的,Richedit 2.0在內部將CRLF對替換為CR,并在某些情況下檢索LF。
作為解決方法--計算選定范圍內的行數來進行修正(SelText只包含CR,GetTextLen對帶有檢索到的CRLF的文本作業,所以同時計算CR和LF)。使用了Remy Lebeau的建議。
var
sel, getl, crcnt, i: 整數。
tx: string;
begin
sel := RichEdit1.SelLength;
getl := RichEdit1.GetTextLen;
crcnt := SendMessage(Richedit1.Handle, EM_EXLINEFROMCHAR, 0, sel) 。
Memo1.Lines.Add(Format('%d %d', [sel, getl - crcnt 1])。
end。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/316473.html
標籤:
