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) 

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


GrayFace   (2004-08-15 11:05:00) [1]

GrayFace ©   (13.08.04 11:20) [27]
> Уничтожение объектом самого себя - глупость
>изначально.
> Уничтожать должен тот, кто создал. Только так.

Создает статический метод класса, а сам объект слушает у каогт-то контрола сообщения и на wm_destroy должен убиваться.


KSergey   (2004-08-14 14:09:00) [2]

> [35] GuAV ©   (14.08.04 13:52)
> Это самый простой путь решения данной проблемы.
> В конце-то концов, ну "попросишь кого-то" прибить объект.
> Он убъёт и передаст управление вызывавшей процедуре. Т.е.
> всё равно объект убъёт себя из себя. Без постмессаге тут
> всё равно не обойтись.

Разумеется не обойтись!
Под "попросить" я имел в виду "вежливо", т.е. не буквально сразу ;) Именно что внекакого либо метода уничтожаемого объектавызвать деструктор.

> Называй другие случаи - разберёмся.

Лень фантазировать. ;)
Разобраться, думаю, можно почти всегда (в смысле найти решение буквально желаемой штуки), однако, по-моему, в этом нет особого смысла.
Впрочем, я просто предостерегаю в том смысле, что в лоб может не получится. Но если хочется - да сколько угодно! ;)


GuAV   (2004-08-14 13:52:00) [3]


> Речь веду о том - нужно ли?

Это самый простой путь решения данной проблемы.
В конце-то концов, ну "попросишь кого-то" прибить объект. Он убъёт и передаст управление вызывавшей процедуре. Т.е. всё равно объект убъёт себя из себя. Без постмессаге тут всё равно не обойтись.

> Но все равно в кахдом сулчае подход будет индивидуален...

Называй другие случаи - разберёмся.


KSergey   (2004-08-14 08:39:00) [4]

> [33] GuAV ©   (13.08.04 22:01)
> PostMessage

Хорошо, когда его есть кому запруздырить ;)
Но все равно в кахдом сулчае подход будет индивидуален...

Короче я не спорю, что делать так можно. Речь веду о том - нужно ли?


GuAV   (2004-08-13 22:01:00) [5]


> 1.Необходимость каждый раз крепко копать код VCL. Ну, в
> принципе полезно, конечно.
> 2.В случае чего- огребаем плавающие баги.

Нифига подобного. PostMessage+Free - и никаких проблем. А в VCL заглянули, чтобы эту идею спионерить из release. И только. А вообще это полезно, конечно.


KSergey   (2004-08-13 21:55:00) [6]

> GuAV ©   (13.08.04 16:25) [31]

Следуя этому совету имеем:

1.Необходимость каждый раз крепко копать код VCL. Ну, в принципе полезно, конечно.
2.В случае чего- огребаем плавающие баги.

Вам мало проблем без этого? ;)
Хотя, конечно, кому как проще.


GuAV   (2004-08-13 16:25:00) [7]


> Но предлагаю считать его все же - исключением! Причем -
> недостойным подражания.

Отвергаю это предложение. Автор ветки хотел таки уничтожить объект из себя и он прав.
Объект нельзя уничтожать из себя, когда после уничтожения использованы свойства и методы требующие наличие объекта, а также поля объекта. Например:
1) Когда после уничтожения будут выполнятся события. В событиях ничего не подозревающий кодер может использовать свойства и методы требующие наличие объекта.
2) -//- сообщения. В обработчиках этих сообщений могут использаться свойства и методы требующие наличие объекта, а также поля объекта.
3) Когда присутсвует "непосредственное" обращение к полю/методу/св-ву объекта после его уничтожения, т. е. в одной из процедур, находящейся в "call stack". 1 - частный случай этого.
4) Внутри событий. Если не оговорено, то не гарантируется отсутствие вышеозначенных пунктов.

Однако, если после уничтожения не использованы использованы свойства и методы требующие наличие объекта, а также поля объекта, то уничтожать объект можно.

Автору ветки: не слушай KSergey и GrayFace, слушай jack128 и меня :)


KSergey   (2004-08-13 15:36:00) [8]

> [29] GuAV ©   (13.08.04 14:51)
> > Уничтожение объектом самого себя - глупость изначально.
> Free + (Ctrl+Мыша)

