http://blog.sina.com.cn/game7788
夸父
何为覆盖模式?
当我们在编辑文档或者写代码时,经常会按到电脑上的insert按键来改变输入模式,正常情况下我们都是用的insert模式,当改变成overwrite模式下,会发现我们输入字符后不再自动退格,而是直接覆盖前面文字,按回车也不会自动增加新行!richview本身并没有支持overwrite模式,下面代码通过健盘的输入事件简单的实现这个功能。
var rve: TCustomRichViewEdit;
ItemNo, Offs: Integer;
begin
if IgnoreNextChar then begin //全局变量,判断当前item是否为空
IgnoreNextChar := False;//如果是就退出
exit;
end;
IgnoreNextChar := False;
if not ((Key=#9) or (Key>=' ')) then 只处理数字健和字母健,如果为状态健也退出
exit;
rve := RichViewEdit1.TopLevelEditor;
if rve.SelectionExists then
exit;
ItemNo := rve.CurItemNo;
Offs := rve.OffsetInCurItem;//得到当前光标所在位置
if (Offs>=rve.GetOffsAfterItem(ItemNo)) then begin //判断光标是否在最后面,则直接绘制
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); 选中当前光标到光标前一位,输入后实现覆盖
rve.Invalidate;
end;
|