Просмотр полной версии : А можно события посылать ?...
Уважаемые мастера !
Пожалуйста, подскажите, как события в операционную систему послать ?
(WM_PAINT, WM_CLOSE, WM_MINIMIZE мне надо)
и как поймать HANDLE нужного окна через ActionScript ?..
Заранее всем спасибо !
Они тут мало знают о программировании, к сожелению. Меня тоже интересовал этот вопрос. Все что удалось выяснить (кстати, на программерском форуме ;) rsdn.ru), что взаимодействие flash с приложением возможна только через FSCommand(command, args), посылаемых из flash-мувика и ловящимися через событийный интерфейс (_IShockwaveFlashEvents для C++). Другого способа я еще не нашел :(
Если, вдруг, что-то найдешь другое - кидай, хотябы сюда :D
Что-то я поторопился немного.
Эти события (WM_PAINT, WM_CLOSE, WM_MINIMIZE), а точнее сообщения, должно возвращать окно, в котором поднят flash_activex, если я правильно понимаю их назначение и область использования. А вот на счет WM_PAINT не уверен вообще. Зачем нужна обработка этого месаджа?
А на счет хендла окна я вообще не понял. Откуда его нужно ловить?
примерно так: в swf - fscommand("clsApp");
в обработчике OnFSCommand(LPCSTR cmdBuf, LPCSTR szArgsBuf) в сях:
CString szCommand=cmdBuf;
if(szCommand == "clsApp")
{
PostMessage(WM_CLOSE, 0, 0);
}
OnFSCommand - это что ? А если флешка открыта в объекте типа tWebBrowser (Delphi) ? тогда как ?
Оригинал написал(а) Ezhy
OnFSCommand - это что ? А если флешка открыта в объекте типа tWebBrowser (Delphi) ? тогда как ?
OnFSCommand - это обработчик сообщений передаваемых от ActiveX'a Flash, имеет два параметра LPCSTR cmdBuf(случае это первый параметр в fscommand- т.е. "clsApp" ) и LPCSTR szArgsBuf (в данном случае второй параметр не передается, но в нем можно передать дополнительную инфу для блока обработчика, например список переменных и др.).
:rolleyes: А на счет Delphi я в нем не силен, незнаю.
;) Ищи ф-ю похожую на описанную выше и имеющую два параметра
В Делфе все будет точно так же, если ты будешь использовать ActiveX flash-компонент. А ты, как я понимаю, открываешь флеш-мувик через TWebBrowser, который просто умеет ее воспроизвести правильно. Он доступа к управлению flash тебе не даст, разве что, давать ему на загрузку хтмль-ый файл где поднимаеться эта флэшка и есть наобходимый код для ее нормального фунциклирования (но это уже из области программирования для Web). Если же ты хочень иметь какие-то элементарные функции управления и взаимодействия с flah-мувиком, используй TShockwaveFlash или что-то похожее, импортируемое из ActiveX-го компонента Flash. Подробнее ищи о взаимодействии Delphi и Flash в инете.
Во вложении небольшой help.
Это все хорошо, но задача такова:
Форма Дельфи, на ней TWebBrowser, а в нем - флешка.
Нажимаешь на флешке кнопку и все закрывается (например, послать событие WM_CLOSE дельфовому окну).
Какие будут предложения ?...
А как ты соеденяешь флэку с TWebBrowser? Я, хоть и работал с Delphi, но использовать TWebBrowser не приходилось.
В любом случаем, кроме варианта с html-ым файлом, другого ничего не вижу. При условии, что эту флешку написал ты, иначе этот способ не поможет. Способ, как я уже говорил, заключается в том, что во флешке, при нажатии на кнопочку, ты через FSCommand отсылаешь какую-нибудь условную команду "delphi_zakroysa" :D . Потом пишешь html'ку, которая эту флэшку загружает и может обработать твою команду "delphi_zakroysa". Обработка этой команды должна заключаться в посылке уже библиотечной функции JS - функции закрытия окна эксплорера, где эта функция описана.
Теперь, теоретически (не знаю, не пробовал), что-то должно произойти в TWebBrowser. Он или получит сам сообщение на закрытие или получит какое-нибудь сообщение на закрытие окна html, которое в нем было(c flash). Повторяю - я это только так себе представляю, а будет ли реально TWebBrowser как-то реагировать на то, что внутри него была запущена на исполнение команда JS на закрытие, я не знаю. Так вот, если будет, :D то теперь без проблем обрабатываешь уже событие от TWebBrowser и делаешь Close всей форме (разумееться, предусмотрев все необходимые прверки, чтобы это событие не сгенерировалось при закрытии TWebBrowser по завершению работы программы). Если это все будет работать - тебе повезло, другого способа я не вижу (в случае использования TWebBrowser).
Если флешка чужая и ни каких сообщений при нажатии на кнопку наружу не посылает, то тут уже ничего не поможет.
Ей можно только любоваться.
Не понятно, на кой тебе здался TWebBrowser. Тебе именно он нужен? Просто использование TShockwaveFlash не подойдет?
Если без TWebBrowser, то можно отловить нажатие на всем мувике. Как это сделать можно глянуть у TShockwaveFlashEx (http://www.delphiflash.com/codelib2.html#a3)
У меня такая задача:
В TWebBrowserе есть HTML - страница с влешью - таково задание.
На флеше давишь на кнопку и все закрывается (передается комманда проге на дельфе).
Предложения есть ?
У 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;
Всем впасибо, кто принял участие !!!
Может еще кто-то что-то придумает ?..
Может еще кто-то что-то придумает ?..
Что, так тоже не подходит? :D
Что ты !!!
Очень даже подходит !! Спасибо огромное !!!
А вдруг кого еще гениальная мысль осенит ?!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.