Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие закрытия контекстного меню 
V
    Опции темы
Keeper89
Дата 20.11.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Доброго времени суток.

Как можно отловить данное событие?

Нужно оно вот для чего. Подменю родительских меню формируется в OnPopup своего родителя и все это происходит в одном потоке. Поток создается в событии и уничтожается при выборе пункта меню или наведении на другой родительский элемент. Соответственно, если меню просто буде закрыто - не будет остановлено выполнение потока.
Поэтому хотелось бы отлавливать момент закрытия меню без выбора.




--------------------
PM MAIL WWW   Вверх
cemick
Дата 20.11.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 6



PM MAIL WWW   Вверх
Keeper89
Дата 20.11.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Насколько я знаю после Delphi7 TApplicationEvents больше нет  smile . Чем его можно заменить?

+ Раз уж я написал про потоки, задам смежный вопрос. Создаю поток:
Код

// OnPopup

  AbortLastWorkerThread();

  EnterWorkerThread();
  try

    // Заполняю подменю

  finally
    LeaveWorkerThread();
  end;

Но если навести курсор на один пункт меню, начинается заполнение элементов и интерфейс все равно виснет. Т.е. нельзя подвести мышь к другому пункту и сбросить добавление элементов в первом.

Это сообщение отредактировал(а) Keeper89 - 20.11.2009, 16:04


--------------------
PM MAIL WWW   Вверх
cemick
Дата 20.11.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 6



Цитата(Keeper89 @  20.11.2009,  15:05 Найти цитируемый пост)
Насколько я знаю после Delphi7 TApplicationEvents больше нет   . Чем его можно заменить?

Зато у Application.OnIdle есть событие. Создай свой обработчик и передай в свойство.

Цитата(Keeper89 @  20.11.2009,  15:05 Найти цитируемый пост)
Но если навести курсор на один пункт меню, начинается заполнение элементов и интерфейс все равно виснет. Т.е. нельзя подвести мышь к другому пункту и сбросить добавление элементов в первом.


Ты только заполняешь меню в отдельном потоке, или создаешь меню в нем?
PM MAIL WWW   Вверх
Keeper89
Дата 20.11.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



Цитата(cemick @  20.11.2009,  17:18 Найти цитируемый пост)
Ты только заполняешь меню в отдельном потоке

Заполняю, это и есть создаю - N подменю создаю и добавляю к родительскому меню, для которого вызывается OnPopUp.
Цитата(cemick @  20.11.2009,  17:18 Найти цитируемый пост)
Зато у Application.OnIdle есть событие. Создай свой обработчик и передай в свойство.

Ок.


--------------------
PM MAIL WWW   Вверх
Keeper89
Дата 20.11.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 20
Всего: 58



По поводу способа с OnIdle: получается, что запустить заполнение меню с помощью отдельного потока не получится, т.к. начнет работать главный и уничтожит в OnIdle вспомогательный поток. Т.е. OnIdle будет все равно, закрылось меню, или я в отдельном потоке запустил определение пунктов подменю.


--------------------
PM MAIL WWW   Вверх
hawkins
Дата 21.11.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 8.9.2003

Репутация: нет
Всего: нет



Цитата(Keeper89 @  20.11.2009,  15:05 Найти цитируемый пост)
Насколько я знаю после Delphi7 TApplicationEvents больше нет

в каком смысле нет  smile  ? В Delphi2007 в палитре компонент есть...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.