delphi로 ActiveX control를 만들어 Web에서 사용하게 하구 있는데요.
같은 frame속에 있는 다른 ActiveX는 찾이 지더군요
근데 다른 Frame에 있는 ActiveX는 도저히 찾을 수가 없어요.
글구 같은 문제인데, 한쪽 ActiveX에서 다른쪽 frame을 다른 Page로 이동시킬수 있는 방법도 갈쳐 주셨으면 좋겠습니다.
쩝! 다른쪽 frame의 IHTMLDocument2만 얻을수 있으면 만사가 해결될것도 같은데...
고수님들 좀 도와주세요.
다음은 한 frame속의 ActiveX를 찾는 방법입니다.
function TaxMainForm.GetContainer : IOleContainer;
var
plOleObject : IOleObject;
plOleClient : IOleClientSite;
plOleContainer : IOleContainer;
pUnk : IUnknown;
begin
result := nil;
pUnk := ComObject;
if Assigned( pUnk ) then
begin
if SUCCEEDED( pUnk.QueryInterface(IOleObject, plOleObject) ) and
Assigned( plOleObject ) then
begin
if SUCCEEDED( plOleObject.GetClientSite(plOleClient) ) and
Assigned( plOleClient ) then
begin
if SUCCEEDED( plOleClient.GetContainer(plOleContainer) ) and
Assigned( plOleContainer ) then
begin
result := plOleContainer;
end;
end;
end;
end;
end;
procedure TaxMainForm.Button4Click(Sender: TObject);
function GetIHTMLDocument2 : IHTMLDocument2;
var
plOleContainer : IOleContainer;
pDOCU: IHTMLDocument2;
begin
result := nil;
plOleContainer := GetContainer;
if Assigned( plOleContainer ) then
begin
if SUCCEEDED( plOleContainer.QueryInterface(IHTMLDocument2, pDOCU)) and
Assigned( pDOCU ) then
begin
result := pDOCU;
end;
end;
end;
procedure RunTestMethod( pDoc : IHTMLDocument2);
var
ov : OleVariant;
buf : WideString;
iDisp : IDispatch;
iColl : IHTMLElementCollection;
i : integer;
paxClient1 : IaxClinet1;
begin
buf := 'OBJECT';
ov := buf;
iDisp := pDoc.all.tags(ov);
if Assigned( iDisp ) then
begin
iDisp.QueryInterface(IHTMLElementCollection, iColl);
if Assigned( iColl ) then
begin
for i:=1 to iColl.Get_length do
begin
iDisp := iColl.item(pred(i), 0);
iDisp.QueryInterface(IaxClinet1, paxClient1);
if Assigned(paxClient1) then
begin
paxClient1.TestMethod;
end;
end;
end;
end; {}
end;
var
pDoc2 : IHTMLDocument2;
begin
pDoc := GetIHTMLDocument2;
if Assigned( pDoc ) then
begin
RunTestMethod( pDoc );
end;
end;