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
[-]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 ; 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.