TfvsDBNavigator
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.

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.
Oculta o muestra un botón.
Habilita o deshabilita un botón que está visible.
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.
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.
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.