Как заменить TDBNavigator на TSpeedButton?

Я сделал:

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

Это работает, но проблема в том, что когда я нажимаю кнопку, чтобы перейти к последней записи, кнопка не отключается, как в TDBNavigator.

Как сделать так, чтобы TSpeedButton отключалась и включалась автоматически, как это делает TDBNavigator?


person Community    schedule 08.09.2017    source источник
comment
Просто отключите кнопку следующего события в последнем событии кнопки   -  person Fero    schedule 08.09.2017


Ответы (2)


Поместите TActionList в свою форму и добавьте в нее стандартные действия с набором данных. Подключите эти действия к вашему набору данных, а кнопки быстрого доступа — к соответствующим действиям. Эти стандартные действия будут обрабатывать состояние включения в соответствии с текущим состоянием набора данных.

person Uwe Raabe    schedule 08.09.2017

Вот простое решение, которое отлично работает для меня.

У меня есть форма (frmMain), набор данных (dsWork), источник данных (srcWork), сетка и две кнопки скорости (btnNext и btnPrior). Важная часть находится в событии OnDataChange TDataSource. Вот исходный код:

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.
person Zhorov    schedule 08.09.2017