Ver Mensaje Individual
  #12  
Antiguo 29-04-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Has definido la propiedad Dataset:

Código Delphi [-]
 property DataSet: Tdataset read vDataSet write vDataSet;

Y en el Create estás haciendo esto:

Código Delphi [-]
// aqui me da error a pesar de estar asignado el dataset en el componente en diseño
vDataSet.AfterPost:= DataSetAfterPost ;

El problema es que el orden en que se crean los componentes no siempre es el que queremos y cuando se está creando el componente TNavegadorGrid (y se ejecuta el Create) puede ser que el Dataset al que estás intentando acceder no esté creado.
Además lo lógico es utilizar el writer de la propiedad, porque querrás asignar un Dataset que te configuren en el object inspector. Ese vDataset que estás utilizando ahora, simplemente es una variable sin valor (nil).

Define la propiedad de la siguiente manera y los métodos en la parte privada:

Código Delphi [-]
  private
    ...
    procedure DataSetAfterPost(DataSet: Tdataset);
    procedure SetDataset(const Value: TDataset);    

  published
    property Dataset:TDataset read vDataset write SetDataset;

La implementación será la siguiente:


Código Delphi [-]
procedure TNavegadorGrid.DataSetAfterPost(DataSet: Tdataset);
begin
  ShowMessage ('prueba comunicacion con el dataset; Se ha realizado un post');
end;

procedure TNavegadorGrid.ImageClick(Sender: TObject);
begin
  ShowMessage ('TNavegadorGrid.ImageClick');
end;

procedure TNavegadorGrid.SetDataset(const Value: TDataset);
begin
  vDataSet := Value;
  ShowMessage ('Asignado Dataset');
  if not(csDesigning in ComponentState) then begin
    vDataSet.AfterPost:= DataSetAfterPost ;  // aqui me da error a pesar de estar asignado el dataset en el componente en diseño
    ShowMessage ('Asignado evento AfterPost');
  end;
end;
Ahora podrás crear el componente y asignar la propiedad Dataset desde el ObjectInspector.

Si ejecutas un Post, "salta" el evento del componente sin problemas.

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita