ActiveX-документ в WebBrowser-е
От: staya Россия  
Дата: 10.04.02 06:31
Оценка:
Стоит такая задача. Как известно, если использовать метод Navigate интерфейса IWebBrowser2 загрузится соответствующий заданному URL ActiveX-документ. Нужно заставить WebBrowser сделать нечто аналогичное, но не используя URL, а имея данные документа в виде некоего буфера и, скажем, его тип MIME или расширение документа.
Всего хорошего. Ольга.
Re: ActiveX-документ в WebBrowser-е
От: Alex Fedotov США  
Дата: 10.04.02 06:42
Оценка:
Здравствуйте staya, Вы писали:

S>Стоит такая задача. Как известно, если использовать метод Navigate интерфейса IWebBrowser2 загрузится соответствующий заданному URL ActiveX-документ. Нужно заставить WebBrowser сделать нечто аналогичное, но не используя URL, а имея данные документа в виде некоего буфера и, скажем, его тип MIME или расширение документа.


Можно изобрести свой URL-протокол и в его обработчике подсовывать IE свои данные. Единственное, надо будет придумать как по URL обработчик будет догадываться, где взять данные. Смотри Asynchronous Pluggable Protocols

Может проще во временный файл сохранить?
-- Alex Fedotov
Re[2]: ActiveX-документ в WebBrowser-е
От: staya Россия  
Дата: 10.04.02 06:57
Оценка:
AF>Можно изобрести свой URL-протокол и в его обработчике подсовывать IE свои данные. Единственное, надо будет придумать как по URL обработчик будет догадываться, где взять данные. Смотри Asynchronous Pluggable Protocols

Спасибо за идею. Посмотрю.

AF>Может проще во временный файл сохранить?


Несомненно, проще, но как раз-таки файлы использовать нельзя, в том и проблема.
Всего хорошего. Ольга.
Re[3]: ActiveX-документ в WebBrowser-е
От: staya Россия  
Дата: 10.04.02 07:07
Оценка:
На самом деле, свой протокол не решит проблемы. Всё равно остается открытым вопрос — как загрузить данные в абстрактный ActiveX-документ?
Всего хорошего. Ольга.
Re[4]: ActiveX-документ в WebBrowser-е
От: lozzy  
Дата: 10.04.02 13:04
Оценка:
Здравствуйте staya, Вы писали:

S>На самом деле, свой протокол не решит проблемы. Всё равно остается открытым вопрос — как загрузить данные в абстрактный ActiveX-документ?


А через Mapped файлы никак ?
Re[5]: ActiveX-документ в WebBrowser-е
От: Аноним  
Дата: 11.04.02 06:26
Оценка:
L>А через Mapped файлы никак ?

А как указывать URL? Создается ведь только handle файла, а не файл с путем.
Re[6]: ActiveX-документ в WebBrowser-е
От: Аноним  
Дата: 11.04.02 20:41
Оценка:
Так. WebBrowser грузит данные по протоколу HTTP?
Ecли да — создаем временный HTTP сервер и указываем его URL. А в сервере, передаем нужные данные.
Re[7]: ActiveX-документ в WebBrowser-е
От: staya Россия  
Дата: 12.04.02 04:19
Оценка:
Здравствуйте Аноним, Вы писали:

А>Так. WebBrowser грузит данные по протоколу HTTP?

А>Ecли да — создаем временный HTTP сервер и указываем его URL. А в сервере, передаем нужные данные.

Так для этого нужно, чтоб на машине обязательно IP-протокол стоял. И как-то это... из пушки по воробьям, ИМХО.
Всего хорошего. Ольга.
Re[6]: ActiveX-документ в WebBrowser-е
От: lozzy  
Дата: 12.04.02 05:31
Оценка:
Здравствуйте Аноним, Вы писали:

L>>А через Mapped файлы никак ?


А>А как указывать URL? Создается ведь только handle файла, а не файл с путем.

