Наблюдаю странное поведение приведённого ниже кода:
- Код: Выделить всё
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;
Попытался разобраться, упростил до предела — получил то, с чего начал свой пост.
Заранее благодарен, с уважением, Алексей.