Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

Народ, а как правильно создать   Найти похожие ветки 

 
Nick Denry ©   (2005-07-29 17:48) [0]

экземпляр ActiveX интерфейса? (т.е. в системе установлен контрол мне известен его CLASS_ и IID_).

Я создаю через CreateComObject, но не уверен что это правильно.

Какие еще функции существуют?


 
oldman ©   (2005-07-29 18:03) [1]

Создал?
Работает?
Значит - правильно.
имхо...


 
Nick Denry ©   (2005-07-29 18:47) [2]

Хорошо, тогда вопрос стоит след. образом:

Допустим имея CLASS_ для экземпляра браузера я создаю его так:

WebBr := CreateComObject(CLASS_InternetExplorer) as IWebBrowser2;

А как тогда создать объект интерфейса DIID_DWebBrowserEvents, который определен как IWebBrowserDisp и как обрабатывать события?

к сожалению надо "чиста на АПИ" (с)....

И я не уверен, что первый объек все-же создается правильно...

а примеры в MSDN идут только для MFC и VB, причем и там и там компонентная модель :(

а модуль SHDocVw, к сожалению использует совершенно непонятные вставки типа
procedure TWebBrowser_V1.InitControlData;
const
 CEventDispIDs: array [0..16] of DWORD = (
   $00000064, $00000065, $00000066, $0000006C, $00000068, $00000069,
   $0000006A, $0000006B, $00000071, $000000C8, $000000C9, $000000CC,
   $00000067, $0000006D, $0000006E, $0000006F, $00000070);
 CControlData: TControlData2 = (
   ClassID: "{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}";
   EventIID: "{EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B}";
   EventCount: 17;
   EventDispIDs: @CEventDispIDs;
   LicenseKey: nil (*HR:$80040154*);
   Flags: $00000000;
   Version: 401);
begin
 ControlData := @CControlData;
 TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnBeforeNavigate) - Cardinal(Self);
end;

procedure TWebBrowser_V1.CreateControl;

 procedure DoCreate;
 begin
   FIntf := IUnknown(OleObject) as IWebBrowser;
 end;

begin
 if FIntf = nil then DoCreate;
end;


а сам DoCreate использует почему-то TOleControl :(

procedure TOleControl.CreateControl;
var
 Stream: IStream;
 CS: IOleClientSite;
 X: Integer;
begin
 if FOleControl = nil then
   try
     try  // work around ATL bug
       X := FOleObject.GetClientSite(CS);
     except
       X := -1;
     end;
     if (X <> 0) or (CS = nil) then
       OleCheck(FOleObject.SetClientSite(Self));
     if FObjectData = 0 then OleCheck(FPersistStream.InitNew) else
     begin
       OleCheck(CreateStreamOnHGlobal(FObjectData, False, Stream));
       OleCheck(FPersistStream.Load(Stream));
       DestroyStorage;
     end;
     OleCheck(FOleObject.QueryInterface(IOleControl, FOleControl));
     OleCheck(FOleObject.QueryInterface(IDispatch, FControlDispatch));
     FOleObject.QueryInterface(IPerPropertyBrowsing, FPropBrowsing);
     InterfaceConnect(FOleObject, IPropertyNotifySink,
       Self, FPropConnection);
     InterfaceConnect(FOleObject, FControlData^.EventIID,
       FEventDispatch, FEventsConnection);
     if FControlData^.Flags and cfBackColor <> 0 then
       OnChanged(DISPID_BACKCOLOR);
     if FControlData^.Flags and cfEnabled <> 0 then
       OnChanged(DISPID_ENABLED);
     if FControlData^.Flags and cfFont <> 0 then
       OnChanged(DISPID_FONT);
     if FControlData^.Flags and cfForeColor <> 0 then
       OnChanged(DISPID_FORECOLOR);
     FOleControl.OnAmbientPropertyChange(DISPID_UNKNOWN);
     RequestNewObjectLayout;
   except
     DestroyControl;
     raise;
   end;
end;


 
Nick Denry ©   (2005-07-30 01:24) [3]

UP


 
jack128 ©   (2005-07-30 01:31) [4]

Nick Denry ©   (29.07.05 18:47) [2]
и как обрабатывать события?

IConnectionPoint, IConnectionPointContainer + F1
статья "Events in COM and Connectable Objects" в msdn и далее по тексту.
Изучать исходники, сгенерированные визардом в дельфи..
Купить какую нить книжку по com..



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.647 c
1-1122906825
Starcom
2005-08-01 18:33
2005.08.21
Как в приложении вызвать процедуру для вывода изображения из RES


14-1122450466
BJValentine
2005-07-27 11:47
2005.08.21
Помогите DOS мамонту


14-1122486666
Starcom
2005-07-27 21:51
2005.08.21
Почему в Windows 98/Me енто не работает?


6-1115955780
Delphi forever
2005-05-13 07:43
2005.08.21
Прием и отправка почты (с прикрепленными файлами)


6-1114143431
M@X
2005-04-22 08:17
2005.08.21
компоненты TcpClient TcpServer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский