Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

получить доступ к MacromediaFlashPlayerActiveX

386
09 ноября 2007 года
newcss
297 / / 05.04.2005
Вообщем этот вопрос меня мучает очень давно.... Как получить доступ к элементам флеш?
Народ как-то это делает.... Добрался до того что флеш имеет тип
MacromediaFlashPlayerActiveX. Покапавшись в нете нашел
http://it4business.ru/forum/index.php?showtopic=5283&pid=29031&st=0&#entry29031

Там пишут что Flash приложения довольно закрытые, и доступ к их контролам можно получить только через плагин MSAA если они реализуют интерфейс IAccessible.

Ребят. что такое IAccessible ? Что такое MSAA ?
----------
Покопался еще немного....
Говорят что можно через BHO получить доступ к элементам флешки, кнопчками и тому подобному.
Что такое BHO ?
33K
09 ноября 2007 года
smorodov
6 / / 09.11.2007
Menu Component->Import ActiveX Control в списке Macromedia ShockWaveFlash устанавливаем компонент.TShockwaveFlash появляется в ActiveX.
А дальше работаем со свойствами Пример на моем сайте [email]smorodov@narod.ru[/email] в программе симуляторе промышленного контроллера
компилятор: C++Builder 6.Файл:robot.cpp Дерзай:)
текст его ниже:

#include <vcl.h>
#pragma hdrstop

#include "robot.h"
#include "EditU1.h"
#include "EditU2.h"
#include "EditU3.h"
#include "Unit4.h"
#include "Unit6.h"
#include "Unit7.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "ShockwaveFlashObjects_OCX"
#pragma resource "*.dfm"
TRobotForm *RobotForm;
bool s0=1,s1=0;
bool PrevCommand[3];
bool Sensors[6];
int position[3];
int n=0;
//---------------------------------------------------------------------------
__fastcall TRobotForm::TRobotForm(TComponent* Owner)
: TForm(Owner)
{
ShockwaveFlash1->Movie=ExtractFilePath(Application->ExeName)+"stanok.swf";
ShockwaveFlash1->GotoFrame(0);
ShockwaveFlash1->Stop();

for (int i=0;i<3;i++)
{
position=2;
Command=false;
}

}

//---------------------------------------------------------------------------

void __fastcall TRobotForm::Display(void)
{
TColor Col[]={clWhite,clGreen};
bool change=false;

if(RobotForm->Visible)
{
for (int i=0;i<6;i++)
{
if (Form2->I!=Sensors){change=true;}
Form2->I=Sensors;
}
if(change){
Form1->StateChanged();
}
}

}

//---------------------------------------------------------------------------



void __fastcall TRobotForm::Panel1Resize(TObject *Sender)
{
//
ShockwaveFlash1->Refresh();
Panel1->Invalidate();
}
//---------------------------------------------------------------------------


