C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
как "засунуть" пргу в прогу, как "засунуть" пргу в прогу
joynter
Отправлено: 26.03.2004, 21:28


Станционный диспетчер

Группа: Участник
Сообщений: 137



как это делается?
Aptem
Отправлено: 27.03.2004, 04:55


Мастер участка

Группа: Участник
Сообщений: 349



Берешь одну прогу и пихаешь в другую... smile.gif ШУТКА !!!

Растолкую по-подробнее, что ты имеешь ввиду. Хочешь запустить программу из другой программы или что... ??? НЕПОНЯТНО !
joynter
Отправлено: 27.03.2004, 12:07


Станционный диспетчер

Группа: Участник
Сообщений: 137



имеется в виду флеш плейер, окно которого является частью моей формы. Я пробовал через ОЛЮ, но в результате получается только отдельное окно флеш плейера. Используя .res файл — то же самое
klen
Отправлено: 27.03.2004, 15:01


Машинист паровоза

Группа: Участник
Сообщений: 239



Давай все подробно и по порядку, че ты хочешь сделать. Я делал рекламный диск. ТЗ стояло так, что мне пришлось вставить ActiveX компонент TShockwaveFlash в свою форму, ее выводить в полный экран. У меня все работало.
По сути получился WEB клиент написанный на флеше с графическими примочками и выполняемый программой в которой вставлен компонент флеш-проигрывателя.
Так было сделано потомучто писать графику руками програмно — я б повесился, а так пришлось только в FlashMX рекламный плакатик с кнопками нарисовать и все.

Итак, слушаю Вас внутриматочно.

Отредактировано klen — 27/03/2004, 16:04
joynter
Отправлено: 28.03.2004, 04:38


Станционный диспетчер

Группа: Участник
Сообщений: 137



В том , то бы вывести отдельное окно плейера на весь экран проблем нет. Интересно вот что : есть (в природе) такие вещи ,как SWF Decompiler и SWF Browser, так там окно плейера встроено в окно формы. Вот мне и интересно, каким образом это можно реализовать.
th1nG
Отправлено: 28.03.2004, 08:18


Дежурный стрелочник

Группа: Участник
Сообщений: 31



порыскай по тори мож найдёш компоненты для работы с флешей..
klen
Отправлено: 28.03.2004, 17:42


Машинист паровоза

Группа: Участник
Сообщений: 239



Я чето ниче не понял опять. А чем тебe TShockwaveFlash не нравится?? етож и есть окно проигрывателя, говоришь ему файл *.swf , вызываешь Play() и он тебе его проигрывает............еще вопрос — а куда еще можно встроить окно проигрывателя как не на форму (читай любой TWinControl)

Отредактировано klen — 28/03/2004, 18:46
joynter
Отправлено: 29.03.2004, 23:11


Станционный диспетчер

Группа: Участник
Сообщений: 137



Re: А чем тебe TShockwaveFlash не нравится??
Дык а где ж взять-то его ???
Мне бы ссылочку или на мыло joynter@yandex.ru (если можно)
klen
Отправлено: 29.03.2004, 23:31


Машинист паровоза

Группа: Участник
Сообщений: 239



РАААдной мой.. так бы и сказал что в этом проблема smile.gif

1. Заходишь в меню билдера

Component -> Import ActiveX Control

2. Выбираешь в списке ShockWave Flash , жмешь Install , тебе предложат выбрать вариан размешения — стандартный пакет или новый создать, я например всегда новый создаю, далее инсталируешь пакет, БИЛДЕР УУУМНЫЙ, КАК ВИНДОВС — ОН САМ ВСЕ СДЕЛАЕТ.
У тебя в закладке появится компонент TShockWave, смотриш хидерник который билдер сгенерит длянего — исчерпывающая информация как этим компонентом управлять (если ты знаешь что такое вообще Flash)

Вот и вся ссылка — OCX называется.

Если нада научу Flash'ый OLE сервер ставить на машину где его нет. Вдруг твоя программа на Виндах должна запустится где устаревшая версия или вообще проигрыватель не установлен.
joynter
Отправлено: 30.03.2004, 00:58


Станционный диспетчер

Группа: Участник
Сообщений: 137



Дядя Клен — научи пожалуйста.
Для установки флеш плейера я делал вот так:

