Q&A

  • ActiveX 간 메세지 전달 방법은 ??
Explorer 에 ActiveX 를 두개 이상 넣었을 때
ActiveX 간 메세지를 전발하는 방법이 궁금합니다.

제가 테스트한건

  SendMessage(HWND_BROADCAST, WM_USER+1900, 0,0);
  BroadcastSystemMessage(BSF_POSTMESSAGE        , Nil,WM_USER+1900,0,0);

를 사용해 봤는데 안되는군요


혹시나 싶어 자신에게 메세지를 보내면 메세지는 전달이 되는데
ex) SendMessage(Handle, WM_USER+1900, 0,0);

어찌 방법이 없을까요?

고매한 답변을 부탁드립니다.
3  COMMENTS
  • Profile
    남충희 2002.03.26 02:58
    메세지는 아무래도 Explorer에서 가로채는것 같아
    다음의 방법으로 조치했습니다.


    Function TTestX.GetIHTMLDocument2  : IHTMLDocument2;
    var
      pIOleObject : IOleObject;
      pIOleClient : IOleClientSite;
      pIOleContainer : IOleContainer;
      pDOC : IHTMLDocument2;
      pUnk : IUnknown;
      aURL : WideString;
    begin
      Result := nil;
      pUnk := ComObject;
      if Assigned( pUnk ) then begin
        if SUCCEEDED(pUnk.QueryInterface(IOleObject, pIOleObject)) and Assigned( pIOleObject ) then begin
          if SUCCEEDED(pIOleObject.GetClientSite(pIOleClient)) and Assigned( pIOleClient ) then begin
            if SUCCEEDED(pIOleClient.GetContainer(pIOleContainer)) and Assigned( pIOleContainer ) then begin
              if SUCCEEDED( pIOleContainer.QueryInterface(IHTMLDocument2,pDOC)) and Assigned(pDOC) then begin
                 Result := pDoc;
              end;
            end;
          end;
        end;
      end;
    end;

    Function TTestX.TestActiveFormProj1_TLB : Boolean;
    var
      pDOC : IHTMLDocument2;
      ov:OleVariant;
      iDisp: IDispatch;
      iColl:IHTMLElementCollection;
      i  : integer;

      aActiveFormX : IActiveFormX;
    begin
      Result := False;
      pDoc := GetIHTMLDocument2;
      if Assigned(pDOC) then begin
      begin
        ov:='OBJECT';
        IDisp:=pDoc.all.tags(ov); //<--- 웹페이지에서 Object TAG 를 찾는다..
        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(IActiveFormX,aActiveFormX);
                if assigned(aActiveFormX) then begin
    // 이 부분이 제가 필요했던 부분입니다.
                  aActiveFormX.TextMessage := 'TEXT';
                  Result := true;

                end;
              end;
            end;
          end;
        end;
      end;
    end;


    ActiveX가 익숙하지 못하여 여러군데에서 걸리는군요.





  • Profile
    여덕수 2002.03.25 23:08

    안녕하세요.. 마당쇠 여덕수입니다..

    이벤트를 이용하는게 어떠실른지요?
    해당 OCX를 담고 있는 html 에서 VB스크립등으로 이벤트를 받아서 다른 OCX의 관련된 메소드를 호출하는 방식으로요...

    그럼...
  • Profile
    남충희 2002.03.25 23:43
    html소스를 건들지 않고 할 수 있는 방법은 없을까요?

    정이 안되면 DDE나 TCP/IP 까지 생각하고 있는데....
    메세지 때문에 이렇게 까지 해야하는 생각이 들어서요.