Форум: "WinAPI";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
ВнизРазмещение ActiveX - MicrosoftWebBrowser в WinAPI Найти похожие ветки
← →
Альберт © (2007-11-14 00:02) [0]Здравствуйте! Подскажите, пожалуйста, каким образом можно создать окно WebBrowser"a на своей форме (код полностью на winapi). Ничего не нашел на других форумах..
← →
JSman © (2007-11-14 00:41) [1]CreateOleObject
← →
Альберт (2007-11-14 01:05) [2]при подключении модуля shdocvw вес программы до 390 кб. есть ли более интересные способы, которые мало весят?
← →
Германн © (2007-11-14 02:12) [3]
> Альберт © (14.11.07 00:02)
> Подскажите, пожалуйста, каким образом можно создать окно
> WebBrowser"a на своей форме (код полностью на winapi).
Когда ты это писАл, ничего тебя не смущало?
← →
Альберт (2007-11-14 09:09) [4]ну выразился так. назвал окно программы распространенным названием. не мог бы помочь?
← →
tesseract © (2007-11-14 18:01) [5]
> есть ли более интересные способы, которые мало весят?
А этот что тяжеловес, что ли ? Учитывая что придеться с собой в любом случае IE нужной версии таскать ?
← →
Альберт (2007-11-14 19:25) [6]ну так сомо описание интерфейса же мало весит IWebBrowser2. мне он в принципе и нужен.. заменить бы строчку выделенную жирным и не мучиться..
var
WB: TWebBrowser;
WB_Handle, Form1_Handle:hwnd;
WND_RECT:TRECT;
begin
WB := TWebBrowser.Create(Form1);
WB_Handle:=WB.Handle;
Form1_Handle:= Form1.Handle;
Windows.GetWindowRect(Form1_Handle,WND_RECT);
Windows.SetParent(WB_Handle, Form1_Handle);
Windows.SetWindowPos(
WB_Handle,
Form1_Handle,
0, 0,
WND_RECT.Right - WND_RECT.Left - 10,
WND_RECT.Bottom - WND_RECT.Top - 10,
SWP_NOZORDER);
WB.Navigate("about:blank");
end;
может кто разберется, пример на асме
http://www.kakeeware.com/download.php?f=kb_ie.exe
http://www.kakeeware.com/download.php?f=kb_ie_mo_src.zip
← →
tesseract © (2007-11-15 10:50) [7]
> WB := TWebBrowser.Create(Form1); WB_Handle:=WB.Handle;
> Form1_Handle:= Form1.Handle;
Это называеться WinApi ? Полазий по исходникам twebBrowser - многое поймешь.
← →
Альберт (2007-11-15 11:54) [8]>> WB := TWebBrowser.Create(Form1); WB_Handle:=WB.Handle;
>> Form1_Handle:= Form1.Handle;
>Это называеться WinApi ? Полазий по исходникам twebBrowser - многое поймешь.
так нужно как раз и заменить эти строки. от Form сделал его нещависимым. нашел рализацию ActiveX container из статьи Альберта Мамедова.
unit axControl;
{ Класс-контейнер для ActiveX (компонента
управления). }
interface
uses
Windows, Messages, Classes, Controls,
ActiveX, OleCtrls,StdCtrls; //
///
********************************************************************
type
TAxControl = class(TOleControl)//
private
CControlData : TControlData2; //
Информация об ActiveX.
protected
procedure InitControlData; override;
public
property CData : TControlData2 read
CControlData;
constructor Create (AOwn :
TComponent;AGUID : TGUID);
end;
implementation
//////////////////////////////////////////////////////////////////
////////////
constructor TAxControl. Create (AOwn :
TComponent ;AGUID : TGUID);
begin
FillChar(CControlData,sizeof(CControlData),0);
// Обнуляете поле с информацией об Active
CControlData.ClassID :=AGUID; //
Указываете QUID компонента,который
будет создаваться.
inherited Create (AOwn); // Вызываете
конструктор предка.
ControlStyle := ControlStyle +
[csClickEvents]; // Стиль отображения
end ;
//////////////////////////////////////////////////////////////////
/////////////////
procedure TAxControl. InitControlData;
begin
ControlData := @CControlData; //
Указываете адрес, где находится
информация об ActiveX.
end;
//////////////////////////////////////////////////////////////////
////////////////////
end.
но вот одна проблема, что он базируется на controls
← →
Альберт (2007-11-15 11:58) [9]
var compon:TAxControl;
begin
compon:=TAxControl.Create(self,stringtoguid
("{8856F961-340A-11D0-A96B-
00C04FD705A2}"));
compon.Parent:=panel1;
compon.Visible:=true;
compon.Top:=20;
compon.Left:=0;
compon.OleObject.Navigate2("http://
activex.microsoft.com/activex/controls/sapi/
spchapi.exe.",0,0,00);
end;
← →
Альберт (2007-11-15 12:13) [10]думаю, что нужно делать постепенную отвязку от стандартных модулей
← →
Альберт (2007-11-15 13:02) [11]http://www.kakeeware.com/download.php?f=kb_ie_mo_src.zip
может кто-то разбирается в асме? там всего лишь перечисление интерфейсов и несколько вызовов функций.
может это легче перевести на delphi чем перемалывать весь controls и далее..
← →
DVM © (2007-11-16 21:30) [12]
> Альберт
лезть работать с COM и ActiveX на "чиста API" пустая трата времени. Т.е. сделать то можно, но зачем непонятно такие усилия.
← →
DVM © (2007-11-16 21:32) [13]
> думаю, что нужно делать постепенную отвязку от стандартных
> модулей
потом подумай над отвязкой от kernel32.dll, user32.dllm, gdi32.dll, программа еще меньше станет.
← →
Альберт © (2007-11-17 00:27) [14]данный пример запускает отдельное окно ie и может получить доступ к содержимому:
const
BrowserID : TGUID ="{D30C1661-CDAF-11D0-8A3E-00C04FC9E26E}";
IEID : TGUID = "{0002DF01-0000-0000-C000-000000000046}";
CLSID_WebBrowser: TGUID = "{8856F961-340A-11D0-A96B-00C04FD705A2}";
function CoInitialize(pvReserved: Pointer): HResult; stdcall; external
"ole32.dll" name "CoInitialize";
procedure CoUninitialize; stdcall; external "ole32.dll" name "CoUninitialize";
function CoCreateInstance(const clsid: TGUID; unkOuter: IUnknown;
dwClsContext: Longint; const iid: TGUID; out pv): HResult; stdcall; external
"ole32.dll" name "CoCreateInstance";
const
CLSCTX_INPROC_SERVER = 1;
CLSCTX_INPROC_HANDLER = 2;
CLSCTX_LOCAL_SERVER = 4;
CLSCTX_REMOTE_SERVER = 16;
CLSCTX_NO_CODE_DOWNLOAD = 400;
CLSCTX_NO_FAILURE_LOG = 4000;
CLSCTX_SERVER = (CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER or CLSCTX_REMOTE_SERVER) ;
CLSCTX_ALL = CLSCTX_INPROC_HANDLER or CLSCTX_SERVER;
procedure myWB;
var
CLSID: TGUID;
WB:IWebBrowser2;
url, null:OleVariant;
begin
null:=0;
url:="about:blank";
Coinitialize(nil);
if (CoCreateInstance(IEID, nil, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, WB)<> 0)
then
begin
CoUninitialize;
exit;
end;
WB.Left :=0;
WB.Height:=100;
WB.Top :=0;
WB.Width:=100;
WB.Visible:=true;
WB.Navigate2(url, null, null, null, null);
end;
вставив свои интерфейсы можно отвязаться от стандартных больших модулей..
ниже напишу свои наблюдения по поводу контролов.
> зачем непонятно такие усилия
ну мы программеры, вспомните времена доса)) ностальгия. ну хочется чуда немного) поймите правильно
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.101 c