Продолжаю кодить для себя мелкую автоматизацию в быту на лазарусе (клон дельфи с открытыми исходниками).
В отличие от дельфи, здесь отсутствует поддержка технологии COM и ActiveX.
Тем не менее, нужные интерфейсы и классы объявлены.
Ну и в общем, возникла потребность подключить к проекту COM'понент.
Долгое гугление выдало мне рабочий пример, по созданию объекта иэксплорера.
Привожу вырезку из работающего модуля:
- Код: Выделить всё
uses
Windows, ComObj, ...;
type
{ TForm1 }
TForm1 = class(TForm)
...
end;
PIUnknown=^IUnknown;
TAtlAxAttachControl = function(Control:IUnknown;
hwind:hwnd;ppUnkContainer:PIUnknown): HRESULT; stdcall;
IEventIntfEvents = dispinterface
['{EAB22AC2-30C1-11CF-A7EB-0000C05BAE0B}']
end;
var
Form1: TForm1;
WebBrower: variant;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
atl:hmodule;
cmdparam: TStringList;
AtlAxAttachControl:TAtlAxAttachControl;
begin
atl:=LoadLibrary('atl.dll');
AtlAxAttachControl:=TAtlAxAttachControl(GetProcAddress(atl, 'AtlAxAttachControl'));
WebBrower:=CreateOleObject('Shell.Explorer');
AtlAxAttachControl(WebBrower, Panel1.Handle,nil);
WebBrower.Navigate('http://google.ru');
end;
Как видим, данный пример создает встраиваемый в окно OLE-объект, предоставляемый соответственно, OLE-сервером (коим является висящий в тени процесс иэксплорера).
Мне бы хотелось узнать, есть ли у кого из многоязыковых форумчан готовые, более оптимальные наработки в этом направлении?
Под более оптимальными я имею ввиду работу с IDispatch напрямую. Что-то навроде этого:
- Код: Выделить всё
type
MyControl = class(IDispatch)
...
end;