TfvsDBNavigator

De Pragma Wiki
Revisión del 21:49 26 may 2025 de Luciano Carou (discusión | contribs.) (→‎Funcionalidad de navegación)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Descripción

El objeto TfvsDBNavigator (Control de navegación / edición DB de registros de una tabla) es el control de navegación de datasets estándar.

TfvsDBNavigator.

Identidad

  • Ancestro: TDBNavigator
  • Carpeta: C:\DevelopPrx\library
  • Archivo: fvsDBNavigator.pas

Declaración

type
  THackDBNavigator = class(TDBNavigator);

const
  TfvsDBNavigatorButtonWidth = 24;

type
  TfvsDBNavigatorOnGetPopupOptions = procedure (Sender: TprxPopupMenu) of object;

type
  TfvsDBNavigatorOnNavigatorClick = procedure (Sender: TDBNavigator; aButton: TNavigateBtn; aX: Integer; aY: Integer; var aHandled: Boolean) of object;

type
  TfvsDBNavigator = class(TDBNavigator)
  private
    FOnRefreshClick: TNotifyEvent;
    FUseAutoDataSet: Boolean;
    FUseAutoDataSetRecs: Integer;
    FActionList: TActionList;
    FActionListIsDetail: Boolean;
    FActionFlag: Boolean;

    FImages: TImageList;
    FPopupMenu: TprxPopupMenu;

    FOnGetPopupOptions: TfvsDBNavigatorOnGetPopupOptions;
    FOnNavigatorClick: TfvsDBNavigatorOnNavigatorClick;

    FGrid: {TfvsDBGrid} TCustomGrid;

    FHintsTraducidas: TStringList;

    procedure   SetupHackedNavigator(const Navigator: TDBNavigator; const Glyphs: TImageList; const GlyphNum: Integer);
  protected
    procedure   ClickHandler(Sender: TObject);
    procedure   SetUseAutoDataSet(aValue: Boolean);
    procedure   SetUseAutoDataSetRecs(aValue: Integer);

    procedure   SetActionList(aValue: TActionList);

    procedure   SetImages(aValue: TImageList);

    procedure   Notification(AComponent: TComponent; Operation: TOperation); override;

    function    TAG_READONLY: Boolean;

    procedure   Refresh(Sender: TObject); virtual;

    property    ActionFlag: Boolean read FActionFlag write FActionFlag;

    property    HintsTraducidas: TStringList read FHintsTraducidas write FHintsTraducidas;
  public
    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;
    procedure   Loaded; override;
    procedure   ButtonVisible(aButton: TNavigateBtn; aVisible: Boolean = True);
    procedure   ButtonEnable(aButton: TNavigateBtn; aEnable: Boolean = True);
    procedure   ButtonHint(aButton: TNavigateBtn; aHint: String);
    procedure   AutoDataSetEdit;

    procedure   AddAction(aButton: TNavigateBtn; aAction: TAction);

    procedure   FirstRecord(Sender: TObject); virtual;
    procedure   PriorRecord(Sender: TObject); virtual;
    procedure   NextRecord(Sender: TObject); virtual;
    procedure   LastRecord(Sender: TObject); virtual;
    procedure   NewRecord(Sender: TObject); virtual;
    procedure   EditRecord(Sender: TObject); virtual;
    procedure   CancelRecord(Sender: TObject); virtual;
    procedure   PostRecord(Sender: TObject); virtual;
    procedure   DeleteRecord(Sender: TObject); virtual;

    procedure   BtnClick(Index: TNavigateBtn); override;
    procedure   OnOptionsClick(Sender: TObject);
    procedure   OnPopupXtd(Sender: TObject); overload;
    procedure   OnPopupXtd(X: Integer; Y: Integer); overload;

    procedure   SetupHackedNavigatorPublic(const Glyphs: TImageList; const GlyphNum: Integer);

    procedure   ReadOnly_Buttons_Refresh(aDisableEdit: Boolean);

    property    PopupMenu: TprxPopupMenu read FPopupMenu write FPopupMenu;

    property    UseAutoDataSetRecs: Integer read FUseAutoDataSetRecs write SetUseAutoDataSetRecs;

    property    Grid: {TfvsDBGrid} TCustomGrid read FGrid write FGrid;
  published
    property    UseAutoDataSet: Boolean read FUseAutoDataSet write SetUseAutoDataSet;
    property    ActionList: TActionList read FActionList write SetActionList;
    property    ActionListIsDetail: Boolean read FActionListIsDetail write FActionListIsDetail;

    property    OnRefreshClick: TNotifyEvent read FOnRefreshClick write FOnRefreshClick;
    property    Images: TImageList read FImages write SetImages;

    property    OnGetPopupOptions: TfvsDBNavigatorOnGetPopupOptions read FOnGetPopupOptions write FOnGetPopupOptions;
    property    OnNavigatorClick: TfvsDBNavigatorOnNavigatorClick read FOnNavigatorClick write FOnNavigatorClick;
  end;

