Ver Mensaje Individual
  #2  
Antiguo 27-08-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Reputación: 21
jmariano Va por buen camino
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

  ...

  // Clase que nos permitirá acceder a los botones del DBNavigator
  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 // Desactivamos algunos botones
    // Moldeamos el tipo para acceder a cada botón
    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!
Responder Con Cita