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.
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.