Блин, ну не совсем корректно написал
Имелось в виду, конечно же - убиение себя (вызов Free) из своего же метода.
Да, да, я понимаю, что есть CM_RELEASE, более того, оно работает.

Но предлагаю считать его все же - исключением! Причем - недостойным подражания.


GuAV   (2004-08-13 14:51:00) [9]

KSergey ©   (13.08.04 11:26) [28]

> Уничтожение объектом самого себя - глупость изначально.

Free + (Ctrl+Мыша)

>  только в нем фактически "просить" уничтожить себя другой
> объект.

Нифига подобного - в CM_RELEASE Написано Free.

>  Что понятно

Что бред.
GrayFace ©   (13.08.04 11:20) [27]

> А как убить объект из самого себя, не имея окна?

При чём тут окно? Его имеют далеко не все объекты, и даже не все компоненты. Убить из себя - Free.

---
Учите исходники Дельфи, ребята...


KSergey   (2004-08-13 11:26:00) [10]

Уничтожение объектом самого себя - глупость изначально.
Уничтожать должен тот, кто создал. Только так.
То, что это сделано для форм причем внутри их же - ну просто так вот.
Хотя, метод Release в принципе сделать не трудно для любого компонента, только в нем фактически "просить" уничтожить себя другой объект. Какой - и как не важно, много можно насочинять. При этом реальное уничтожение должно происходить внекакого-либо метода уничтожаемого объекта. Что понятно.


GrayFace   (2004-08-13 11:20:00) [11]

А как убить объект из самого себя, не имея окна?


GuAV   (2004-08-13 01:45:00) [12]


> заработает ;-)

Охотно верю, он для любого TWinControla заработает, полей то нет :)


jack128   (2004-08-12 22:31:00) [13]

попробуй сам - если ты в фрейме обработаешь CM_RELEASE, то твой код
> TForm(Frame).Release
заработает ;-)


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


> TFrame нету метода Release

Блин, я почему то думал, что TCustomFrame наследник TCustomForm...


jack128   (2004-08-12 22:24:00) [15]


> и чем это отличается от TForm(Frame).Release ?
тем что у TFrame нету метода Release, а TMyCoolFrame есть ;-)


GuAV   (2004-08-12 22:11:00) [16]


> Я имел ввиду вот так:
> TMyCoolFrame = class(TFrame)
> private
>  procedure CmRelease(var Message: TMessage); message CM_RELEASE;
> end;
>
> procedure TMyCoolFrame.CmRelease(var Message: TMessage);
> begin
>  Free;
> end;

и чем это отличается от TForm(Frame).Release ?
дело как мне предсавляется в том, что обработчик кнопки в форме а не в фрейме и соотв. postmessage надо туда же [15].


GuAV   (2004-08-12 21:07:00) [17]


>  Хотя ты, помнится хотел в борланд по этому счету написать
> ;-)

Я думал, что выяснили. Ладно, в MS писал, и этим напишу.


jack128   (2004-08-12 19:09:00) [18]


> > GuAV  [17]
> > TForm(Frame).Release; ?
> не работает


> В данном случае не получается


Я имел ввиду вот так:
TMyCoolFrame = class(TFrame)
private
 procedure CmRelease(var Message: TMessage); message CM_RELEASE;
end;

procedure TMyCoolFrame.CmRelease(var Message: TMessage);
begin
 Free;
end;

procedure TMyCoolFrame.Release;
begin
 PostMessage(Handle, CM_RELEASE, 0, 0);
end;
> <off>
> Чем кстати про конструктор как обычный метод закончилось
> </off>
А ничем. Вопрос не вызвал интузиазма среди общественности.. Ну фиг с ним. По большому счету мне все равно - вопрос был риторическим.. Хотя ты, помнится хотел в борланд по этому счету написать ;-)


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

QQ ©   (12.08.04 18:46) [18]
Так к чему я это:
jack128 ©   (12.08.04 17:14) [16]

> реализовать эту функциональность в самом фрейме.

В данном случае не получается.


QQ   (2004-08-12 18:46:00) [20]

> GuAV  [17]
> TForm(Frame).Release; ?

не работает


Страницы:   1 2

Наверх

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