¿Por qué Delphi xe2 no tiene barra de herramientas ActiveX?
En primer lugar, debe comprender: Los principios básicos de COM. El control ActiveX no visual que puede ser llamado por la página web debe ser un componente TAutoObject que implemente al menos la interfaz IOleObject. El control ActiveX generado mediante el asistente de Delphi debe heredar de WinControl, por lo que no puede utilizar el asistente de Delphi para generar controles ActiveX no visuales.
El siguiente ejemplo implementa una llamada al exeWB de este control. Es equivalente a llamar a la función de impresión, vista previa, configuración de página, etc. de IE. Sobre esta base también se pueden ampliar otras funciones.
Pasos de producción: 1. Abra Delphi y cree un nuevo paquete ActiveX. ? Archivo|nuevo|otro...|ActiveX|Biblioteca AxtiveX 2. Utilice el asistente de Delphi para agregar un objeto de automatización.
? Archivo|nuevo|otro...|ActiveX|Objeto de automatización ? Mi proyecto se llama WebPrint 3. ¿Defina las funciones de interfaz que necesita en la ventana de edición de TLB que aparece a continuación? ¿Agrego las interfaces requeridas IWebPrint.print(), IWebPrint? .preview(), etc. 4. ¿Implementar la interfaz IOleObject y cambiar el código al siguiente formulario? ¿Agregar Windows a la referencia de usos? ¿ComObj, ActiveX, Project1_TLB, Windows? (TAutoObject,IWebPrint) ? Para? TWebPrint = class(TAutoObject,IOleObject, IWebPrint) Agregue el siguiente código a la sección privada de TWebPrint private FOleClientSite: IOleClientSite;
?Agregue el siguiente código a la sección pública de TWebPrint public
{IOleObject}
función SetClientSite(const clientSite: IOleClientSite): HResult;stdcall;
función GetClientSite(out clientSite: IOleClientSite): HResult; stdcall;
función SetHostNames(szContainerApp: POleStr;szContainerObj: POleStr): HResult; stdcall;
función Close(dwSaveOption: Longint): HResult;
función SetMoniker(dwWhichMoniker: Longint; const mk: IMoniker): HResult; stdcall;
función GetMoniker(dwAssign: Longint; dwWhichMoniker: Longint;out mk: IMoniker): HResult;
función InitFromData(const dataObject: IDataObject; fCreation: BOOL;dwReserved: Longint): HResult; stdcall;
función GetClipboardData(dwReserved: Longint;out dataObject: IDataObject): HResult; p>
función DoVerb(iVerb: Longint; msg: PMsg; const activeSite: IOleClientSite;lindex: Longint; hwndParent: HWND; const posRect: TRect): HResult;stdcall;
función EnumVerbs(out) enumOleVerb: IEnumOleVerb): HResult;
Actualización de función: HResult;
<p>función IsUpToDate: HResult; stdcall;
función GetUserClassID(out clsid: TCLSID): HResult; stdcall;
función GetUserType(dwFormOfType: Longint; out pszUserType: POleStr): HResult ;stdcall;
función SetExtent(dwDrawAspect: Longint; tamaño const: TPoint): HResult;stdcall;
función GetExtent(dwDrawAspect: Longint; tamaño de salida: TPoint): HResult;stdcall ;
función Advise(const advSink: IAdviseSink; out dwConnection: Longint): HResult; stdcall;
función Unadvise(dwConnection: Longint): HResult;
función EnumAdvise(fuera enumAdvise: IEnumStatData): HResult; stdcall;
función GetMiscStatus(dwAspect: Longint; fuera dwStatus: Longint): HResult;stdcall;
función SetColorScheme(const logpal: TLogPalette): HResult; stdcall;
//Implemente la función de IOleObject en la sección de implementación implementación{IOleObject}función TWebPrint.SetClientSite(const ClientSite: IOleClientSite): HResult
<; p> comenzarsi ClientSite <> nil entonces
comenzar
si FOleClientSite <> nil entonces
comenzar
Resultado := E_FAIL;
Salir;
fin;
FOleClientSite := ClientSite;
fin
else
comenzar
FOleClientSite := nil;
finalizar;
Resultado := S_OK;
fin ;función TWebPrint.GetClientSite(fuera clientSite: IOleClientSite): HResult;
comenzar
ClientSite := FOleClientSite;
Resultado := S_OK ; p>
fin;función TWebPrint.SetHostNames(szContainerApp: POleStr; ? szContainerObj: POleStr): HResult;
comenzar
Resultado:
= S_OK;
fin; función TWebPrint.Close(dwSaveOption: Longint): HResult
comenzar
Resultado:= E_NOTIMPL; >fin;función TWebPrint.SetMoniker(dwWhichMoniker: Longint; const mk: IMoniker): HResult
comenzar
Resultado:= E_NOTIMPL
fin; TWebPrint.GetMoniker(dwAssign: Longint; dwWhichMoniker: Longint; ? out mk: IMoniker): HResult
comenzar
Resultado:= E_NOTIMPL
fin; función TWebPrint.InitFromData(const dataObject: IDataObject; fCreation: BOOL; ? dwReserved: Longint): HResult
comenzar
Resultado:= E_NOTIMPL
fin; ;función TWebPrint.GetClipboardData(dwReserved: Longint; ? out dataObject: IDataObject): HResult
comenzar
Resultado:= E_NOTIMPL
fin;función TWebPrint; .DoVerb(iVerb: Longint; msg: PMsg; const activeSite: IOleClientSite; ? lindex: Longint; hwndParent: HWND; const posRect: TRect): HResult
begin
Resultado: = E_NOTIMPL;
fin; función TWebPrint.EnumVerbs(fuera enumOleVerb: IEnumOleVerb): HResult
comenzar
Resultado:= OleRegEnumVerbs(Factory.ClassID, enumOleVerb );
fin;función TWebPrint.Update: HResult;
comenzar
Resultado:= S_OK
fin;función TWebPrint. IsUpToDate: HResult;
comenzar
Resultado:= S_OK;
fin; función TWebPrint.GetUserClassID(out clsid: TCLSID): HResult
comenzar
clsid := Factory.ClassID;
Resultado := S_OK;
fin; función TWebPrint.GetUserType(dwFormOfType: Longint; out pszUserType : POleStr): HResultado
>comenzar
Resultado:= OleRegGetUserType(Factory.ClassID, dwFormOfType, pszUserType);
fin;función TWebPrint.SetExtent(dwDrawAspect: Longint; tamaño constante: TPoint): HResult <; /p>
comenzar
Resultado:= E_NOTIMPL;
fin;función TWebPrint.GetExtent(dwDrawAspect: Longint; tamaño de salida: TPoint): HResult
<; p>comenzarResultado:= E_NOTIMPL;
end;función TWebPrint.Advise(const advSink: IAdviseSink; out dwConnection: Longint): HResult
comenzar;
Resultado:= E_NOTIMPL;
fin;función TWebPrint.Unadvise(dwConnection: Longint): HResult
comenzar
Resultado: = E_NOTIMPL;
fin; función TWebPrint.EnumAdvise(out enumAdvise: IEnumStatData): HResult
comenzar
Resultado:= E_NOTIMPL
end;función TWebPrint.GetMiscStatus(dwAspect: Longint; out dwStatus: Longint): HResult;
comenzar
Resultado:= E_NOTIMPL
fin; function TWebPrint.SetColorScheme(const logpal: TLogPalette): HResult;
begin
Resultado:= E_NOTIMPL
end; {ITWebPrint}procedimiento TWebPrint.exeWB(cmdID:TOleEnum);
var
spDoc:IHTMLDocument2;
spContainer:IOleContainer;
spIE:IWebBrowser2;
comenzar
FOleClientSite.GetContainer(spContainer);
si no está asignado (spContainer), entonces
comenzar p>
messagebox(0,'Este objeto debe usarse como un objeto OLE','Uso incorrecto',0);
salir;
end ?if spContainer; .QueryInterface(IID_IHTMLDocument2,spDoc)=S_OK entonces
comenzar
si (spDoc.parentWindow como IServiceprovider).QueryService(IWebbrowse
rApp, IWebBrowser2, spIE)=S_OK entonces
comenzar
si spIE.QueryStatusWB(cmdID)=3 entonces
spIE.ExecWB(cmdID, OLECMDEXECOPT_DODEFAULT,EmptyParam ,EmptyParam);
end
else
begin
messagebox(0,'Utilice IE5.5 o superior',' El entorno operativo es incorrecto',0);
exit;
end;
end
else
comenzar
messagebox(0,'Contenido de la página web no encontrado','Error de uso',0);
salir;
Enlace a la página web