2017-09-08 11 views
0

j'ai fait:Comment remplacer un TDBNavigator par un TSpeedButton?

procedure TForm1.SpeedButton1Click(Sender: TObject); 
begin 
    DataTable.qOrders.Next; 
end; 

Il fonctionne, mais le problème est quand je clique sur le bouton pour atteindre le dernier enregistrement, le bouton est désactivé, comme dans un TDBNavigator.

Comment est-ce que j'ai fait le TSpeedButton désactiver et activer automatiquement comme le TDBNavigator fait?

+0

Il vous suffit de désactiver l'événement suivant du bouton dans votre dernier événement de bouton – Fero

Répondre

7

Déposez un TActionList sur votre formulaire et ajoutez-y les actions standard. Connectez ces actions à votre ensemble de données et vos boutons de raccourci aux actions appropriées. Ces actions standard géreront l'état d'activation en fonction de l'état actuel du jeu de données.

1

Voici une solution simple, qui fonctionne parfaitement pour moi.

J'ai un formulaire (frmMain), un ensemble de données (dsWork), une source de données (srcWork), une grille et deux boutons de vitesse (btnNext et btnPrior). La partie importante est dans l'événement "OnDataChange" de TDataSource. Voici le code source:

unit MainForm; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls, ExtCtrls; 

type 
    TfrmMain = class(TForm) 
    btnNext: TButton; 
    srcWork: TDataSource; 
    dsWork: TTable; 
    btnPrior: TButton; 
    grdWork: TDBGrid; 
    procedure btnNextClick(Sender: TObject); 
    procedure btnPriorClick(Sender: TObject); 
    procedure srcWorkDataChange(Sender: TObject; Field: TField); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    frmMain: TfrmMain; 

implementation 

{$R *.dfm} 

procedure TfrmMain.btnNextClick(Sender: TObject); 
begin 
    if not dsWork.Eof then dsWork.Next; 
end; 

procedure TfrmMain.btnPriorClick(Sender: TObject); 
begin 
    if not dsWork.Bof then dsWork.Prior; 
end; 

procedure TfrmMain.srcWorkDataChange(Sender: TObject; Field: TField); 
begin 
    btnNext.Enabled := not dsWork.Eof; 
    btnPrior.Enabled := not dsWork.Bof; 
end; 

end.