http://blog.sina.com.cn/game7788
夸父
何為覆蓋模式?
當(dāng)我們在編輯文檔或者寫代碼時,經(jīng)常會按到電腦上的insert按鍵來改變輸入模式,正常情況下我們都是用的insert模式,當(dāng)改變成overwrite模式下,會發(fā)現(xiàn)我們輸入字符后不再自動退格,而是直接覆蓋前面文字,按回車也不會自動增加新行!richview本身并沒有支持overwrite模式,下面代碼通過健盤的輸入事件簡單的實現(xiàn)這個功能。
var rve: TCustomRichViewEdit;
ItemNo, Offs: Integer;
begin
if IgnoreNextChar then begin //全局變量,判斷當(dāng)前item是否為空
IgnoreNextChar := False;//如果是就退出
exit;
end;
IgnoreNextChar := False;
if not ((Key=#9) or (Key>=' ')) then 只處理數(shù)字健和字母健,如果為狀態(tài)健也退出
exit;
rve := RichViewEdit1.TopLevelEditor;
if rve.SelectionExists then
exit;
ItemNo := rve.CurItemNo;
Offs := rve.OffsetInCurItem;//得到當(dāng)前光標(biāo)所在位置
if (Offs>=rve.GetOffsAfterItem(ItemNo)) then begin //判斷光標(biāo)是否在最后面,則直接繪制
if (ItemNo+1
not rve.IsFromNewLine(ItemNo+1) then begin
inc(ItemNo);
Offs := rve.GetOffsBeforeItem(ItemNo);
end
else
exit;
end;
rve.SetSelectionBounds(ItemNo, Offs, ItemNo, Offs+1); 選中當(dāng)前光標(biāo)到光標(biāo)前一位,輸入后實現(xiàn)覆蓋
rve.Invalidate;
end;
|