anchor.diff:  
     *)
   
  +  TmOnCellEditorShowEditorEvent = function (const aCol, aRow : integer; var aNewValue : string) : boolean of object;
  +  TmOnCellEditorShowWizardEvent = function (const aCol, aRow : integer; var aNewValue : string) : boolean of object;
  +
     { TmExtStringCellEditor }
   
     TmExtStringCellEditor = class (TStringCellEditor)
     strict private
       FParentGrid : TCustomStringGrid;
  -    FOnKeyPressEvent : TOnSelectEvent;
  -    FDefaultEditKey : Word;
  +    FOnShowEditorEvent : TmOnCellEditorShowEditorEvent;
  +    FOnShowWizardEvent : TmOnCellEditorShowWizardEvent;
  +    FDefaultShowEditorKey : Word;
  +    FDefaultShowWizardKey : Word;
       FDefaultClearKey : Word;
       FAllowDeleteWhenReadOnly : boolean;
     protected
       procedure KeyDown(var Key : Word; Shift : TShiftState); override;
  +    procedure DblClick; override;
     public
       constructor Create(Aowner : TComponent); override;
   
       property ParentGrid : TCustomStringGrid read FParentGrid write FParentGrid;
  -    property OnKeyPressEvent : TOnSelectEvent read FOnKeyPressEvent write FOnKeyPressEvent;
  -    property DefaultEditKey : Word read FDefaultEditKey write FDefaultEditKey;
  +
  +    property OnShowEditorEvent : TmOnCellEditorShowEditorEvent read FOnShowEditorEvent write FOnShowEditorEvent;
  +    property OnShowWizardEvent : TmOnCellEditorShowWizardEvent read FOnShowWizardEvent write FOnShowWizardEvent;
  +    property DefaultShowEditorKey : Word read FDefaultShowEditorKey write FDefaultShowEditorKey;
       property DefaultClearKey : Word read FDefaultClearKey write FDefaultClearKey;
  +    property DefaultShowWizardKey : Word read FDefaultShowWizardKey write FDefaultShowWizardKey;
       property AllowDeleteWhenReadOnly : boolean read FAllowDeleteWhenReadOnly write FAllowDeleteWhenReadOnly;
     end;
  +
  +(*  TmExtButtonCellEditor = class (TECEditBtn)
  +  strict private
  +    FParentGrid : TCustomStringGrid;
  +    FOnKeyPressEvent : TOnSelectEvent;
  +  public
  +    property ParentGrid : TCustomStringGrid read FParentGrid write FParentGrid;
  +    property OnKeyPressEvent : TOnSelectEvent read FOnKeyPressEvent write FOnKeyPressEvent;
  +  end;*)
   
   implementation
   
   { TmExtStringCellEditor }
   
   procedure TmExtStringCellEditor.KeyDown(var Key: Word; Shift: TShiftState);
  +var
  +  newValue : string;
   begin
     inherited KeyDown(Key, Shift);
  -  if Key = FDefaultEditKey then
  +  if Key = FDefaultShowEditorKey then
     begin
  -    if Assigned(FOnKeyPressEvent) then
  -      FOnKeyPressEvent(Self, FParentGrid.Col, FParentGrid.Row);
  -    Self.Text := FParentGrid.Cells[FParentGrid.Col, FParentGrid.Row];
  +    if Assigned(FOnShowEditorEvent) then
  +    begin
  +      if FOnShowEditorEvent(FParentGrid.Col, FParentGrid.Row, newValue) then
  +        Self.Text := newValue; //FParentGrid.Cells[FParentGrid.Col, FParentGrid.Row];
  +    end;
  +  end
  +  else
  +  if Key = FDefaultShowWizardKey then
  +  begin
  +    if Assigned(FOnShowWizardEvent) then
  +    begin
  +      if FOnShowWizardEvent(FParentGrid.Col, FParentGrid.Row, newValue) then
  +        Self.Text := newValue;
  +    end;
     end
     else
     if FAllowDeleteWhenReadOnly and (Self.ReadOnly) and (Key = FDefaultClearKey) then
  
positive.code: 
  unit mGridEditors;
  
  {$mode objfpc}
  {$H+}
  
  interface
  
  uses
    Classes, Grids,
    LCLType;
  
  type
    (*
  
negative.code:   end;
  end;
  
  procedure TmExtStringCellEditor.DblClick;
  var
    newValue : string;
  begin
    inherited DblClick;
    if Assigned(FOnShowEditorEvent) then
    begin
      if FOnShowEditorEvent(FParentGrid.Col, FParentGrid.Row, newValue) then
        Self.Text := newValue; //FParentGrid.Cells[FParentGrid.Col, FParentGrid.Row];
    end;
  end;
  
  constructor TmExtStringCellEditor.Create(Aowner: TComponent);
  begin
    inherited Create(Aowner);
    FDefaultShowEditorKey:= VK_RETURN;
    FDefaultShowWizardKey:= VK_F1;
    FDefaultClearKey:= VK_DELETE;
    FAllowDeleteWhenReadOnly:= true;
  end;
  