Главная страница
    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.47 MB
Время: 0.037 c
1-1122636148
А
2005-07-29 15:22
2005.08.21
Время выполнения процедуры, функции, отрезка кода и т.п.?


4-1119944529
Хинт
2005-06-28 11:42
2005.08.21
Аналог ShowCursor для других приложений


14-1122453914
Slider007
2005-07-27 12:45
2005.08.21
Кем я хочу стать когда я буду большим


5-1093530180
SEROGA
2004-08-26 18:23
2005.08.21
Создание компонентов


4-1119940523
happyandry
2005-06-28 10:35
2005.08.21
Помогите с иконкой и ее обработкой





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