PDA

Ver la Versión Completa : Generar propiedad en ActiveX


ander
30-10-2014, 14:44:34
Imaginemos que creo un activeX library (ocx) desde delphi XE2 y creo un active Form. (En este habrá algún componente).
Me genera varios ficheros y cuando cojo el ocx y lo ejecuto en cualquier sitio no tengo ningún problema.
Ahora sí, yo quiero generar una propiedad en mi ocx, una propiedad nueva.
Después de mirar los ficheros que genera automáticamente delphi , que serían Prueba_TLB.pas, Prueba.irdl y Prueba.pas con su Dfm y
lo que hago es :
Abrir el fichero Prueba_TLB.pas y genero la nueva propiedad

IMyOCX = interface(IDispatch)
['{88F119F0-D30D-4E1A-A753-654983F1BA61}']
// Aqui están todas las demas funciones y propiedades del OCX
function Get_Dato_Leido: WideString; safecall;
procedure Set_Dato_Leido(const Value: WideString); safecall;
property Probando : WideString read Get_Dato_Leido write Set_Dato_Leido;

Luego...

IMyOCXDisp = dispinterface
['{88F119F0-D30D-4E1A-A753-654983F1BA61}']
// Aquí van las otras declaraciones
property Probando: WideString dispid -518;

Esto digamos que es una copia de la propiedad caption del OCX creado.
Mi primera interrogante surge con el dispid -518 que no se a que se refiere.
Se lo dejo tal cual,de momento y abro el fichero Prueba.irdl

interface IMyOCX: IDispatch
{
// Aquí van las otras declaraciones
[propget, id(0xFFFFFDFA)]
HRESULT _stdcall Probando([out, retval] BSTR* Value);
[propput, id(0xFFFFFDFA)]
HRESULT _stdcall Probando([in] BSTR Value);
};

Y copio el caption y lo renombro.
Aquí se ve que el dispid -518 el valor Hexadecimal es propget, id(0xFFFFFDFA)
y por último abro el fichero Prueba.pas y allí declaro

protected
{ Protected declarations }
// Aquí van las otras declaraciones
function Get_Dato_Leido: WideString; safecall;
procedure Set_Dato_Leido(value:AnsiString);

y..

function TMyOCX.Get_Dato_Leido: WideString;
begin
Result := WideString(label1.caption); // esto esta cambiado
end;

procedure TMyOCX.Set_Dato_Leido(const Value: WideString);
begin
// Probando := Value; No deja usar Probando
Caption := Value;
end;
// Al final no puedo acceder a la propiedad Probando y debo usar el caption para compilar.


También he cambiado el dispid -518 por -519 y poner su valor hexadecimal id(0xFFFFFDF9) donde corresponda pero no sé si lo estoy
haciendo bien.(no lo hago bien porque no me funciona,compila pero no va)
Le estoy dando vueltas y ni idea.
¿Alguien me podría decir como crear una propiedad en el OCX ?
Mi OCX, es una comunicación TCP/IP, y lo que quiero es coger los datos que recibo y sacarlas en alguna propiedad.
En este momento lo que hago es escribirlo en la propiedad caption de mi OCX, pero me gustaría saber como se crea una propiedad.
Muchas gracias.

Neftali [Germán.Estévez]
30-10-2014, 15:55:29
No se si he entendido bien, pero quieres agregar una propiedad a tu OCX, pero se la añades al fichero TLB.
¿Es así?
Si es así, creo que estás confundiendo las cosas. El fichero TLB no es más que un "envoltorio" realizado al componente, por lo tanto por mucho que añadas a este fichero, el componente real no cambia.
Deberías añadir la propiedad al OCX y luego volver a generar los ficheros (TLB). Automáticamente la nueva propiedad te aparecerá.

De todas formas no se si te he entendido del todo. :confused:

ander
30-10-2014, 16:37:01
Quitaré todo lo que tengo e implementaré la propiedad en el OCX.
Pero lo hice en su día y no había manera por lo que decidí hacerlo de esa manera pero ya veo que no estaba bien.
Seguiré mirando.
Muchas gracias