En teoría, no se puede realizar lo que pides porque DBNavigator no posee ninguna propiedad o método que permita activar o desactivar cada botón (sólo te permite, como comentaste, hacerlos visibles o invisibles).
Sin embargo, gracias a que la propiedad sobre los botones del DBNavigator es una propiedad protegida, podemos hacer uso de un pequeño truco para acceder a métodos y propiedades que están protegidas. El truco consiste, simplemente, en declarar un tipo basado en la clase TDBNavigator y después hacer un moldeado de tipo para acceder a la propiedad sobre los botones (y así manipular cada botón pudiendo desactivarlo).
Por ejemplo, para hacer lo que pides:
- primero declaramos la clase basada en TDBNavigator en la parte "interface" de la unidad:
Código Delphi
[-]
interface
type
...
THackDBNavigator = class(TDBNavigator)
end;
...
- por último, en el evento "OnClick" del DBNavigator escribiriamos lo siguiente:
Código Delphi
[-]
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
if Button = nbInsert then with THackDBNavigator(DBNavigator1) do
begin
Buttons[nbFirst].Enabled := False;
Buttons[nbPrior].Enabled := False;
Buttons[nbNext].Enabled := False;
Buttons[nbLast].Enabled := False;
Buttons[nbDelete].Enabled := False;
Buttons[nbEdit].Enabled := False;
Buttons[nbInsert].Enabled := False;
Buttons[nbRefresh].Enabled := False;
end;
end;
Para terminar, solo decir que no es necesario volver activar los botones ya que éstos se actualizan según el estado del DataSet (como ya sabrás).
Saludos!