Ver Mensaje Individual
  #1  
Antiguo 30-10-2014
ander ander is offline
Miembro
 
Registrado: may 2003
Posts: 56
Reputación: 22
ander Va por buen camino
Generar propiedad en ActiveX

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
Código Delphi [-]
    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...
Código Delphi [-]
  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
Código Delphi [-]
  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
Código Delphi [-]
  protected
    { Protected declarations }
    // Aquí van las otras declaraciones
    function Get_Dato_Leido: WideString; safecall;
    procedure Set_Dato_Leido(value:AnsiString);
y..
Código Delphi [-]
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.
Responder Con Cita