Нужно ли делать ObjectName.Free при закрытии формы?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Нужно ли делать ObjectName.Free при закрытии формы?

Сообщение GAMER » 07.10.2010 11:36:16

При создании формы делается SG1 := TStringGrid.Create(nil);
Нужно ли делать в FormClose - SG1.Free;? Или оно само грохнется при закрытии формы?

В описании:
Код: Выделить всё
   ...........
   private
    { private declarations }
    SG1: TStringGrid;   
  ............


В FormClose записано:
Код: Выделить всё
  CloseAction := caFree; 


Вопрос возник в связи с AV, когда с данной формы открываются еще формы.
Когда есть SG1.Free; возникает AV здесь:
Код: Выделить всё
procedure TApplication.DoIdleActions;
var
  i: Integer;
  CurForm: TCustomForm;
  AForm: TForm;
begin
  i := 0;
  while i < Screen.CustomFormCount do begin { While loop to allow number of forms to change during loop }
    CurForm:=Screen.CustomForms[i];
    if CurForm.HandleAllocated and CurForm.Visible and CurForm.Enabled then
      CurForm.UpdateActions;
    Inc(i);
  end;
  if (FFormList<>nil) then begin
    for i:=0 to FFormList.Count-1 do begin
      AForm:=TForm(FFormList[i]);
      if AForm.FormStyle=fsSplash then <---------здесь
        AForm.Hide;
    end;
  end;
end;
 

Обсуждение даного AV в соседней ветке.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Нужно ли делать ObjectName.Free при закрытии формы?

Сообщение VirtUX » 07.10.2010 14:44:09

GAMER писал(а):SG1 := TStringGrid.Create(nil);

Если Вы не определили кому пренадлежит грид (nil), значит его никто не уничтожит. Другое дело, если Вы его во время исполнения, вдруг, определили кому-то...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru