http://blog.sina.com.cn/game7788
夸父
何為覆蓋模式?
當(dāng)我們?cè)诰庉嬑臋n或者寫(xiě)代碼時(shí),經(jīng)常會(huì)按到電腦上的insert按鍵來(lái)改變輸入模式,正常情況下我們都是用的insert模式,當(dāng)改變成overwrite模式下,會(huì)發(fā)現(xiàn)我們輸入字符后不再自動(dòng)退格,而是直接覆蓋前面文字,按回車也不會(huì)自動(dòng)增加新行!richview本身并沒(méi)有支持overwrite模式,下面代碼通過(guò)健盤(pán)的輸入事件簡(jiǎn)單的實(shí)現(xiàn)這個(gè)功能。
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)前一位,輸入后實(shí)現(xiàn)覆蓋
rve.Invalidate;
end;
|