Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2008, 19:21   #1
cartman315
 
Регистрация: 18.01.2008
Сообщений: 4
Вопрос интеграция flash.ocx

Здраствуйте.Большая просьба не пинать знаю что этот вопрос наверняка обсуждался на многих форумах, но найти ничего конкретного так и не смог, везде предлагают компонент TFlashPlayerControl, который стоит денег .
Вопрос следующий:
Имеем програмное обеспечение написанное на делфи с интерфейсом в виде флэш-ролика. Как можно интегрировать flash.OCX в прогу (желательно в качестве ресурса, но подойдет и вариант рядом с exeшником его положить), чтобы его функциями можно было пользоваться в проекте независимо от того какая версия флеш-плеера установлена в системе. Буду благодарен за любые ответы и ссылки по данному вопросу.
cartman315 вне форума Ответить с цитированием
Старый 18.01.2008, 19:52   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Мой любимый хэлп Дельфей, смотрим "Using the Import ActiveX dialog"...
mihali4 вне форума Ответить с цитированием
Старый 19.01.2008, 14:24   #3
cartman315
 
Регистрация: 18.01.2008
Сообщений: 4
По умолчанию

Возможно я не совсем корректо объяснил ситуацию, но меня интересует интеграция файла flash.ocx именно в приложение, а не импортирование активХ в делфи.
Просто возникает такая проблема: если на компе более новая версия этого файла (н-р: flash9e.ocx), то данные из приложения во флеш-ролик не передаются, т.е. SetVariable перестает работать.
cartman315 вне форума Ответить с цитированием
Старый 21.01.2008, 00:51   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Оригинально. Я думал, вы меня поймете.
Окромя VCL, дельфи может использовать все возможности операционной системы, не так ли?
А вот дабы избежать проблемы более новых версий используемых системой компонентов вам и нужно использовать именно ссылки на них. И то - это не гарантия...
Извините, но если вы стали использовать новую версию винды, у которой изменились адреса вызовов каких-либо апишных функций... Вы к кому аппелировать будете - к Майкрософту?
Увы, участь программиста незавидна - ему все все время приходится подстраиваться под изменения среды, ддя которой его программы разрабатываются. От этого никуда не денешься. (Ну только если разработать свою, более привлекательную, нежели Windows, операционку, что, опять-таки "УВЫ" - нереально (уж слишком все привыкли...)).
Я, невзирая на более, чем 20-летний опыт работы в области программирования, за это не возьмусь (прошел, знаете ли, период, когда "я все могу, только скажите - что нужно-то?")
Именно поэтому приходится делать ссылки...
А там - как бог пошлет...
Увы, другой, более эффективный способ, мне неведом... Буду весьма рад, если молодые коллеги меня не то чтобы опровергнут, но подправят...
Очень надеюсь, ибо на нашем форуме светлых голов ох, как хватает!

Последний раз редактировалось mihali4; 21.01.2008 в 00:55.
mihali4 вне форума Ответить с цитированием
Старый 21.01.2008, 08:40   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ух, Михалыч, тя понесло...
По теме: мне кажется что луче будет перевести флеш-ролик в экзешник и запускать его как "стороннее приложение". При необходимости можно даже вклеить его окно в свою форму после запуска, а насчет импорта, тут ИМХО без него не обойтись, разве что делать это програмно, жаль что не помню точно как это но погуглив можно найти об этом статью.

Вот тут повспоминал: мол мона загружать ОСХ через LoadLibrary и вызвать из нее DllGetClassObject с GUID-ом необходимого класса.
Ну еще CoCreateInstance() должно помочь
I'm learning to live...

Последний раз редактировалось Stilet; 21.01.2008 в 08:58.
Stilet вне форума Ответить с цитированием
Старый 24.01.2008, 15:17   #6
cartman315
 
Регистрация: 18.01.2008
Сообщений: 4
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А вот дабы избежать проблемы более новых версий используемых системой компонентов вам и нужно использовать именно ссылки на них.
Именно поэтому приходится делать ссылки...
А можно поподробнее про ссылки
cartman315 вне форума Ответить с цитированием
Старый 24.01.2008, 22:01   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Не берусь гарантировать 100% результат (вдруг конфликты обнаружатся?).
Но ведомый мне вариант "рядом" таков:
Код:
{Тот .OCX, который вы хотите использовать, 
должен быть в каталоге вашей программы или скопирован 
в системную папку. Его нужно зарегистрировать}
{Регистрация OCX}
// Выбираем тот или иной каталог
// set LibraryDir 
// LibraryDir := ExtractFilePath(Application.ExeName); 
// or
// LibraryDir := SystemDir;