Implementación

procedure Loaded

Agrega un texto explicativo (hint) a cada uno de los botones. El texto es una constante pero traducida usando los lenguajes, es decir que si la constante es Primero lo que se va a mostrar es la traducción de ese texto al lenguaje que usa el usuario. Los botones, y sus textos, son:

  • nbFirst: Primero.
  • nbPrior: Anterior.
  • nbNext: Siguiente.
  • nbLast: Último.
  • nbInsert: Agregar.
  • nbDelete: Eliminar.
  • nbEdit: Abrir.
  • nbPost: Guardar.
  • nbCancel: Cancelar.
  • nbRefresh: Refrescar.

nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel y nbRefresh son definiciones de Delphi que representan los botones del navegador.

procedure ButtonVisible(aButton: TNavigateBtn; aVisible: Boolean = True)

Oculta o muestra un botón.

procedure ButtonEnable(aButton: TNavigateBtn; aEnable: Boolean = True)

Habilita o deshabilita un botón que está visible.

procedure ButtonHint(aButton: TNavigateBtn; aHint: String)

Cambia el hint de un botón.

procedure ClickHandler(Sender: TObject)

Maneja el click sobre un botón del navegador.

Si el evento OnNavigatorClick está asignado lo ejecuta, sino si el evento OnClick está asignado lo ejecuta, sino ejecuta BtnClick.

procedure BtnClick(Index: TNavigateBtn)

Por defecto es la rutina ejecutada ante el click sobre un botón:

  • Si se presiona nbFirst se ejecuta FirstRecord.
  • Si se presiona nbPrior se ejecuta PriorRecord.
  • Si se presiona nbNext se ejecuta NextRecord.
  • Si se presiona nbLast se ejecuta LastRecord.
  • Si se presiona nbInsert se ejecuta NewRecord.
  • Si se presiona nbEdit se ejecuta EditRecord.
  • Si se presiona nbCancel se ejecuta CancelRecord.
  • Si se presiona nbPost se ejecuta PostRecord.
  • Si se presiona nbRefresh se ejecuta Refresh.
  • Si se presiona nbDelete se ejecuta DeleteRecord.

Funcionalidad de navegación

procedure FirstRecord(Sender: TObject)

Si el dataset está en dsBrowse (no está ni en inserción ni en edición) llama al procedimiento FirstRecord(Sender) del dataset. La llamada es según si el dataset es un TprxADOQuerySelect o un TprxADODataSetEdit:

  if DataSource.State = dsBrowse then
     begin
     if DataSource.DataSet is TprxADOQuerySelect then
        TprxADOQuerySelect(DataSource.DataSet).FirstRecord(Sender)
     else
     if DataSource.DataSet is TprxADODataSetEdit then
        TprxADODataSetEdit(DataSource.DataSet).FirstRecord(Sender);
     end;

procedure PriorRecord(Sender: TObject)

Similar anterior pero llama a la función PriorRecord para navegar al registro anterior.

procedure NextRecord(Sender: TObject)

Similar anterior pero llama a la función NextRecord para navegar al registro siguiente.

procedure LastRecord(Sender: TObject)

Similar anterior pero llama a la función LastRecord para navegar al último registro.

procedure NewRecord(Sender: TObject)

Pone el dataset en inserción llamando al procedimiento Insert del dataset.

procedure EditRecord(Sender: TObject)

Pone el dataset en edición llamando al procedimiento Edit del dataset.

procedure CancelRecord(Sender: TObject)

Cancela la inserción o edición llamando al procedimiento Cancel del dataset.

procedure PostRecord(Sender: TObject)

Como el poseo de los cambios al dataset se maneja localmente en las pantallas este procedimiento aplica el Cancel.

procedure DeleteRecord(Sender: TObject)

El procesamiento de la eliminación de registros también es local a los forms así que no hace nada.

procedure Refresh(Sender: TObject)

Vuelve a refrescar los registros de la pantalla, solo si el dataset está en dsBrowse:

  • Si el dataset es un TprxADOQuerySelect llama a su procedimiento Refresh.
  • Si el dataset es un TprxADODataSetDetail no hace nada.
  • Si el dataset es un TprxADODataSetEdit llama a su procedimiento SelectXtd.
  • Si la propiedad Grid (grilla) está asignada llama a la función TfvsDBGrid(Grid).WidthJustify para ajustar el ancho de las columnas.

procedure OnPopupXtd(Sender: TObject)

Abre el menú popup asociado al nacegador.