Si el intercambio de acciones ya lo tienes resuelto con el BeforeAction, basta intercambiar el estado de los botones. Esto lo puedes hacer en el evento OnDataChange del DataSource asociado al DBNavigator:
Código Delphi
[-]
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
ButtonEnabled: Boolean;
begin
with DBNavigator1 do
begin
ButtonEnabled := Buttons[nbPrior].Enabled;
Buttons[nbPrior].Enabled := Buttons[nbNext].Enabled;
Buttons[nbNext].Enabled := ButtonEnabled;
ButtonEnabled := Buttons[nbFirst].Enabled;
Buttons[nbFirst].Enabled := Buttons[nbLast].Enabled;
Buttons[nbLast].Enabled := ButtonEnabled;
end;
end;
El único impedimento aquí, es que Buttons es una propiedad protegida del DBNavigator, pero puedes "desprotegerla" fácilmente añadiendo esta declaración antes de tu formulario:
Código Delphi
[-]
type
TDBNavigator = class(DBCtrls.TDBNavigator);
Bye