OnSetText: Value is empty if user presses ESC

I have a virtual grid, which uses OnGetText/OnSetText to fetch/store the cell values in an external data structure.

The problem is that if the user presses ESC (to "undo" the text entered) the OnSetText eventhandler is called with Value set to an empty string. This means, that instead of cancelling the text edit, the text value is set to an empty string. What it the correct way to do this?
Please see sample below, where I have used an simple string array for the case of the example.


type
  TForm1 = class(TForm)
    AdvColumnGrid1: TAdvColumnGrid;
    procedure FormCreate(Sender: TObject);
    procedure AdvColumnGrid1GetDisplText(Sender: TObject; ACol, ARow: Integer; var
        Value: string);
    procedure AdvColumnGrid1GetEditText(Sender: TObject; ACol, ARow: Integer; var
        Value: string);
    procedure AdvColumnGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const
        Value: string);
  private
    { Private declarations }
    FArray : array[0..10,0..10] of string;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  c,r : integer;
begin
  for c:=0 to Length(FArray)-1 do
    for r:=0 to Length(FArray[c])-1 do
      FArray[c,r] := Format('Cell %d,%d', [c,r]);
end;

procedure TForm1.AdvColumnGrid1GetDisplText(Sender: TObject; ACol, ARow:
    Integer; var Value: string);
begin
  Value := FArray[ACol,ARow];
end;

procedure TForm1.AdvColumnGrid1GetEditText(Sender: TObject; ACol, ARow:
    Integer; var Value: string);
begin
  Value := FArray[ACol,ARow];
end;

procedure TForm1.AdvColumnGrid1SetEditText(Sender: TObject; ACol, ARow:
    Integer; const Value: string);
begin
  FArray[ACol,ARow] := Value; // If the user cancels the inplace-editing xxSetEditText is
                              // called with Value = '' 
end;



Please use OnCellValidate to get the edited value:



procedure TForm5.AdvColumnGrid1CellValidate(Sender: TObject; ACol,
  ARow: Integer; var Value: string; var Valid: Boolean);
begin
  FArray[ACol,ARow] := Value;
end;

procedure TForm5.AdvColumnGrid1GetDisplText(Sender: TObject; ACol,
  ARow: Integer; var Value: string);
begin
  Value := FArray[ACol,ARow];
end;

procedure TForm5.AdvColumnGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
  var Value: string);
begin
  Value := FArray[ACol,ARow];
end;

procedure TForm5.FormCreate(Sender: TObject);
var
  c,r : integer;
begin
  for c:=0 to Length(FArray)-1 do
    for r:=0 to Length(FArray[c])-1 do
      FArray[c,r] := Format('Cell %d,%d', [c,r]);
end;

Thanks a lot