![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Insert ActiveX Forms in runtime [Delphi, Windows]
WondeRu © (2004-03-16 11:38:00)Здравствуйте! Как в Delphi вставить ActiveX форму динамически, имея все ее GUID's? Может еще какие нужны условия? Спасибо!
WondeRu (2004-03-24 14:43:00) [1]А как вызывать дополнительные функции формы и обрабатывать callback-вызовы?
just me (2004-03-16 19:04:00) [2]Никаких особых условий не нужно, но необходимо прежде всего создать контейнер для ActiveX на базе класса TOleControl, в котором перекрыть витруальный метод InitControlData. В этом методе необходимо определить GUID фабрики классов ActiveX, число обработчиков событий и ссылку реализованного в клиенте интерфейса обработчиков событий, а также ссылку на лицензионный интерфейс, необходимый для вызовов методов интерфейса IClassFactory2.
Примерно так:
type
TRunTimeActiveX = class(TOleControl)
protected
FControlData: TControlData;
procedure InitControlData; override;
public
constructor EmbeddActiveX(AOwner: TComponent;
AParent: TWinControl; AClassID: TGUID; Rect:TRect);
end;
...
constructor TRunTimeActiveX.EmbeddActiveX(AOwner: TComponent;
AParent: TWinControl; AClassID: TGUID; Rect:TRect);
begin
with FControlData do begin
ClassID := AClassID;
EventCount := 0;
EventDispIDs := nil;
LicenseKey := nil;
Flags := $00000000;
end;
inherited Create(AOwner);
Self.parent := AParent;
Self.visible := True;
Self.Left := Rect.Left;
Self.Top := Rect.Top;
Self.Width := Rect.Right-Rect.Left;
Self.Height := Rect.Bottom-Rect.Top;
end;
procedure TRunTimeActiveX.InitControlData;
begin
ControlData := @FControlData;
end;
И вызвать примерно так:
procedure TMyForm.Button1Click(Sender: TObject);
begin
TRunTimeActiveX.EmbeddActiveX(Self,Self,
StringToGUID(<my_ActiveX_CF_GUID>), Rect(10,10,100,100));
end;