Главная страница
    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.038 c
10-1100120241
Marina_Sm
2004-11-10 23:57
2005.08.21
создание COM!!!


4-1120199652
Aldi
2005-07-01 10:34
2005.08.21
Как в Делфи получить список запущенных процессов?


5-1093596786
Salivan
2004-08-27 12:53
2005.08.21
TTreeView + MultiSelect ? это возможно?


14-1122654596
Holy
2005-07-29 20:29
2005.08.21
Первая пришедшая в голову мысль сегодня вечером...


1-1122642655
mazepa
2005-07-29 17:10
2005.08.21
excell





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