#include "vcl.h"
#pragma hdrstop
#include "process.h"
#include "stdio.h"
#include "winbase.h"
#include "fstream.h"
#include "io.h"
#include "fcntl.h"
#include "registry.hpp"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGAUGES"
#pragma resource "*.dfm"
TForm1 *Form1;
TRegistry *reg=new TRegistry;
TRegistry *reg1=new TRegistry;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::InstallClick(TObject *Sender)
{
FILE *in, *out;
int handle = open("SAFlashPlayer.exe",O_RDONLY);
int size = filelength(handle);
close(handle);
in = fopen("SAFlashPlayer.exe", "rb");
out = fopen("c:\\Program Files\\SAFlashPlayer.exe", "wb");
long double countBytes;
for (countBytes=0;countBytes<=size;countBytes++)
{
fputc(fgetc(in), out);
CGauge1->Progress = 100*countBytes/size;

}
fclose(in);
fclose(out);
if(spawnlp(P_NOWAIT,"c:\\Program Files\\SAFlashPlayer.exe","qw.swf",NULL))
//ShowMessage("Fuck");
Sleep(2000);
SendMessage(FindWindow(NULL,"Macromedia Flash Player 7"), WM_CLOSE,0,0);
Install->Enabled = false;
Uninstall->Enabled = true;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::UninstallClick(TObject *Sender)
{
reg->RootKey = HKEY_CLASSES_ROOT;
reg1->RootKey = HKEY_LOCAL_MACHINE;
if (reg->KeyExists("\\ShockwaveFlash.ShockwaveFlash\\shell\\open\\command"))
// if (reg->KeyExists("\\Applications\\SAFlashPlayer.exe\\shell\\open\\command"))
if (reg->KeyExists("\\ShockwaveFlash.ShockwaveFlash\\DefaultIcon"))
// if (reg1->KeyExists("\\SOFTWARE\\Classes\\Applications\\SAFlashPlayer.exe"))
{
reg->DeleteKey("\\ShockwaveFlash.ShockwaveFlash\\shell\\open\\command") ;
reg->DeleteKey("\\Applications\\SAFlashPlayer.exe");
reg->DeleteKey("\\ShockwaveFlash.ShockwaveFlash\\DefaultIcon");
reg1->DeleteKey("\\SOFTWARE\\Classes\\Applications\\SAFlashPlayer.exe");
for(int i=100;i>=0;i--)
{
CGauge1->Progress = i;
Sleep(10);
}
DeleteFile("c:\\Program Files\\SAFlashPlayer.exe");
Install->Enabled = true;
Uninstall->Enabled = false;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormActivate(TObject *Sender)
{
reg->RootKey = HKEY_CLASSES_ROOT;
reg1->RootKey = HKEY_LOCAL_MACHINE;
if (reg->KeyExists("\\ShockwaveFlash.ShockwaveFlash\\shell\\open\\command"))
// if (reg->KeyExists("\\Applications\\SAFlashPlayer.exe\\shell\\open\\command"))
if (reg->KeyExists("\\ShockwaveFlash.ShockwaveFlash\\DefaultIcon"))
// if (reg1->KeyExists("\\SOFTWARE\\Classes\\Applications\\SAFlashPlayer.exe"))
{
//ShowMessage("Fuck");
Install->Enabled = false;
Uninstall->Enabled = true;
CGauge1->Progress = 0;
}
else {
Install->Enabled = true;
Uninstall->Enabled = false;
}

}
//---------------------------------------------------------------------------
возможно я не знаю что такое flash (вроде как с нею работал 3 года — но век живи век учись)? И за С++ сел только пол года назад (самоучка) — своих компонентов еще не научился делать.
а можно таки исходник приаттачить или на мыло ?

Отредактировано joynter — 30/03/2004, 02:51
Gedeon
Отправлено: 30.03.2004, 09:30


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (klen @ 30/03/2004, 00:33)
тебе предложат выбрать вариан размешения — стандартный пакет или новый создать, я например всегда новый создаю

И совершенно правильно, поскольку при сборке программы в конечном итоге это влияет на ее размер, так уж устроены в ВСВ линкер + компилер, что они влинковывают в ехе весь пакет, если даже из него используется только один компанент. Если бы все компоненты были в разных пакетах, то мы не имели бы такой раздутый ехе.

Отредактировано Gedeon — 30/03/2004, 10:33
klen
Отправлено: 30.03.2004, 11:45


Машинист паровоза

Группа: Участник
Сообщений: 239



Блин, мыло послать нимогу, скоко раз говорить — бомжы мы, нет у нас почтового сервера в сети, поэтому только забирать по HTTP почту умеее из далека , а делать времени нет — защита диссера через 2 месяца, все выкладываю здесь в нитках.

У тебя все правильно в принципе, так тоже наверно можно, но я не так делаю -
1 Рекомендую ставить не SAFlashPlayer.exe , а Flash.ocx — это библиотека с OLE с флешовым сервером. У меня он в папке C:\WINNT\system32\Macromed\Flash\flash.ocx

2 Я ленивый поэтому писсать столько кода мне было в лом.
Я брал просто копировал этот файл на машине на которой запускается приложение(директорию делал произвольную),
3 спомощью команды regsrv32 регистрировал flash.ocx. regsrv32 делает примерно тоже что твой код с реестром.
После этого клиент(компонент TShockWave) находит это OLE сервер и пользуется им smile.gif
Это все в несколько строчек вмещается.

Примера нет потомучто вин полетел месяц назад, все что нажил непочильным трудом......................поищу на работе, мож найду. Ту все просто, главное идею выкопать.

Флешь ээто круто — я от него стал тащится когда он XML стал поддерживать, счастье было когда я( не один конечно, серверную часть писали мои друзья на яве) написал Web клиента для интернет магазина, с возможностью его администрирования (хозин магазина имел перелом позвоночника и заниматься бизнесом мог только из дома) и все эта система(флешовый клиент как под Mac, Win, Solaris) — везде заработала где имеется плагин к флешовый браузеру. Получается мультиплатформенный клиент.

Я в своих программах и ассемблер и Flash иногда скрещщиваю! КОМПОНЕНТНЫЙ ПОДХОД — ИЗБАВЛЯЕТ ОТ ИЗОБРЕТЕНИЯ ВЕЛОСИПЕДА.

Удачи.

Отредактировано klen — 30/03/2004, 12:57
joynter
Отправлено: 31.03.2004, 00:09


Станционный диспетчер

Группа: Участник
Сообщений: 137



Спасибо.
Знать бы еще , что такое нитки — былоб вообще все замечательно

Вернуться в Вопросы программирования в C++Builder