Un cadre contenant un navigateur type magnétoscope

Contenu du snippet

Ce code implémente sous forme de cadre un navigateur de type magnétoscope pour se déplacer dans un ensemble de fiches (ex: répertoire téléphonique).
Il peut très facilement être transformé en composant.

Ce navigateur a été conçu pour être intégré dans un gestionnaire de bases de données opérant sur quatre tables.
Le frontal de gestion de cette base comporte quatre navigateurs de ce type.

Paramètres d'entrée:

- Mini, Maxi: Valeurs mini et maxi de l'index de l'ensemble de fiches
- Position: Position dans l'ensemble de fiche

- GotoProc: Pointeur sur une procédure définie par procedure(const Idx: integer)

Cette procédure doit être définie dans la form où se trouve le navigateur; elle effectue le déplacement et l'affichage des données

Exemple:

Soit une procédure SetCurrentRecord(const Idx: Integer) d'un formulaire Client, qui charge des données d'un client et les affiche dans le formulaire; soit un composant ou cadre TCdrNavigateurItems posé sur la form,

on passe à ce composant les paramètres suivants:

Min := 0;
Max := <Nombre d'enregistrements - 1>
GotoProc:=SetCurrentRecord;

dans la section de démarrage de la Form.

Le click sur les boutons permet de naviguer.

Source / Exemple :


unit CadreNavigateurItems;

interface

uses
  
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  QDialogs, QActnList, QStdCtrls, QButtons, QImgList;

type TGotoProc = procedure(const Idx: integer) of object;
type
  TCdrNavigateurItems = class(TFrame)
    acListCdrNavigateur: TActionList;
    acGotoFirst: TAction;
    acGoto10Prev: TAction;
    acGotoPrev: TAction;
    acGotoNext: TAction;
    acGoto10Next: TAction;
    acGotoLast: TAction;
    acNew: TAction;
    acValidate: TAction;
    editPosition: TEdit;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    imgsCdrNavigateur: TImageList;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton7: TSpeedButton;
    SpeedButton8: TSpeedButton;
    procedure SetSafePositionItem(const Idx: integer);
    procedure acGotoFirstExecute(Sender: TObject);
    procedure acGotoPrevExecute(Sender: TObject);
    procedure acGotoNextExecute(Sender: TObject);
    procedure acGotoLastExecute(Sender: TObject);
    procedure acGoto10PrevExecute(Sender: TObject);
    procedure acGoto10NextExecute(Sender: TObject);
  private
    { Déclarations privées }
    FMin       : integer;
    FMax       : integer;
    FPosition  : integer;

    FProcGoto  : TGotoProc;
  public
    { Déclarations publiques }
    property Min: integer read FMin write FMin;
    property Max: integer read FMax write FMax;
    property Position: integer read FPosition write FPosition;
    property ProcGoto: TGotoProc read FProcGoto write FProcGoto;
  end;

implementation

{$R *.xfm}
// Déplace en toute sécurité vers la fiche spécifiée
procedure TCdrNavigateurItems.SetSafePositionItem(const Idx: integer);
var
  q: integer;
begin
  q:=Idx;
  if q<FMin then q:=FMin;
  if q>FMax then q:=FMax;
  FProcGoto(q);
  FPosition:=q;
end;
procedure TCdrNavigateurItems.acGotoFirstExecute(Sender: TObject);
begin
  SetSafePositionItem(FMin);
end;

procedure TCdrNavigateurItems.acGotoPrevExecute(Sender: TObject);
begin
  SetSafePositionItem(FPosition - 1);
end;

procedure TCdrNavigateurItems.acGotoNextExecute(Sender: TObject);
begin
  SetSafePositionItem(FPosition + 1);

end;

procedure TCdrNavigateurItems.acGotoLastExecute(Sender: TObject);
begin
  SetSafePositionItem(FMax);
end;

procedure TCdrNavigateurItems.acGoto10PrevExecute(Sender: TObject);
begin
  SetSafePositionItem(FPosition - 10);
end;

procedure TCdrNavigateurItems.acGoto10NextExecute(Sender: TObject);
begin
  SetSafePositionItem(FPosition + 10);
end;
end.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.