![]() |
IOleCommandTarget & Invalid Variant Type
Hallo~!
Warum kriege ich bei Zeile 11 einen Invalid Variant Type?
Delphi-Quellcode:
function HrExecCommand(ucmdID: cardinal; const pVarIn: OleVariant;
var pVarOut: OleVariant; bPromptUser: boolean): HResult; const CMDSETID_Forms3: TGUID = '{DE4BA900-59CA-11CF-9592-444553540000}'; var dwCmdOpt: cardinal; OleCommandTarget: IOleCommandTarget; begin dwCmdOpt := OLECMDEXECOPT_DONTPROMPTUSER; Webbrowser1.Document.QueryInterface(IOleCommandTarget, OleCommandTarget); result := OleCommandTarget.Exec(@CMDSETID_Forms3, // Invalid Variant Type!!!! ucmdID, dwCmdOpt, pVarIn, pVarOut); end;
Delphi-Quellcode:
procedure TfrmMyBrowser.GetAvailableStyles(List: TStrings);
const IDM_GETBLOCKFMTS = 2233; var varRange: OleVariant; b: TBStr; a: PSafeArray; l, h, i: Longint; hr: HRESULT; NullVariant: OleVariant; begin TVariantArg(VarRange).VT := VT_ARRAY; TVariantArg(VarRange).ppArray := nil; hr := HrExecCommand(IDM_GETBLOCKFMTS, unassigned, VarRange, False); //.... end; |
Re: IOleCommandTarget & Invalid Variant Type
Come on Leute, Irgend jemand hat doch sicher eine Idee?
|
Re: IOleCommandTarget & Invalid Variant Type
Hat vielleicht jemand von den Samstag-Forum Besucher eine Idee?
|
Re: IOleCommandTarget & Invalid Variant Type
Delphi-Quellcode:
und
VarRange := null;
Delphi-Quellcode:
funktionieren auch nicht... :(
VarRange := VarArrayCreate([20,20], varInteger);
|
Re: IOleCommandTarget & Invalid Variant Type
Also ich habe es so gelösst:
Delphi-Quellcode:
Ach ja mein TargetCommando...
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.....
Delphi-Quellcode:
Hoffe ich habe alles "richtig" umkopiert! 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; (Bei mir sieht es noch etwas anders aus, weil ich das auch in Frameseiten realisiert habe) LG Frank :coder: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz