![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
экземпляр TPopupMenu я создаю динамически а как его освобождать?
( ничего типа OnExit у него нет ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
_hunter Была подобная тема - при активизации метода Popup, меню ведет себя как модальное окно, то есть можно писать так:
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
спасибо!
оно -- родимое Это сообщение отредактировал(а) _hunter - 21.7.2004, 19:26 -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
обнаружил одну проблему -- при щелчке на меню форма отмерзает раньше срабатывания обработчика клика по меню
как с этим бороться? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Еще раз, и попонятнее -------------------- Все знать невозможно, но хочется |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Попробуй после
Menu.Popup(100, 100); добавить Application.ProcessMessages; -------------------- С уважением, г-н Посол. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
вот теперь оно
спасибо -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Если я не ошибаюсь, то справка гласит, что нужно сначала вызвать Release, а потом уже разрушать объект, т.е.:
Если я не прав - поправьте... -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
А с каких пор у tPopupMenu есть метод Release ? И вообще, что-бы он мог делать, если-бы даже был? -------------------- Все знать невозможно, но хочется |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Петрович ты сказал верно на 100%...
Я просто не очень дружелюбно отношусь к Application.ProcessMessages... Так, как я теперь написал - верно? -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
И я тоже.
Нет. А чем просто FreeAndNil(Menu); не подходит? -------------------- Все знать невозможно, но хочется |
||||
|
|||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
Menu:=nil - это присвоению указателю значение ноль. И если var Menu:TPopupMenu определенно не глобально(или данный указатель не проверяется ни где на ноль, т.е if Menu<>nil then...), то достаточно Menu.Free
-------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Действительно что-то тут непонятно...
Это так я в своей программе реализую своё меню. Оно создаётся прямо на лету вместе с назначением событий (это параметр finfo, но это не важно). Самое интересное то, что если оставить толко пункт а), то всё работает, хотя возникает ощущение, что объект действительно не разрушается (но всё работает!). Однако же если оставить пункт б), то тогда при клике на пункт меню не обрабатывается событие, назначенное этому пункту!!! Значит Free - это не совсем верное уничтожение меню... А Application.ProcessMessages - с ним я уже однажды столько наловился ошибок, что теперь не хочу его использовать, т.к. не совсем понятно что в этой строчке будет выполняться... -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
-------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Да. Есть такая фича. По мне так странно, но в виндах реализованно так - когда вы вызываете _popupmenu.Popup(...), то после клика по пункту меню, винды "закладывают" в очередь сообщение WM_COMMAND. Причем, именно "закладывают", т.е. делают PostMessage а не SendMessage. Запуск-же обработчика клика на пункт меню делается именно по WM_COMMAND. Поэтому, возврат из _popupmenu.Popup(...) происходит до обработки WM_COMMAND. Обработанно оно будет лишь после того как дело дойдет до цикла обработки сообщений. Если-же сделать _popupmenu.Free сразу за _popupmenu.Popup(...) то, когда будет обрабатываться WM_COMMAND, пункта меню по которому кликнули уже не будет существовать!. Если-же не делать _popupmenu.Free (вар. a), то объект меню и его пункты не будут уничтожены, и соответственно, будет нормально вызван обработчик клика. Даже не смотря на _popupmenu:=nil - ссылка на кликнутый пункт передается в самом WM_COMMAND. Вызов Application.ProcessMessages перед _popupmenu.Free решает эту проблему, хотя согласен, далеко не лучшим образом. -------------------- Все знать невозможно, но хочется |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |