Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: IOleCommandTarget & Invalid Variant Type

  Alt 4. Apr 2006, 17:52
Also ich habe es so gelösst:

Delphi-Quellcode:
var
  ValOut : OLEVariant;
  Val : PSafeArray;
  sBuffer: WideString;
  i,
  iMin,
  iMax: integer;
begin
 TVariantArg(ValOUT).VT := VT_ARRAY;
 TVariantArg(ValOUT).ppArray := nil;
 TargetCommando(2233,EmptyParam,ValOut);
 TVariantArg(ValOut).VT := VT_ARRAY;
 Val := PSafeArray(TVariantArg(ValOUT).ppArray);

  // Die Anzahl der Elemente im Array bestimmen
 ActiveX.SafeArrayGetLBound(Val, 1, iMin);
 ActiveX.SafeArrayGetUBound(Val, 1, iMax);

  // Die einzelnen Strings auslesen
  for i := iMin to iMax do
   begin
     ActiveX.SafeArrayGetElement(Val, i, sBuffer);
   end;
  // Vorsicht, Leak...
  ActiveX.SafeArrayDestroy(Val); // Das Funktioniert noch nicht.....
Ach ja mein TargetCommando...


Delphi-Quellcode:

CONST

  CGID_MSHTML : TGUID = '{DE4BA900-59CA-11CF-9592-444553540000}';

procedure TMainform.TargetCommando(IDM:integer;Valin:OleVariant;Var Valout:OleVariant);
var
  Target : IOleCommandTarget;
  PtrGUID : PGUID;
  Doc : IHTMLDocument2;
begin
  if Succeeded(pDisp.QueryInterface(IID_IWebBrowser2, wb2)) then
    begin
      Doc := wb2.Document as IHTMLDocument2;

      Doc.QueryInterface(IID_IOleCommandTarget,Target);
        
      New(PtrGUID);
      PtrGUID^ := CGID_MSHTML;

      Target.Exec(PtrGUID,IDM,0,Valin,Valout);
  
      Target := NIL;
      Dispose(PtrGUID);
    end;
end;
Hoffe ich habe alles "richtig" umkopiert!
(Bei mir sieht es noch etwas anders aus, weil ich das auch in Frameseiten realisiert habe)


LG Frank
  Mit Zitat antworten Zitat