Ich habe eine
ActiveX-Komponente (kann mit der Shockwave-Flash-Komponente nachvollzogen werden), welche ich über den IE-Wrapper TWebBrowser bedienen will.
Dort lade ich ein Dokument mittels
MyWebBrowser.Navigate(Flashfile);
Nun suche ich mir die Flash-Instanz zur geladenen Flash-Instanz:
Delphi-Quellcode:
function GetShockPlayer(WebBrowser: TWebBrowser): IShockwaveFlash;
var
intf: IDispatch;
doc: IHTMLDocument2;
collection: IHTMLElementCollection;
begin
result := nil;
doc := WebBrowser.Document as IHTMLDocument2;
collection := doc.embeds;
if collection.length > 0 then
begin
intf := collection.item(0, 0);
result := intf as IShockwaveFlash;
end;
end;
Für diese Player-Instanz versuche ich mich an die Event-Schnittstelle zu hängen:
Delphi-Quellcode:
var
player: IShockwaveFlash;
ShockEvents: TShockwaveFlashObjectsIShockwaveFlashEvents;
begin
player := GetShockPlayer(WebBrowser);
ShockEvents := TShockwaveFlashObjectsIShockwaveFlashEvents.Create(self);
ShockEvents.Connect(player);
end;
Die TShockwaveFlashObjectsIShockwaveFlashEvents-Klasse habe ich das
EventSinkImp-Importiert.
Jedoch bekomme ich die Fehlermeldung "Schnittstelle nicht unterstützt"?
Was ist falsch? Wenn ich die Event-Klasse mit einer per Delphi
ActiveX-Import generierten Flash-Instanz verbinde funktioniert es. Was ist anders, wenn der Internet Explorer dazwischen geschaltet wird?
Ich habe ein Beispielprojekt angehängt (Hoffentlich alles dabei
)
Windows Vista - Eine neue Erfahrung in Fehlern.