void __fastcall TRobotForm::ProcessStep(void)
{
n=0;
if(Command[n] && position[n]<49){position[n]++;}
if(!Command[n] && position[n]>1){position[n]--;}
if(position[n]<4 && !Sensors[0]){Sensors[0]=true;}
if(position[n]>=4 && Sensors[0]){Sensors[0]=false;}

if(position[n]>47 && !Sensors[1]){Sensors[1]=true;}
if(position[n]<=47 && Sensors[1]){Sensors[1]=false;}

ShockwaveFlash1->SetVariable(StringToOleStr("all.h"),StringToOleStr(IntToStr(position[n])));

n=1;
if(Command[n] && position[n]<49){position[n]++;}
if(!Command[n] && position[n]>1){position[n]--;}
if(position[n]<4 && !Sensors[2]){Sensors[2]=true;}
if(position[n]>=4 && Sensors[2]){Sensors[2]=false;}

if(position[n]>47 && !Sensors[3]){Sensors[3]=true;}
if(position[n]<=47 && Sensors[3]){Sensors[3]=false;}
ShockwaveFlash1->SetVariable(StringToOleStr("all.stanok.l"),StringToOleStr(IntToStr(position[n])));

n=2;
if(Command[n] && position[n]<49){position[n]++;}
if(!Command[n] && position[n]>1){position[n]--;}
if(position[n]<4 && !Sensors[4]){Sensors[4]=true;}
if(position[n]>=4 && Sensors[4]){Sensors[4]=false;}

if(position[n]>47 && !Sensors[5]){Sensors[5]=true;}
if(position[n]<=47 && Sensors[5]){Sensors[5]=false;}
ShockwaveFlash1->SetVariable(StringToOleStr("all.stanok.shvat.s"),StringToOleStr(IntToStr(position[n])));
Display();
Sleep(30);
}
void __fastcall TRobotForm::Button1Click(TObject *Sender)
{
for (int i=0;i<3;i++)
{
position=1;
Command=false;
}
int n=0;
ShockwaveFlash1->SetVariable(StringToOleStr("all.h"),StringToOleStr(IntToStr(position[n])));
n=1;
ShockwaveFlash1->SetVariable(StringToOleStr("all.stanok.l"),StringToOleStr(IntToStr(position[n])));
n=2;
ShockwaveFlash1->SetVariable(StringToOleStr("all.stanok.shvat.s"),StringToOleStr(IntToStr(position[n])));

ProcessStep();
//ShockwaveFlash1->Free();
bool change=false;
for (int i=0;i<6;i++)
{
if (Form2->I!=Sensors){change=true;}
Form2->I=Sensors;
}
if(change){
Form1->StateChanged();
}
Display();
}
//---------------------------------------------------------------------------

void __fastcall TRobotForm::FormClose(TObject *Sender,
TCloseAction &Action)
{
Form1->iLedMatrix4->IndicatorActive[0][1]=false;
}
//---------------------------------------------------------------------------
386
09 ноября 2007 года
newcss
297 / / 05.04.2005
Хммм, спс. ща посматрю =)
-------
Menu Component->Import ActiveX Control в списке Macromedia ShockWaveFlash устанавливаем компонент.

Чет ненашел я такого компонента =(
У меня 2006 борланд
246
09 ноября 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: newcss
Вообщем этот вопрос меня мучает очень давно.... Как получить доступ к элементам флеш?


а если пройтись по коллекции и получить его IDispatch?

Цитата: newcss

Покопался еще немного....
Говорят что можно через BHO получить доступ к элементам флешки, кнопчками и тому подобному.
Что такое BHO ?


Browser Helper Object - такой плагин к IE. Никаких преймуществ по доступу к Флэшам явно не имеет.

386
09 ноября 2007 года
newcss
297 / / 05.04.2005
Цитата: GIZMO
а если пройтись по коллекции и получить его IDispatch?


Browser Helper Object - такой плагин к IE. Никаких преймуществ по доступу к Флэшам явно не имеет.




А что нам даст пройтись по коллекции? По коллекции чего? Кнопочек?
Или всех элементов? iHTMLElementCollection ? =)

