(Lazarus 0.9.29)
Описание недоразумения: если динамически создать TCustomGrid или его потомка, потом кликнуть мышью внутри по любой ячейке, а потом попытаться сделать MyGrid.Free из обработчика события OnClose главной формы, то возникает ошибка: Проект вызвал класс исключения... (см. картинку во вложении). После этого среда отображает файл Grids и подсвечивает строчку в методе класса TCustomGrid:
- Код: Выделить всё
function TCustomGrid.ColRowToOffset(IsCol, Relative: Boolean; Index:Integer;
var StartPos, EndPos: Integer): Boolean;
var
Dim: Integer;
begin
Result:=false;
with FGCache do begin
if IsCol then begin
>>> StartPos:=integer(PtrUInt(AccumWidth[index]));
Dim:=GetColWidths(index);
Ошибка возникает, если удалять объект так:
- Код: Выделить всё
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
If Assigned(testGrid) then testGrid.Free;
end;
Но если удалить объект ДО закрытия формы или сделать так:
- Код: Выделить всё
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
If Assigned(testGrid) then
Begin
testGrid.Parent:= Nil;
testGrid.Free;
end;
end;
.. то всё проходит гладко. Вопрос: где-то в компоненте "забыли" проверить статус, что парент удаляется/выгружается (или подобное)? Если кто знает причину - хотелось бы услышать..
P.S. Если это уже широко известная проблема - мои извинения..