Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
14-34582
Nick-From
2003-04-23 18:38
2003.05.12
Нужен курсовик по СЦОС


6-34539
Andrey
2003-03-16 11:28
2003.05.12
Счетчик


14-34556
Style
2003-04-23 10:16
2003.05.12
Конкурс на самый извратный Hello World :)


4-34647
Sheva
2003-02-17 15:17
2003.05.12
Текст edit-а из другого приложения.


8-34519
SN
2003-01-30 00:59
2003.05.12
DS PACK





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский