Ошибка в TStringGrid.onGetEditText?
 Добавлено: 30.12.2009 10:30:54
Добавлено: 30.12.2009 10:30:54Уважаемые форумчане!
Наблюдаю странное поведение приведённого ниже кода:
Если верить руководству по Delphi, при каждом редактировании ячейки счётчик GetCount должен увеличиваться на единицу. Однако, в Лазарусе (9.29 svn 23009)счётчик увеличивается на 1...4, причём четкой системы я найти не смог.
Собственно вопрос: это ошибка в классе, или я по глупости/невнимательности/незнанию что-то не включил/не выключил/в принципе не так делаю?
Суть проблемы в том, что мне нужно перед тем, как пользователь начнет редактировать ячейку, изменить её значение, вернее тот текст, который будет редактироваться. Т.е. скажем, когда пользователь смотрит на ячейку, он видит в ней "6", а захочет редактировать, ему "подсунут" "2+2*2".
Предполагалось, что примерно такой .
 . 
Попытался разобраться, упростил до предела — получил то, с чего начал свой пост.
Заранее благодарен, с уважением, Алексей.
			Наблюдаю странное поведение приведённого ниже кода:
- Код: Выделить всё
- unit Unit1;
 {$mode objfpc}{$H+}
 interface
 uses
 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
 Grids;
 type
 { TForm1 }
 TForm1 = class(TForm)
 StringGrid1: TStringGrid;
 procedure StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
 var Value: string);
 private
 { private declarations }
 public
 { public declarations }
 end;
 var
 Form1: TForm1;
 GetCount:integer=0;
 implementation
 { TForm1 }
 procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
 var Value: string);
 begin
 inc(GetCount);
 Caption:=IntTostr(GetCount)
 end;
 initialization
 {$I unit1.lrs}
 end.
Если верить руководству по Delphi, при каждом редактировании ячейки счётчик GetCount должен увеличиваться на единицу. Однако, в Лазарусе (9.29 svn 23009)счётчик увеличивается на 1...4, причём четкой системы я найти не смог.
Собственно вопрос: это ошибка в классе, или я по глупости/невнимательности/незнанию что-то не включил/не выключил/в принципе не так делаю?
Суть проблемы в том, что мне нужно перед тем, как пользователь начнет редактировать ячейку, изменить её значение, вернее тот текст, который будет редактироваться. Т.е. скажем, когда пользователь смотрит на ячейку, он видит в ней "6", а захочет редактировать, ему "подсунут" "2+2*2".
Предполагалось, что примерно такой
- Код: Выделить всё
- procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
 var Value: string);
 begin
 if Formulas[ACol, ARow]<>'' then Value:=Formulas[ACol, ARow]
 end;
 procedure TForm1.StringGrid1ValidateEntry(sender: TObject; aCol, aRow: Integer;
 const OldValue: string; var NewValue: String);
 begin
 if <NewValue - допустимое> then begin
 if NewValue<>'' then begin
 if NewValue[1]='=' then Formulas[aCol, aRow]:=NewValue else Formulas[aCol, aRow]:=''
 end else Formulas[aCol, aRow]:=''
 end else NewValue:=OldValue
 end;
 .
 . Попытался разобраться, упростил до предела — получил то, с чего начал свой пост.
Заранее благодарен, с уважением, Алексей.