PDA

Просмотр полной версии : А можно события посылать ?...


Ezhy
12.02.2004, 17:19
Уважаемые мастера !

Пожалуйста, подскажите, как события в операционную систему послать ?

(WM_PAINT, WM_CLOSE, WM_MINIMIZE мне надо)

и как поймать HANDLE нужного окна через ActionScript ?..

Заранее всем спасибо !

Deviant
12.02.2004, 21:15
Они тут мало знают о программировании, к сожелению. Меня тоже интересовал этот вопрос. Все что удалось выяснить (кстати, на программерском форуме ;) rsdn.ru), что взаимодействие flash с приложением возможна только через FSCommand(command, args), посылаемых из flash-мувика и ловящимися через событийный интерфейс (_IShockwaveFlashEvents для C++). Другого способа я еще не нашел :(
Если, вдруг, что-то найдешь другое - кидай, хотябы сюда :D

Deviant
12.02.2004, 21:26
Что-то я поторопился немного.
Эти события (WM_PAINT, WM_CLOSE, WM_MINIMIZE), а точнее сообщения, должно возвращать окно, в котором поднят flash_activex, если я правильно понимаю их назначение и область использования. А вот на счет WM_PAINT не уверен вообще. Зачем нужна обработка этого месаджа?
А на счет хендла окна я вообще не понял. Откуда его нужно ловить?

toFlash
13.02.2004, 11:36
примерно так: в swf - fscommand("clsApp");
в обработчике OnFSCommand(LPCSTR cmdBuf, LPCSTR szArgsBuf) в сях:


CString szCommand=cmdBuf;
if(szCommand == "clsApp")
{
PostMessage(WM_CLOSE, 0, 0);
}

Ezhy
13.02.2004, 18:14
OnFSCommand - это что ? А если флешка открыта в объекте типа tWebBrowser (Delphi) ? тогда как ?

toFlash
16.02.2004, 11:15
Оригинал написал(а) Ezhy
OnFSCommand - это что ? А если флешка открыта в объекте типа tWebBrowser (Delphi) ? тогда как ?
OnFSCommand - это обработчик сообщений передаваемых от ActiveX'a Flash, имеет два параметра LPCSTR cmdBuf(случае это первый параметр в fscommand- т.е. "clsApp" ) и LPCSTR szArgsBuf (в данном случае второй параметр не передается, но в нем можно передать дополнительную инфу для блока обработчика, например список переменных и др.).
:rolleyes: А на счет Delphi я в нем не силен, незнаю.
;) Ищи ф-ю похожую на описанную выше и имеющую два параметра

Deviant
16.02.2004, 14:58
В Делфе все будет точно так же, если ты будешь использовать ActiveX flash-компонент. А ты, как я понимаю, открываешь флеш-мувик через TWebBrowser, который просто умеет ее воспроизвести правильно. Он доступа к управлению flash тебе не даст, разве что, давать ему на загрузку хтмль-ый файл где поднимаеться эта флэшка и есть наобходимый код для ее нормального фунциклирования (но это уже из области программирования для Web). Если же ты хочень иметь какие-то элементарные функции управления и взаимодействия с flah-мувиком, используй TShockwaveFlash или что-то похожее, импортируемое из ActiveX-го компонента Flash. Подробнее ищи о взаимодействии Delphi и Flash в инете.
Во вложении небольшой help.

Ezhy
17.02.2004, 11:53
Это все хорошо, но задача такова:
Форма Дельфи, на ней TWebBrowser, а в нем - флешка.
Нажимаешь на флешке кнопку и все закрывается (например, послать событие WM_CLOSE дельфовому окну).

Какие будут предложения ?...

Deviant
17.02.2004, 18:27
А как ты соеденяешь флэку с TWebBrowser? Я, хоть и работал с Delphi, но использовать TWebBrowser не приходилось.

В любом случаем, кроме варианта с html-ым файлом, другого ничего не вижу. При условии, что эту флешку написал ты, иначе этот способ не поможет. Способ, как я уже говорил, заключается в том, что во флешке, при нажатии на кнопочку, ты через FSCommand отсылаешь какую-нибудь условную команду "delphi_zakroysa" :D . Потом пишешь html'ку, которая эту флэшку загружает и может обработать твою команду "delphi_zakroysa". Обработка этой команды должна заключаться в посылке уже библиотечной функции JS - функции закрытия окна эксплорера, где эта функция описана.
Теперь, теоретически (не знаю, не пробовал), что-то должно произойти в TWebBrowser. Он или получит сам сообщение на закрытие или получит какое-нибудь сообщение на закрытие окна html, которое в нем было(c flash). Повторяю - я это только так себе представляю, а будет ли реально TWebBrowser как-то реагировать на то, что внутри него была запущена на исполнение команда JS на закрытие, я не знаю. Так вот, если будет, :D то теперь без проблем обрабатываешь уже событие от TWebBrowser и делаешь Close всей форме (разумееться, предусмотрев все необходимые прверки, чтобы это событие не сгенерировалось при закрытии TWebBrowser по завершению работы программы). Если это все будет работать - тебе повезло, другого способа я не вижу (в случае использования TWebBrowser).
Если флешка чужая и ни каких сообщений при нажатии на кнопку наружу не посылает, то тут уже ничего не поможет.
Ей можно только любоваться.

GROL
17.03.2004, 02:06
Не понятно, на кой тебе здался TWebBrowser. Тебе именно он нужен? Просто использование TShockwaveFlash не подойдет?

Если без TWebBrowser, то можно отловить нажатие на всем мувике. Как это сделать можно глянуть у TShockwaveFlashEx (http://www.delphiflash.com/codelib2.html#a3)

Ezhy
17.03.2004, 13:51
У меня такая задача:
В TWebBrowserе есть HTML - страница с влешью - таково задание.
На флеше давишь на кнопку и все закрывается (передается комманда проге на дельфе).

Предложения есть ?

GROL
17.03.2004, 20:46
У TWebBrowser есть событие onBeforeNavigate. Делаешь проверку урла и если это твои команды делаешь их обработку.

В html

<a href="blabla"><object ... твой_флешик ></a>

В Delphi

procedure TMForm.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
if ExtractFileName(URL) = 'blabla' then
begin
// что хош
Cancel := true;
Close;
end;
end;

Ezhy
18.03.2004, 14:29
Всем впасибо, кто принял участие !!!
Может еще кто-то что-то придумает ?..

GROL
18.03.2004, 14:51
Может еще кто-то что-то придумает ?..
Что, так тоже не подходит? :D

Ezhy
18.03.2004, 15:11
Что ты !!!
Очень даже подходит !! Спасибо огромное !!!
А вдруг кого еще гениальная мысль осенит ?!