aHandle := LoadLibrary(PChar(LibraryDir + 'flash.ocx'));
if ( aHandle >= 32 ) then
begin
 aFunc := GetProcAddress( aHandle, 'DllRegisterServer' );
 if Assigned( aFunc ) then 
  begin
   GetShortPathName( PChar(LibraryDir + 'flash.ocx'), aShortPath, sizeOf(aShortPath));
   aCommand := Format( '%s\regsvr32.exe /s %s', [SystemDir, aShortPath] );
   WinExecAndWait32( aCommand, SW_HIDE );
  end; 
 FreeLibrary( aHandle );  
end;
Теперь ваша программа будет ссылаться на вами же установленный .ОСХ...
Можете развить тему и предусмотреть в своей программе поиск самой новой версии на
ShockwaveFlash
Правда, отдельный вопрос - как его "доставать" из инсталлятора...

Второй вариант - в ресурсах. На примере связанной пары:
Пишем простой текстовик с именем flash.rc:
SHOCKWAVEFILE RCDATA myfile.swf
SHOCKWAVEOCX RCDATA swflash.ocx
и компилируем его во flash.res.
Дальше - больше:
Код:
uses 
  ShockwaveFlashObjects_TLB; // чтобы автоматом использовался

implementation 

{$R *.DFM} 
{$R flash.res} // наш новый ресурс 
{...} 

procedure TForm1.FormCreate(Sender: TObject); 
var 
  SystemDir: array[0..MAX_PATH] of Char; 
  SWFDir, AppDir: string; 
  Fres: TResourceStream; 
  Ffile: TFileStream; 
begin 
  GetSystemDirectory(@SystemDir, MAX_PATH); 
  SWFDir := SystemDir + '\macromed\flash\'; 
  GetDir(0, AppDir); // наш каталог 
  //проверяем существование swflash.ocx 
  if FileExists(SWFDir + 'swflash.ocx') = False then 
  begin 
    //при необходимости создаем каталог 
    {$i-} //чтоб компилятор поменьше ругался 
    MkDir(SystemDir + '\macromed'); 
    MKDir(SystemDir + '\macromed\flash'); 
    {$i+} 
    Fres := TResourceStream.Create(0, 'SHOCKWAVEOCX', RT_RCDATA); 
    Ffile := TFileStream.Create(SWFDir + 'swflash.ocx', fmCreate); 
    Ffile.CopyFrom(Fres, Fres.Size); 
    Fres.Free; 
    Ffile.Free; 
    //тоже регистрируем
    WinExec(PChar('regsvr32 /s ' + SWFDir + 'swflash.ocx'), SW_HIDE); 
  end; 
  // вытаскиваем флэш из ресурса 
  Fres := TResourceStream.Create(0, 'SHOCKWAVEFILE', RT_RCDATA); 
  Ffile := TFileStream.Create('flashmovie.swf', fmCreate); 
  Ffile.CopyFrom(Fres, Fres.Size); 
  Fres.Free; 
  Ffile.Free; 
  //сопоставляем флэш объекту TShockwaveFlash 
  FlashMovie.Movie := AppDir + '\flashmovie.swf'; 
end; 
//Можно еще сделать FlashMovie.Menu:=False; чтоб меню не вываливалось

Последний раз редактировалось mihali4; 24.01.2008 в 22:46.
mihali4 вне форума Ответить с цитированием
Старый 26.01.2008, 11:18   #8
cartman315
 
Регистрация: 18.01.2008
Сообщений: 4
По умолчанию

To mihali4:
Большое спасибо.
А перед регистртрацией flash.ocx нужно отменять регистрацию flash9e.ocx?
Еще один вопрос:
После обновления флеш-плеера, в Делфи не удается импортировать старый активХ компонент, т.е. заходим в Component-> Import ActiveX Control и пытаемся переустановить ShockwaveFlash...Ничего не выходит он даже удалятся не хочет. Чего делать?

Последний раз редактировалось cartman315; 26.01.2008 в 12:57.
cartman315 вне форума Ответить с цитированием
Старый 21.06.2010, 14:02   #9
Obsever0
Пользователь
 
Регистрация: 03.06.2010
Сообщений: 19
По умолчанию

Можно как-нибудь обойти регистрацию в реестре? Ведь может не быть прав это сделать?
Obsever0 вне форума Ответить с цитированием
Старый 21.06.2010, 14:34   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Можно как-нибудь обойти регистрацию в реестре?
Купи пакер типа BoxedApp, он позволит сделать запортабленное приложение, без нужды курочить реестр.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
интеграция с MS WORD BESS Общие вопросы Delphi 4 05.08.2008 12:42
Интеграция сайта с платежной системой (PHP) AndreyAndrey Фриланс 1 02.11.2007 01:41
Access и Delphi? Интеграция БД №1 Archie БД в Delphi 3 28.03.2007 23:16