天天看點

Linux編輯備忘錄檔案memo,如何在備忘錄中編輯文本?

您正在試圖調用System.Delete(),這需要一個參照string變量作為輸入。但TMemo.Text是屬性(使用getter方法),它不是變量。這就是為什麼你得到“不能作為var參數傳遞”的錯誤。

您可以使用一個臨時變量,例如:

var

s: string;

s := Memo.Text;

Delete(s, index, count);

Memo.Text := s;

但是,這是一般的效率非常低,因為它使記憶體中的備注的目前内容的完整拷貝,然後修改/重新配置設定然後将其重新配置設定給備忘錄,完全清除目前内容并解析新内容。對于小的變化,這是很多工作。

更快,更高效的選擇是使用備忘錄的SelStart/SelLength和SelText屬性,而不是,如:

Memo.SelStart := index;

Memo.SelLength := count;

Memo.SelText := '';

插入新的文本時,你可以這樣做,隻是設定SelLength以0代替,如:

Memo.SelStart := index;

Memo.SelLength := 0;

Memo.SelText := 'text to insert';

使用這些屬性可能會“不舒服”,但從記憶體和性能角度來看,它确實是一個不錯的選擇。在内部,他們隻需将Win32 EM_(GET|SET|REPLACE)SEL消息直接發送到備忘錄視窗,讓作業系統處理實際的文本管理。

如果你真的想最有效的方式,直接使用Win32消息,例如:

//delete

Memo.Perform(EM_SETSEL, index, index+count);

Memo.Perform(EM_REPLACESEL, 0, LPARAM(PChar('')));

//insert

Memo.Perform(EM_SETSEL, index, index);

Memo.Perform(EM_REPLACESEL, 0, LPARAM(PChar('text to insert')));