Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.056 c
2-1216283877
Zhekson
2008-07-17 12:37
2008.08.24
Как распечатать изображение с реальными размерами(мм.)?


15-1214918754
iZEN
2008-07-01 17:25
2008.08.24
С сегодняшнего дня прекращены продажи Windows XP


15-1215145232
Slider007
2008-07-04 08:20
2008.08.24
С днем рождения ! 4 июля 2008 пятница


2-1216280848
programmer90
2008-07-17 11:47
2008.08.24
Командная строка &amp; Delphi


15-1215067842
Slider007
2008-07-03 10:50
2008.08.24
С днем рождения ! 3 июля 2008 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский