Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Правильно закрыть динамическую форму


Автор: SERGSERG 7.2.2012, 20:43
При установке чека, создаётся форма, тут всё ок, а вот при снятии чека (закрытии формы) - access violation
Не пойму в чём проблемма, как правильно закрыть форму2???? smile 

Код

procedure TForm1.CheckBox30Click(Sender: TObject);
 var
      F: TForm2;
begin
if checkbox30.Checked=true then
begin
//Form2.Show;


      F := TForm2.Create(nil);
      F.Show;
      SetWindowLong(F.Handle, GWL_HWNDPARENT, GetDesktopWindow);
      SetWindowPos(F.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE   or SWP_NOSIZE);
F.Button1.Enabled:=form1.Button8.Enabled;


//form1.WindowState:=wsminimized;
end;

if checkbox30.Checked=false then
begin
//form1.FormStyle:=fsnormal;
 F.close;
  F.free;
end;

Автор: northener 7.2.2012, 21:00
Не внимательно прочитал. Пардон.
При каждом заходе в процедуру CheckBox30Click переменная  F разная. Объявление
 var
      F: TForm2;
нужно вынести за рамки этой процедуры.

Автор: SERGSERG 7.2.2012, 22:28
Скорей всего вы правы, т.к. при танцах с бубном исчезали элементы формы1. Но чем дальше в лес тем больше дров.
Каким образом можно вынести переменную  F: TForm2; за рамки процедуры?
Приведите пример кода если несложно

Автор: Данкинг 7.2.2012, 22:49
Цитата(SERGSERG @  7.2.2012,  23:28 Найти цитируемый пост)
Каким образом можно вынести переменную  F: TForm2; за рамки процедуры?

Код

unit Unit1;
...
var
 F: TForm2;

implementation

Автор: SERGSERG 7.2.2012, 22:57
Блин var забыл))
Только переменную надо после  implementation и всех юнитов вроде как объявить smile  

Код

implementation

uses Unit2;
 var
      F: TForm2;


Всем огромное спасибо!!! smile 
Жаль что репы не могу добавить 

З.ы. Процедура размещает форму2 по верх всех окон виндовса и там удерживается, может кому пригодиться smile 

Автор: northener 7.2.2012, 23:03
Цитата(SERGSERG @  7.2.2012,  22:57 Найти цитируемый пост)
Только переменную надо после  implementation вроде как объявить

В данном случае можно и до и после.

Автор: SERGSERG 7.2.2012, 23:05
У меня ДО не хочет работать. Пишу в Delphi 7.

Автор: Данкинг 7.2.2012, 23:18
Я тоже в D7 пишу, и всегда ставил до.

Автор: northener 8.2.2012, 00:48
Цитата(SERGSERG @  7.2.2012,  23:05 Найти цитируемый пост)
У меня ДО не хочет работать. Пишу в Delphi 7. 

Тут явно прослеживается необходимость читать учебники.

"У меня ДО не хочет работать."
Очевидно, что в модуле, в котором разработан класс TForm2 и в Инспекторе объектов его свойству Name было задано "F".

Добавлено через 5 минут и 1 секунду
Цитата(Данкинг @  7.2.2012,  23:18 Найти цитируемый пост)
Я тоже в D7 пишу, и всегда ставил до.

Не верю, что "арбитр изящества" всегда ставит до (или всегда после).  И то и другое всегда зависит от других причин/обстоятельств.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)