Разработчики, использующие Flash в приложениях для Windows, конечно, уже знают о Flash ActiveX. Но, к сожалению, используя Flash ActiveX, программист сталкивается с рядом неприятных моментов, таких, как:
Можно, конечно, сохранять все необходимое для загрузки во временные файлы, но что делать, если хочется скрыть свое творчество, да и кто знает, обладает ли достаточными правами тот пользователь системы Windows, под профилем которого работает приложение? Ведь прав на запись файлов может и не быть.
Недавно для таких проблем появилось решение. Наши соотечественники из компании Softanics разработали библиотеку FlashPlayerControl, представляющую из себя "умную" обертку вокруг Flash ActiveX.
Теперь появилась возможность использовать любой требуемый swflash.ocx/flash.ocx. Для этого достаточно при старте приложения указать, откуда загружать код swflash.ocx/flash.ocx. А загружать можно откуда угодно: из файла, находящегося в одном каталоге с приложением, или прямиком из ресурсов. При этом не создаются временные файлы и не происходит регистрации Flash ActiveX'а. А значит, нет проблем с правами пользователя. С помощью FlashPlayerControl также можно загружать флэш-ролики непосредственно из памяти.
Решение существует в виде двух редакций: для Delphi и как Windows DLL. Более подробную информацию можно получить на сайте разработчика, www.FlashPlayerControl.com (на Английском).
Данная разработка является платной. Конечно же, для соотечественников существуют скидки и возможность оплаты удобными способами (WM, почтовый/банковский перевод и т.д.). За более полной информацией обращайтесь по адресу: support (at) flashplayercontrol.com
// наверное, здесь должен быть текст "На правах рекламы", но Ф. Потрошитель продолжает оставаться некоммерческим проектом ;)
Интересная разработка, но ничего военного в ней нет. Такой проблемой я тоже занимался полтора года назад для CD презентаций где требовалось наличие не только flash но и кодеков для видео. Не вдаваясь в глубоко в архитектуру Win32(в которой я много логически понять не могу :) ), все это решаеться довольно банально - простой динамической загрузкой dll(работает и для ocx) при старте приложения где это юзается. Итого получаеться несколько строчек кода. Так что кому надо попробуйте все должно получиться!
Нет ничего хитрого, если не учитывать то, что можно грузить flash.ocx прямо из ресурсов проги, не сохраняя все во временный файл. Плюс загрузка мувиков из стримов - без временных файлов - не решается довольно банально, согласитесь ;) Спасибо!
А как к этому относится Макромедия? Получается что, купивший продукт у Softanics, сам и отвечает за юридические последствия. Есть ли Softanics какое либо не виртуальное имущество - на случай регрессивного иска?
Я вставлял flash в PowerPoint, потом презентацию проверял на машине на которой не было флеша. И все работало. Запускал с компакт диска.
А как к этому относится Макромедия? Получается что, купивший продукт у Softanics, сам и отвечает за юридические последствия. Есть ли Softanics какое либо не виртуальное имущество - на случай регрессивного иска? ---
Сам отвечает, конечно. Единственное, что может предъявить Макромедия - это распространение swflash.ocx/flash.ocx вместе с приложением вопреки лицензии. Но, что касается загрузки мувиков из памяти, - тут все чисто, ничего не нарушается.
[]распространение swflash.ocx/flash.ocx [/] - а не думали спросить макромедию? мне кажется они не особо против распространения плеера и дадут разрешение без проблем.
- а не думали спросить макромедию? /// Макромедия продает лицензии на распространение плеера (в частности на СД), и если, я куплю, то зачем мне Softanics? Между протчим, по словам юристов, Макромедия одна из самых "стервозных" фирм. В своей лицензионной политике она всегда оставляет для себя лазейки для претензий ко всем и вся.
В заметке написано, зачем: "Чтобы flash-приложение нормально работало, требуется уже установленный в системе Flash ActiveX. Конечно, можно добавить в инсталляцию установку Flash ActiveX, но, если приложение распространяется на компакт-дисках и запускается непосредственно с CD, то едва ли такое решение приемлемо". regsvr32 flash.ocx, даже если Лицензия у вас в кармане, никто не отменял. Плюс уже упомянутая непосредственная загрузка мувиков.
Кстати, задал аналогичный вопрос (насчет распространения flash.ocx) разработчикам SWFKit. Обсуждение можно посмотреть тут: http://www.swfkit.com/forum/thread_1_881.html
http://www.multidmedia.com/software/zinc/index.php програма загружает DLL и flash может сними работат ну а отсюда толка пут в перод....
Скажите, как избавиться от всплывающего меню (при клике правой кнопкой мыши на встроенном в приложение ролике), если отменить в свойствах контролла, она все равно остается (в урезанном виде)? средствами c++ builder 5
Скажите, как избавиться от всплывающего меню? -------------------------------------------- Можешь полесть в дебри COM интерфейсов, но у меня это не сработало под NT. Проще перехватить сообщение:
//Header //----- public: WNDPROC OldProcFlash;
//Implementation LRESULT CALLBACK NewProcFlash(HWND hWnd, UINT msg, WPARAM w, LPARAM l) { if((msg == WM_RBUTTONDOWN)||((msg == WM_KEYDOWN)&&(w == 93)))msg = 0;
return CallWindowProc((FARPROC)Form1->OldProcFlash, hWnd, msg, w, l); }
//**************** //в конструкторе например OldProcFlash= (WNDPROC)SetWindowLong(Flash->Handle, GWL_WNDPROC, (long)NewProcFlash);
От вам проигрыватель :-)
#import "ActiveX\flash.ocx" #include #include #include #include CComModule _Module;
#pragma comment(lib,"atl") using namespace ShockwaveFlashObjects;
IShockwaveFlash* shwaveflash;
LRESULT CALLBACK FlashWindowProc(HWND hWnD, UINT message, WPARAM wParam, LPARAM lParam){ switch(message){ case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnD, message, wParam, lParam); } return 0; }
int APIENTRY WinMain (HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){
//////////////// CREATE WINDOW WNDCLASS wclFlash;
wclFlash.hInstance=NULL; wclFlash.lpszClassName = L"AtlWin"; wclFlash.lpfnWndProc = FlashWindowProc; wclFlash.style=CS_HREDRAW|CS_VREDRAW; wclFlash.hIcon=NULL; wclFlash.hCursor=NULL; wclFlash.lpszMenuName=NULL; wclFlash.cbClsExtra=0; wclFlash.cbWndExtra=0; wclFlash.hbrBackground=(HBRUSH)GetStockObject (BLACK_BRUSH); RegisterClass (&wclFlash);
HWND flashHWND = CreateWindowEx(0,L"AtlWin",NULL,WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, NULL, NULL, NULL, NULL);
HRESULT hr = S_OK; hr = CoInitialize(NULL); if(hr != S_OK) return false; if(!AtlAxWinInit()) return false;
hr = CoCreateInstance(__uuidof(ShockwaveFlash),0,CLSCTX_ALL, __uuidof(IShockwaveFlash), (void **)&shwaveflash); if(hr != S_OK) return hr;
AtlAxAttachControl(shwaveflash, flashHWND, 0) shwaveflash->PutMovie("D://clock.swf");
while(1){ if(GetMessage (&msg, NULL, 0, 0)){ TranslateMessage (&msg); DispatchMessage (&msg); } }
shwaveflash->Release();
AtlAxWinTerm(); CoUninitialize(); }
Усё, и за енто 299$ берут, ;-)