Como controlar os botões de navegação?

Delphi

30/12/2010

Eu pesquisei no Google e encontrei isso:

No evento DataChange do DataSource:

btPrimeiro.Enabled := not (dsEnsino.DataSet.BOF);
btAnterior.Enabled := btPrimeiro.Enabled;
btProximo.Enabled := not (dsEnsino.DataSet.EOF);
btUltimo.Enabled := btProximo.Enabled;

Mas não funciona!

Quando clico em btProximo (a tabela tendo 1 registro), ele fica habilitado, só desabilita quando clico pela segunda vez. Se tiver mais de um registro, quando chego no último só desabilita depois de clicar novamente.

Já fiz de tudo, já busquei outras alternativas no Google mas não achei nada.

Alguém poderia me ajudar? Só falta isso para concluir o aplicativo.

Agradeço a ajuda.
Robson Dantas

Robson Dantas

Curtidas 0

Respostas

Ricardo Araujo

Ricardo Araujo

30/12/2010

amigo criei uma rotina acho que vai ajudar.


vou colocar o código inteiro.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btnAdicionar: TButton;
    btnAlterar: TButton;
    btnExcluir: TButton;
    btnCancelar: TButton;
    btnSalvar: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnAdicionarClick(Sender: TObject);
    procedure btnAlterarClick(Sender: TObject);
    procedure btnCancelarClick(Sender: TObject);
    procedure btnSalvarClick(Sender: TObject);
  private
    { Private declarations }
  public
    procedure inicializa(btAdicionar, btAlterar, btExcluir, btCancelar,  btSalvar: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }


{ TForm1 }


procedure TForm1.inicializa(btAdicionar, btAlterar, btExcluir,
  btCancelar, btSalvar: Boolean);
begin
  btnAdicionar.Enabled := btAdicionar;
  btnAlterar.Enabled   := btAlterar;
  btnExcluir.Enabled   := btExcluir;
  btnCancelar.Enabled  := btCancelar;
  btnSalvar.Enabled    := btSalvar;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  inicializa(true, true, true, false, false);
end;

procedure TForm1.btnAdicionarClick(Sender: TObject);
begin
  inicializa(false, false, false, true, true);
end;

procedure TForm1.btnAlterarClick(Sender: TObject);
begin
  inicializa(false, false, false, true, true);
end;

procedure TForm1.btnCancelarClick(Sender: TObject);
begin
   inicializa(true, true, true, false, false);
end;

procedure TForm1.btnSalvarClick(Sender: TObject);
begin
     inicializa(true, true, true, false, false);
end;

end.

att.
rbbarreto
rbbarreto@hotmail.com

GOSTEI 0
Marcos Iwazaki

Marcos Iwazaki

30/12/2010

Amigo isso é do proprio delphiEle so considera que chegou no fim do arquivo (eof) depois q vc da um next no ultimo arquivo. Isso quer dizer o fim do arquivo so vem depois do ultimo registro.
Bom se isso realmente é um problema p vc, pode-se tentar usar o ClientdataSet.recordcount - p saber qtos registros vc tem e o clientdataset.recno para saber qual o index do registro atual q vc esta. Dae é so comparar os dois (se não me engano o RECNO começa no 0 e o recordcount no 1) então é so fazer a lógica.
T+
GOSTEI 0
Alan Souza

Alan Souza

30/12/2010

tenta usar o mesmo código que vc fez no evento AfterScroll do seu DataSet:
btPrimeiro.Enabled := not (dsEnsino.DataSet.BOF);
btAnterior.Enabled := btPrimeiro.Enabled;
btProximo.Enabled := not (dsEnsino.DataSet.EOF);
btUltimo.Enabled := btProximo.Enabled;
GOSTEI 0
Leandro

Leandro

30/12/2010

coloque o codigo uma unica vez no OnDataChange do data source

btPrimeiro.Enabled := not (dsEnsino.DataSet.BOF);
btAnterior.Enabled := btPrimeiro.Enabled;
btProximo.Enabled := not (dsEnsino.DataSet.EOF);
btUltimo.Enabled := btProximo.Enabled

testa para ver....
GOSTEI 0
POSTAR