11
09 ноября 2007 года
oxotnik333
2.9K / / 03.08.2007
CComPtr<IHTMLElementCollection>spEmbCol;
CComPtr<IHTMLEmbedElement>spEmbEl;
CComPtr<IDispatch>spDisp;
spDoc->get_embeds(&spEmbCol);
VARIANT ind;
ind.vt = VT_I4;
long Emb_ln;
spEmbCol->get_length(&Emb_ln);
for (long i=0; i<Emb_ln; i++) // EMBLED's
{
ind.lVal = i;
if (spDisp) spDisp.Release();
spEmbCol->item(ind,ind, &spDisp);
spDisp->QueryInterface(IID_IHTMLEmbedElement, (LPVOID*)&spEmbEl);
spEmbEl-> /// c ним и работать
spDisp.Release();
spEmbEl.Release();
}
386
09 ноября 2007 года
newcss
297 / / 05.04.2005
да я знаю про IHTMLElementCollection.... меня мучает другой вопрос.... Элемент флешки, а иммено кнопочка или формочка относятся к флешу а не ШТМЛ Элементу....
Лан, сие моно проверить только практическим путем...
386
09 ноября 2007 года
newcss
297 / / 05.04.2005
Провел эксперимент... Получил доступ к ШТМЛ где сидит флешка...
Emb_ln почему-то равень нулю... Вывел ШТМЛ, <embed - почему то не оказалось в коде.... Открыл код страницы через браузер, <embed там есть.... фантастика =(
11
10 ноября 2007 года
oxotnik333
2.9K / / 03.08.2007
код я скопипастил из своего рабочего проекта, у меня работает на 100%.
доступ к самому элементу либо через файл spEmbEl->get_src(...)
либо через его IDispatch
386
10 ноября 2007 года
newcss
297 / / 05.04.2005
Цитата: oxotnik333
код я скопипастил из своего рабочего проекта, у меня работает на 100%.
доступ к самому элементу либо через файл spEmbEl->get_src(...)
либо через его IDispatch


Где компонент Macromedia ShockWaveFlash взять?

11
10 ноября 2007 года
oxotnik333
2.9K / / 03.08.2007
Component->Import ActiveX Control ->Shockwave Flash (Version 1.0)
библиотека сама находится (у меня):
C:\winwows\system32\Macromed\Flash\Flash9b.ocx
проинсталил себе... работает. Только жаль хелпа по нему нет (в ВСВ)
386
10 ноября 2007 года
newcss
297 / / 05.04.2005
Shockwave Flash , во нашел, че с ним сделать?
Create Unit
или
Add unit to proect?
----------------------------
Linker Error =(
11
10 ноября 2007 года
oxotnik333
2.9K / / 03.08.2007
Install ActiveX
на вкладке (сверху у ВСВ) ActiveX появится ShockwaveFlash
его на форму кидаешь и работаешь...
386
11 ноября 2007 года
newcss
297 / / 05.04.2005
Install или Import ? У меня 2006 борланд, не 6 =(...
11
11 ноября 2007 года
oxotnik333
2.9K / / 03.08.2007
у меня 6-й я делал Install
386
21 ноября 2007 года
newcss
297 / / 05.04.2005
Errors:
// Error creating palette bitmap of (TFlashProp) : Server C:\Windows\system32\Macromed\Flash\Flash9b.ocx contains no icons
// Error creating palette bitmap of (TFlashObjectInterface) : Server C:\Windows\system32\Macromed\Flash\Flash9b.ocx contains no icons
// ************************************************************************ //


Вот что выдает =( при импорте. И не добавляется в панель ActiveX. Я так понимаю что не может найти иконку. Где взять иконку эту? =(
386
01 декабря 2007 года
newcss
297 / / 05.04.2005
Продолжаю мучать Flash.
Вот к чему пришел -
ShockwaveFlash - тут нужно знать имена объектов и слоев чтобы ими управлять. Мне же ничего не известно.
До самой флешки получилось достучаться только так
iDoc2Area->get_applets(&iCol); Т.к. интерфейс на IHTMLEmbedElement выдавать ни в какую не хочет
386
01 декабря 2007 года
newcss
297 / / 05.04.2005
ТЕперь проблема состоит в том чтобы программно узнать какие есть элементы во флешке... точнее их имена, ну или хотя бы хоть как-то получить доступ к ним...
386
06 декабря 2007 года
newcss
297 / / 05.04.2005
Component->Import ActiveX Control ->Shockwave Flash (Version 1.0)
Вот это у меня не вышло в Borland 2006. Дык я пошел другим путем.

1)Идем C:\WINDOWS\system32\Macromed\Flash\Flash9b.ocx и копируем в папочку с нашим проектом
2) в проекте пишем #import "Flash9b.ocx". Пытаемся собрать (F9)
3) Смотрим в папочку с проектом там создалось
Flash9b.tlh
Flash9b.tli
4)Вместо #import "Flash9b.ocx" пишем #include "Flash9b.tlh" Пытаемся собрать.
5) Пишет кучу ошибок в comdef.h. Лезем в папку с борландом и копируем comdef.h к себе в папочку с проектом. Собираем. Выводит кучу ошибок. На местах ошибок ставим // =), т.е. комментируем
6) Пишем using namespace ShockwaveFlashObjects;
и спокойно создаем данный объект =)
IShockwaveFlash* shwaveflash;

ВуалЯ! =)