А разве хэндл файла нельзя передать в виде строки а в ActiveX сконвертить его назад ? ИМХО
typedef HANDLE DWORD. Или я не прав ?
Re: ActiveX-документ в WebBrowser-е
От: lozzy  
Дата: 12.04.02 05:41
Оценка:
Здравствуйте staya, Вы писали:

S>Стоит такая задача. Как известно, если использовать метод Navigate интерфейса IWebBrowser2 загрузится соответствующий заданному URL ActiveX-документ. Нужно заставить WebBrowser сделать нечто аналогичное, но не используя URL, а имея данные документа в виде некоего буфера и, скажем, его тип MIME или расширение документа.


Да, вот ее пост из соседнего трэда.

Loading Simple HTML Pages From Memory
Re[7]: ActiveX-документ в WebBrowser-е
От: staya Россия  
Дата: 12.04.02 05:47
Оценка:
L>>>А через Mapped файлы никак ?
А>>А как указывать URL? Создается ведь только handle файла, а не файл с путем.
L>А разве хэндл файла нельзя передать в виде строки а в ActiveX сконвертить его назад ? ИМХО
L>typedef HANDLE DWORD. Или я не прав ?

Куда передать? Беда в том, что ActiveX-документы умеют работать только с полными именами файлов (с путем), а отнюдь не с их хэндлами. Кроме того, ActiveX может быть внешним процессом.
Всего хорошего. Ольга.
Re[2]: ActiveX-документ в WebBrowser-е
От: Аноним  
Дата: 12.04.02 05:53
Оценка:
L>Да, вот ее пост из соседнего трэда.
L>Loading Simple HTML Pages From Memory

Читайте внимательно! Я ни слова не сказала об HTML! Как загружать HTML из памяти, мне известно. Этот способ не подходит для любого ActiveX-документа, поскольку при этом тип объекта WebBrowser-а Document совершенно другой, соответственно, работает через другие интерфейсы.
Re: ActiveX-документ в WebBrowser-е
От: Bagri  
Дата: 05.07.02 10:34
Оценка:
Здравствуйте staya, Вы писали:

S>Стоит такая задача. Как известно, если использовать метод Navigate интерфейса IWebBrowser2 загрузится соответствующий заданному URL ActiveX-документ. Нужно заставить WebBrowser сделать нечто аналогичное, но не используя URL, а имея данные документа в виде некоего буфера и, скажем, его тип MIME или расширение документа.



Вы его должны зарегистрировать (см. MSDN keyword MIME или ActiveX)
Далее при загрузке ИЕ даст Вам возможность загрузить свойства через интерфейс IPropertyBag.Загрузите свойство SRC — там будет URL — у меня например при генерации потока CGI-приложением передавалась строка обращения к нему а при загрузке локального файла — путь с префиксом file://.
Если это файл — открывайте, если http то пишете следующий код (я пишу на Дельфи поэтому — Паскаль)

var
stgName: array[0..1024] of WideChar;
buf: string;

FMoniker: IMoniker;
FBindCtx: IBindCtx;
pm: IStream;

os: TOleStream;
fs: TFileStream;
begin
FMoniker := nil;
FBindCtx := nil;
StringToWideChar(Value, stgName, sizeof(stgName));
try
if Pos('file://', Value) <> 0 then
begin
buf := copy(Value, Length('file://') + 1, Length(Value) — Length('file://'));
// Загружаете данные из файла
end
else
if Pos('http://', Value) <> 0 then
if CreateURLMoniker(nil, stgname, FMoniker) = S_OK then
begin
CreateBindCtx(0, FBindCtx);
pm := nil;
FMoniker.BindToStorage(FBindCtx, nil, IID_IStream, pm);
// Загружаете данные из потока pm
end;
except

end;
end;

Да, писать этот код нужно когда вызывается функция IPersistPropertyBag::Load.

У меня получилось... :user:
:) :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.