一、如何得知目前行號
用RichEdit(或memo)控制項製作文字編輯器時,透過存取lines??count屬性可以得到總行數,但是若想知道遊標目前所在行的行號就麻煩了,因為delphi沒有提供這個屬性。要實現這個編輯器必備功能,就必須呼叫em_ LineFromChar。請試試下面的程式。
先在視窗中佈置一個RichEdit或memo(命名為editor),以及一個button。在button的onclick事件中寫入下列程式碼。
var
CurrentLine:Integer;
begin
CurrentLine:=Editor??Perform(em_ LineFromChar,SFFFF,0);
application??MessageBox(PChar(′目前行號是′+IntToStr(CurrentLine)),′訊息′,mb_ iconinformation);
end;
需要注意的是,第一行的行號為零。
二、如何撤銷操作(undo)
對memo來說,實作undo是不需要編程的,只要讓popupmenu屬性為空,運行時就能用滑鼠右鍵啟動一個常用操作選單,其中包括撤銷、剪下、複製、貼上、刪除和全選六項。
但可惜的是,這招對於功能強大的RichEdit控制項居然行不通,害得我們還要自己設計一個popupmemu。當你用CutToClipBoard等語句輕鬆而順利地完成了「剪切」等功能,接著便會無奈地發現,竟找不到undo或cancel之類的語句來執行「撤銷」。
這時你需要這樣處理:
RichEdit1??Perform(EM_UNDO,0,0);
另外也應檢查是否允許撤銷,從而開啟或關閉彈出式選單中的「撤銷」項目:
Undo1??Enabled:=RichEdit??Perform(EM_CANUNDO,0,0)<>0;
以上程序在Delphi3中調試通過