PDA

Просмотр полной версии : rightClick снова-здорова!


Акакий Акакиевич
01.06.2002, 00:07
Начну с того, что с Macromedia меня связывает любовь с первого взгляда (не взаимная конечно же:-)): впервые увидев Flash, я был покорён сразу и, как я тогда думал, - навсегда... Не буду лишний раз перечислять все "вкусности" продуктов сей уважаемой мной (и далеко не только мной) компании. В частности во Flash меня устраивало практически всё... до некоторых пор. С нарастающим энтузиазмом я осваивал данную программу: разбирал уроки с сайта flasher.ru (лучше которого по соответствующей тематике не встречал), потом разбирал исходники, а уж потом приобрёл великолепную книгу «Action Script. Подробное руководство» Колина Мука (настоятельно рекомендую это достойнейшее издание всем флэшерам). Извините за длинное предисловие, вот мы с вами уже и подошли к сути моих претензий: что я имею освоив (всё, конечно же, относительно, я не утверждаю, что теперь знаю о Flash всё, но пользую его уверенно) Flash? А имею я не много, - возможно виноват я сам, - виноват в том, что изначально неверно выбрал приложение для своих задач. Дело в том, что для меня не представляют большого интереса интернет-приложения, мощным инструментом разработки которых является Flash, мне было бы гораздо интересней внедрить Flash как инструмент разработки анимированного интерактивного интерфейса для своих программ, написанных, к примеру, в Delphi. Вот тут и возникает огромнейшая козья морда, подложенная компанией Macromedia мне: по правому клику на объекте ActiveX ShockwaveFlash хоть ты тресни, появляется это сакраментальное меню (в лучшем случае его можно только сократить) About Macromedia Flash! Я уж не говорю о том, что правый клик зарезан во Flash. И что же делать?! – воскликну я, уподобясь классику. Вы скажите, что, мол, можно использовать непофиксенный метод объекта Key.isDown(2)? Конечно можно и даже более того нужно, - просидев вечер, я сумел создать для правой кнопки мыши события press & release, но для удобства проверки мне пришлось поступить немного некрасиво: я варварски выдрал из плеера меню, что позволительно сделать у себя дома и для себя, но ни в коем случае так не поступит настоящий джентльмен, разрабатывающий продукт, рассчитанный на массового потребителя, коим и является ваш покорный слуга. Не стану же я резать .ocx-файл из C:\WINDOWS\SYSTEM\MACROMED\FLASH… Некрасиво это, да и не законно, да и просто НЕ ХОЧЕТСЯ так поступать с продуктом компании, которая так была когда-то любима! Вот и прошу я у вас, Уважаемые Флэшеры, совета: может кто-то уже решил эту проблему с Flash? – Расскажите пожалуйста. Кстати эта проблема не единственная из возникающих при внедрении ShockwaveFlash в любую среду разработки: при установке свойства transparent (в том же Delphi, допустим) и так и не сумел добиться прозрачности фона… но это уже отступление. Или Flash по определению не подходит для таких задач и теперь мне нужно осваивать что-то новое вроде MacromediaDirector с его Lingo (там-то как дела обстоят с popUp-меню?) Или, быть может, есть другие, строго ориентированные, среды для разработки красивых интерфейсов? Вообще, хотя бы просто подскажите, не бросайте меня на распутье одного пожалуйста. Заранее благодарен. На веки Ваш, Акакий.

DMN
01.06.2002, 16:20
Начну с того, что всякий вставленный в Дельфовую форму ActiveX все равно является объектом класса TControl - значит, есть у него и свойство WindowProc, которое мы можем смело перекрыть... Вся фишка в том, что мы смотрим - если к нам пришло MW_RBUTTONDOWN, мы его обслуживаем самостоятельно и дальше не отдаем. А вот если что другое - всегда пожалуйста, вызываем старый обработчик... В приведенном ниже примере SF - это вставленный в дельфовую форму ActivX с мувиком. При нажатии на правую кнопку жалобно пищит, в остальном функционирует нормально... Пример представлен только для демонстрации идеи...


unit mftestfm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleCtrls, ShockwaveFlashObjects_TLB;

type
TForm1 = class(TForm)
sf: TShockwaveFlash;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
OldProc:TWndMethod;
procedure newProc(var Message: TMessage);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
OldProc :=sf.WindowProc;
sf.WindowProc:=newProc;
end;

procedure TForm1.newProc(var Message: TMessage);
begin
if Message.Msg <> WM_RBUTTONDOWN then
OldProc(Message)
else
MessageBeep(0);
end;

end.

Акакий Акакиевич
01.06.2002, 17:57
Спасибо Вам огромное! Вот теперь перед моим взором снова распахнулись необъятные горизонты!

DeliMIter
03.06.2002, 21:54
Это ты вышел на орбиту. Не забудь застегнуть скафандр...

Egoritch
03.06.2002, 22:07
в открытый космос. это - не законно, хотя, конечно и возможно. ActiveX компоненты предоставляются (обычно) с условием указания автора.

Акакий Акакиевич
04.06.2002, 00:19
да укажу я на Macromedia ессессно, но не стоило же для указания на самих себя целое событие резать...