Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.12;
Скачать: CL | DM;

Вниз

Освобождение памяти из под динамически созданной формы   Найти похожие ветки 

 
R   (2003-04-28 01:28) [0]

Здравствуйте.
Сначала пример:
var
Form: TForm;
begin
Form := TForm.Create(Application);
with Form do
try
with TButton.Create(Form) do
begin
Parent := Form;
ModalResult := mrOk ;
end;
if ShowModal = mrOk then
finally
Form.Free;
end;
end;

Вот пример динамически созанной формы с кнопкой
собственно здесь все понятно, но вопрос такой я хочу создать
также форму но не модальную я убираю вот эту часть
if ShowModal = mrOk then
и эту Form.Free;не модальная
форма создается, но как мне теперь сделать
Form.Free, т.е. в какой части программы, одно условие что при закрытии этой формы память должна быть высвобождена.


 
R   (2003-04-28 02:03) [1]

Да забыл вместо if ShowModal = mrOk пишу Form.Show


 
Ну   (2003-04-28 02:03) [2]

Можно на OnClose формы Form повесить Action:=caFree.
Из хелпа:
"caFree The form is closed and all allocated memory for the form is free"


 
R   (2003-04-28 02:32) [3]

Если перевести
caFree Форма закрыт и вся размещенная память для формы - свободная - это точно освобождение памяти, а не проверка


 
Chlavik ©   (2003-04-28 02:40) [4]

Ну полюбому Action:=caFree ... Это самый простой вариант......


 
R   (2003-04-28 02:53) [5]

Да с освобождением разобрался а вот закрыть это окно
по клику кнопки как лучше я делаю так
procedure TForm1.Button1Click(Sender: TObject);//создаю
var
Form: TForm;
Button:TButton;
begin
Form := TForm.Create(Application);
with Form do
try
Caption:="1";
Button:= TButton.Create(Form);
with Button do
begin
Parent := Form;
ModalResult := mrOk ;
end;
Form.OnClose:= qOnClose;
Button.OnClick:=qOnClick;
Form.Show;
finally

end;
end;

я закрываю так:
procedure TForm1.qOnClick(Sender: TObject);
begin
SendMessage(FindWindow("TForm","1"),WM_Close,0,0)

end;


procedure TForm1.qOnClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;//освобождаю память
end;


 
R   (2003-04-28 03:15) [6]

Есть еще такой вариант закрытия
procedure TForm1.qOnClick(Sender: TObject);
begin
Screen.ActiveForm.Close
end;

Мастера а что вы посоветуете, по моему оба приведенных выше
мною варианта не правильны.


 
Ну   (2003-04-28 03:28) [7]

раз уж так, то стоит объявить переменную Form: TForm - как глобальную.
И тогда уже не нужно ни "FindWindow" ни "ActiveForm".


 
R   (2003-04-28 03:37) [8]

Да я тоже так предполагаю что без глобальной переменной не обойтись, хотя стремлюсь их не использовать(уж больно их накапливается много).


 
Sergey Masloff   (2003-04-28 04:05) [9]

procedure TForm1.qOnClick(Sender: TObject);
begin
// Это на фиг: SendMessage(FindWindow("TForm","1"),WM_Close,0,0)
Close();
end;

Внутри обработчика известно к какому экземпляру класса он применяется.


 
R   (2003-04-28 04:29) [10]

>Sergey Masloff
А можно подробнее, ведь Close без параметров.


 
Sergey Masloff   (2003-04-28 07:27) [11]

R
>ведь Close без параметров

тогда Close;

на самлм деле я на C тоже пишу и иногда скобки после функции
ставлю на автомате. Кстати иногда в чем-то и удобнее, сразу видно что это функция а не переменная. Например MyVar := Date();


 
ErikIvanov   (2003-04-28 14:38) [12]

На самом деле в поцедуру procedure TForm1.qOnClick
передается неявный параметр Self это сылку на класс!
Self.Close; - тоже самое.


 
Sergey Masloff   (2003-04-28 14:43) [13]

>Self это сылку на класс!
Все же не на класс, а на конкретный экземпляр оного ;-)


 
evvcom ©   (2003-04-28 14:58) [14]

В методы объекта передается Self - ссылка на объект (экземпляр класса), в методы класса Self - ссылка на класс.



Страницы: 1 вся ветка

Текущий архив: 2003.05.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
3-34352
I.Ru.Ru
2003-04-22 11:00
2003.05.12
Можно ли используя Paradox создавать клиент-серверные приложения?


1-34387
SSK
2003-04-28 11:55
2003.05.12
выбор в TreeView


3-34350
dimonf
2003-04-22 14:05
2003.05.12
Народ, подскажите плиз по пакету DevExpress!


14-34561
Style
2003-04-23 18:39
2003.05.12
Delphi Challenge! Пришло письмо с просьбой перенести 1-й тур


1-34430
Oleg__
2003-04-28 17:07
2003.05.12
WordApplication