Page 1 of 1

[How to] How to switch Insert/Overtype mode

Posted: Mon Sep 26, 2005 4:53 pm
by Sergey Tkachenko
The overwrite mode is not supported directly, but you can implement it using events.
The code is below.

Code: Select all

var IgnoreNextChar: Boolean = False;

procedure TForm1.RichViewEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IgnoreNextChar := RichViewEdit1.SelectionExists;
end;

procedure TForm1.RichViewEdit1KeyPress(Sender: TObject; var Key: Char);
var rve: TCustomRichViewEdit;
    ItemNo, Offs: Integer;
begin
  if IgnoreNextChar then begin
    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<rve.ItemCount) and
       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;

Posted: Thu Jul 19, 2007 7:20 pm
by Sergey Tkachenko
Demo: http://www.trichview.com/support/files/ins.zip

Includes this code + switching modes when user pressed the Insert key.