Правда после всех этих махинаций у меня что-то интерфейсы глючить стали и борланд стал ругаться даже на IWebBrowser2* pBrowser;
вот такую запись хотя до этого все ништяк работало =)
11
06 декабря 2007 года
oxotnik333
2.9K / / 03.08.2007
Цитата:
Правда после всех этих махинаций у меня что-то интерфейсы глючить стали и борланд стал ругаться даже на IWebBrowser2* pBrowser;
вот такую запись хотя до этого все ништяк работало =)



надо думать что все через ж.. будет работать, если поотключал все в хедерах борландовских :)
для того чтоб не копировать в папку проекта в опциях есть пути откуда брать хедеры, библиотеки и т.п.

246
06 декабря 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: newcss

2) в проекте пишем #import "Flash9b.ocx".



The #import directive is included for Microsoft compatibility only. Its use is generally not recommended. You should use the Import Type Library command or TLIBIMP.EXE when importing type libraries.

В коммандной строке:
[path]\TLIBIMP.EXE [path]\Flash9b.ocx - Enter.
Если не будешь ставить в палитру нужны только: ShockwaveFlashObjects_TLB.cpp и ShockwaveFlashObjects_TLB.h

386
06 декабря 2007 года
newcss
297 / / 05.04.2005
Скачал я ЗИП этот.....
В проекте прописал #include "ShockwaveFlashObjects_OCX.h"
И добавил СППешник



[C++ Error] ShockwaveFlashObjects_OCX.h(46): E2209 Unable to open include file 'ShockwaveFlashObjects_TLB.h'
[C++ Error] ShockwaveFlashObjects_OCX.h(97): E2303 Type name expected
[C++ Error] ShockwaveFlashObjects_OCX.h(97): E2139 Declaration missing ;
[C++ Error] ShockwaveFlashObjects_OCX.h(112): E2303 Type name expected
[C++ Error] ShockwaveFlashObjects_OCX.h(112): E2238 Multiple declaration for 'TShockwaveFlash::TCOMIShockwaveFlash'
[C++ Error] ShockwaveFlashObjects_OCX.h(97): E2344 Earlier declaration of 'TShockwaveFlash::TCOMIShockwaveFlash'
[C++ Error] ShockwaveFlashObjects_OCX.h(112): E2139 Declaration missing ;
[C++ Error] ShockwaveFlashObjects_OCX.h(113): E2303 Type name expected
[C++ Error] ShockwaveFlashObjects_OCX.h(113): E2139 Declaration missing ;
[C++ Error] ShockwaveFlashObjects_OCX.h(172): E2303 Type name expected
[C++ Error] ShockwaveFlashObjects_OCX.h(172): E2139 Declaration missing ;
[C++ Error] ShockwaveFlashObjects_OCX.h(277): E2303 Type name expected
[C++ Error] ShockwaveFlashObjects_OCX.h(277): E2139 Declaration missing ;
[C++ Error] ShockwaveFlashObjects_OCX.h(283): E2303 Type name expected
[C++ Error] ShockwaveFlashObjects_OCX.h(283): E2139 Declaration missing ;
[C++ Error] ShockwaveFlashObjects_OCX.h(288): E2293 ) expected
[C++ Error] ShockwaveFlashObjects_OCX.h(299): E2316 'IServiceProviderPtr' is not a member of 'Shockwaveflashobjects_tlb'
[C++ Error] ShockwaveFlashObjects_OCX.h(299): E2293 ) expected
[C++ Error] ShockwaveFlashObjects_OCX.h(293): E2268 Call to undefined function 'GetDefaultInterface'
[C++ Error] ShockwaveFlashObjects_OCX.h(293): E2288 Pointer to structure required on left side of -> or ->*



Воообщем вот стока всего выдает
11
06 декабря 2007 года
oxotnik333
2.9K / / 03.08.2007
поставь ВСВ6 и не парься
http://okroshka.nnm.ru/borland_c_builder_60_enterprise_suite
246
06 декабря 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: newcss
Скачал я ЗИП этот.....
В проекте прописал #include "ShockwaveFlashObjects_OCX.h"
И добавил СППешник


ведь написано:
нужны ShockwaveFlashObjects_TLB.cpp и ShockwaveFlashObjects_TLB.h
Не надо его в палитру пихать! Хости его самостоятельно!

... а у меня и в палитру пихается ЫЫ :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог