Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Про работу с фреймами [D5]


Страницы:   1 2

Alek ©   (2004-08-12 14:02:00) 

Как работать с фреймами во время выполнения программы?
Создавать и удалять?


GuAV   (2004-08-12 18:36:00) [21]


> технически правильный подход, но лудше реализовать эту функциональность
> в самом фрейме.

TForm(Frame).Release; ?

> Я в свое время задовался вопросом - почему метод Release
> ввели только для CustomForm, а не для WinControl'ов..

И почему же ?
<off>
Чем кстати про конструктор как обычный метод закончилось ?
</off>


jack128   (2004-08-12 17:14:00) [22]


> procedure TForm1.FreeandNilFrame(var Frame: TFrame);
> begin
>  PostMessage(Self.Handle,WM_MYFREE,0,LPARAM(Frame));
>  Frame:=nil;
> end;

технически правильный подход, но лудше реализовать эту функциональность в самом фрейме.
Я в свое время задовался вопросом - почему метод Release ввели только для CustomForm, а не для WinControl'ов..


GuAV   (2004-08-12 15:05:00) [23]

Я бы лучше в обработчике делал TObject(Message.lParam).Free; а :=nil после того постмесаге:

procedure TForm1.FreeandNilFrame(var Frame: TFrame);
begin
 PostMessage(Self.Handle,WM_MYFREE,0,LPARAM(Frame));
 Frame:=nil;
end;


QQ   (2004-08-12 14:55:00) [24]

а вообще - GuAV прав - требуется написать обработчик сообщения в форме, который будет делать FreeAndNil(Sootvetstviya1);


QQ   (2004-08-12 14:46:00) [25]

И вообще, как Вы так пишите??
должно быть:   FreeAndNil(Self);
если речь об освобождении собственной памяти у фрейма.


QQ   (2004-08-12 14:42:00) [26]

а ты проверь-ка после FreeAndNil(Sootvetstviya1);
у тебя есть какой-нить код в этом обработчике нажатия на кнопку?
;)


GuAV   (2004-08-12 14:42:00) [27]

GuAV ©   (12.08.04 14:36) [9]
Это в смысле PostMessage надо делать той форме, где обработчик, т.е. в к-рую вставлен Frame. А Sootvetstviya1 - передавать например в lParam


QQ   (2004-08-12 14:38:00) [28]

И вообще это неправильный путь. Коли уж создаём фрейм рантайм, то указывайте как овнера форму, где она лежит. Owner это как раз и есть класс, ответственный за освобождение памяти вашего фрейма (или чего-то там еще). Т. е. нужно писать:
If not Assigned(Sootvetstviya1) then
Sootvetstviya1:=TSootvetstviya.Create(Form1);

где вместо Form1 - имя формы, где этот  фрейм лежит. Тогда и освобождать ничего в ручную не придётся.


GuAV   (2004-08-12 14:36:00) [29]

Мне когда-то нужно было чтоб кнопка убивала себя... выкрутился через postmessage wm_user+x главой форме.


Alek   (2004-08-12 14:32:00) [30]

FreeAndNil(Sootvetstviya1); - вот если я вешаю это на кнопку которая не принадлежит Sootvetstviya1, то все нормлаьно освободжлдается, а если кнопка пренадлежит Sootvetstviya1 то вылетает исключение и фрейм освобождается


Alek   (2004-08-12 14:31:00) [31]

PostMessage(AddZapchast1.Handle, CM_RELEASE, 0, 0);
AddZapchast1:=nil;

неработает. Первое нажатие кнопки ничего не исчезает, а на второе вылетает ексцептион


QQ   (2004-08-12 14:28:00) [32]

У меня ничего не вылетает. Какое исключение?


GuAV   (2004-08-12 14:24:00) [33]


> TCustomForm.Release

TCustomForm(Self).Release; - думаю пойдёт...


GuAV   (2004-08-12 14:22:00) [34]


> Что я неправильно делаю?

RTFM:
Release method (TCustomForm)

Sootvetstviya1.Release
Sootvetstviya1:=nil


jack128   (2004-08-12 14:20:00) [35]


> procedure TForm1.Sootvetstviya1SpeedButton1Click(Sender:
> TObject);
> begin
> FreeAndNil(Sootvetstviya1);
> end;
так делать нельзя. Посмотри как реализован TCustomForm.Release и сделай так же.


Alek   (2004-08-12 14:18:00) [36]

Вот Так я создаю фрейм:

If not Assigned(Sootvetstviya1) then Sootvetstviya1:=TSootvetstviya.Create(Application);
Sootvetstviya1.Parent:=Panel2;
Sootvetstviya1.Left:=8;
Sootvetstviya1.Top:=8;

Вешаю ему обработчик нажатия на кнопку
Sootvetstviya1.SpeedButton1.OnClick:=Sootvetstviya1SpeedButton1Click;

Вот сам обработчик:
procedure TForm1.Sootvetstviya1SpeedButton1Click(Sender: TObject);
begin
FreeAndNil(Sootvetstviya1);
end;

Когда он срабатывает ты вылетает исключение, но фрейм удаляется.
Что я неправильно делаю?


GuAV   (2004-08-12 14:06:00) [37]

Точно так же как работать с другими компонентами во время выполнения программы. Создаёшь, задаеш Parent...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо