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);
어찌 방법이 없을까요?
고매한 답변을 부탁드립니다.
다음의 방법으로 조치했습니다.
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가 익숙하지 못하여 여러군데에서 걸리는군요.