Q&A

  • 다른 Frame에 있는 ActiveX와의 통신을 어떻게 ..
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;
0  COMMENTS