Hola...
Y si a ese componente le asignas un método en su evento
OnDataChange, ¿este sigue comportándose como deseas? Has la prueba y verás que no.
Para
redefinir el comportamiento de un evento, primero debes identificar cual es el método que dispara ese evento, mayormente en la
VCL estos métodos se pueden
redefinir, pero parece que para la clase
TDataSource el método que llama al evento es privado (
DataEvent).
Dicho lo anterior, tu componente debe quedar de la siguiente forma para que funcione:
Código Delphi
[-]
type
TMiDataSource = class(TDataSource)
private
FOldDataChangeEvent: TDataChangeEvent;
procedure DoOnDataChange (Sender: TObject; Field: TField);
protected
procedure Loaded; override;
end;
implementation
procedure TMiDataSource.DoOnDataChange(Sender: TObject; Field: TField);
begin
if Assigned(FOldDataChangeEvent) then
FOldDataChangeEvent(Sender, Field);
end;
procedure TMiDataSource.Loaded;
begin
inherited;
if not csDesigning in ComponentState then
begin
FOldDataChangeEvent := OnDataChangeEvent;
OnDataChangeEvent := DoOnDataChange
end
end;
Toma en cuenta que este código lo hago al vuelo, así que podría fallar. También ten en cuenta que si se cambia el manejador de evento de
OnDataChange en tiempo de ejecución, el comportamiento de este código ya no será el deseado.
Saludos...