Главная страница
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.011 c
3-34333
off
2003-04-21 14:04
2003.05.12
Как ускорить выгрузку!


14-34564
Vint45
2003-04-23 14:16
2003.05.12
Распределение элементов с учетом приоритетов


1-34501
Konstantionov
2003-04-30 01:46
2003.05.12
Установка свойств компонента по умолчанию


6-34531
ScaliaR
2003-03-15 04:11
2003.05.12
подсчет трафика в сети.


3-34359
AleksChern
2003-04-22 16:09
2003.05.12
Нестандартная сортировка. Помогите !!!!