Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.24;
Скачать: CL | DM;

Вниз

Размещение 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 вся ветка

Текущий архив: 2008.08.24;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
2-1216710409
Dimich1978
2008-07-22 11:06
2008.08.24
Как открыть в Richedit кодированный rtf


8-1184700559
Layner
2007-07-17 23:29
2008.08.24
Ищу "удобный холст" для рисования векторными фигурами


15-1215433698
DRG
2008-07-07 16:28
2008.08.24
C# или С++ с чего начать?


8-1184352294
leonidus
2007-07-13 22:44
2008.08.24
Траблы при получении уровня компресии у JPG-файлов


2-1216636344
ekto
2008-07-21 14:32
2008.08.24
Что происходит при вызове DataSet.Post?