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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перехватить момент открытия PopupMenu 
:(
    Опции темы
Delphist
Дата 5.4.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


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

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



Как перехватить момент открытия контекстного меню PopupMenu без использования OnPopup


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Snowy
Дата 5.4.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Ну пронаследуй попупку. Наследуй метод DoPopup.
PM MAIL   Вверх
MetalFan
Дата 29.11.2007, 15:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



а как отследить момент закрытия? ))


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Snowy
Дата 29.11.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Момент закрытия наступает после выполнения DoPopup.
Как он завершился - меню закрылось.
PM MAIL   Вверх
MetalFan
Дата 29.11.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



здрасти. с чего бы это?!

Добавлено через 37 секунд
кстати, вот нормальный пример на отлов закрытия попапы
http://delphi.about.com/od/adptips2006/qt/popuplistex.htm


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Snowy
Дата 29.11.2007, 17:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Сампл:
Код

type
  TPopupMenu = class(Menus.TPopupMenu)
  public
    procedure Popup(X, Y: Integer); override;
  end;

  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    ....
  end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TPopupMenu.Popup(X, Y: Integer);
begin
  ShowMessage('Меню открылось');
  inherited;
  ShowMessage('Меню закрылось');
end;

end.

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


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



супер! 
а я не знал, что из TrackPopupMenu невыходит, пока меню на экране...
спасибо!

Добавлено через 7 минут и 46 секунд
мда... но только тут возврат происходит прежде, чем сработает TMenuItem.OnClick...
в общем была необходимость динамически добавлять несколько пунктов в попапу и при закрытии их убивать.
такой код не сработает (не увидим сообщение):
Код

type
  TPopupMenu = class(Menus.TPopupMenu)
  public
    procedure Popup(X, Y: Integer); override;
  end;

  TForm1 = class(TForm)
    pm: TPopupMenu;
    procedure OnMenuClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    FMI: TMenuItem;
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}



{ TPopupMenu }

procedure TPopupMenu.Popup(X, Y: Integer);
begin
  Items.Add( Form1.FMI );
  inherited;
  Items.Remove( Form1.FMI );
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMI := TMenuItem.Create( pm );
  FMI.OnClick := OnMenuClick;
  FMI.Caption := 'Click Me!';
end;

procedure TForm1.OnMenuClick(Sender: TObject);
begin
  ShowMessage('Clicked!');
end;

да и необходимо отлавливать закрытие без извращенств с наследованием классов...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Snowy
Дата 29.11.2007, 18:49 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Добавь ProcessMessages после inherited - получишь закрытие после обработки нажатия.
Что касается "извращений"...
А как ты хочешь добавить классу новые возможности, не наследуя его?
Нормальный способ. По мне так он лучше, чем оборачивать клас снаружи разными обработчиками.
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.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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