|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Flash в приложениях Delphi
Я делаю программку в которой есть Flash (ShockwaveFlash1).
Но вот меня раздражает то, что при нажатии на ShockwaveFlash1 правой кнопкой мыши, то появляется меню: Movie not loaded Debugger - About Macromedia Flash Player 7... Как мне это убрать? (чтобы только этого меню не было) |
#2
|
|||
|
|||
Вот, специально зарегился для этого поста. Отвечаю, ибо сам искал ответ на это (но, однако, сам и нашёл). Учитывая оперативность и своевременность ответа, он может быть уже никому не нужен, но всё же. Может, потом кто искать будет (как я вот).
Значит, насколько мне известно, сам компонент поддерживает только частичное убирание меню. Полностью же его убрать можно, видимо, только на более низком уровне. Первое, что мне пришло в голову - это перехватить и убить мессагу (нажатие правой мышки), которая меню вызывает. (Собственно, я так и поступил в конце концов.) Поскольку TShockwaveFlash есмь компонент ActiveX, то запускается он какбэ в отдельном окне (хотя визуально это трудно заметить, да; однакож винда считает именно так) и перехватить мессагу на уровне формы не представляется возможным. Посему перехватываем на уровне процесса. Для чего используем событие TApplication.OnMessage. Обработчик его выглядит примерно так: Код:
procedure Имярек(var Msg: TMsg; var Handled: Boolean) of object; Соответственно, msg - сама мессага, а Handled позволяет его убить: если поставить его в true, то будет считаться, что msg уже обработана. Естественно, нам нужны не все сообщения, но только щелчки правой мышкой по flash. Конкретизируя: 1)тип события: щелчок (а именно вжатие (я имею ввиду, нажатие-но-ещё-не-отпускание)) правой кнопкой мыши 2)цель: ShockwaveFlash1 (а именно, дескриптор окна назначения: дескриптор ShockwaveFlash1) или, переводя на дельфийский, Код:
msg.message = WM_RBUTTONDOWN and msg.hwnd = ShockwaveFlash1.Handle Соответственно, всё это будет выглядеть приимерно так: Код:
procedure TForm1.DisableMenu(var Msg: TMsg; var Handled: Boolean); begin if (msg.message = WM_RBUTTONDOWN) and (msg.hwnd = FlexGraph.Handle) then Handled := true; end; Код:
Application.OnMessage := TForm1.DisableMenu; |