Un cadre contenant un navigateur type magnétoscope

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 001 fois - Téléchargée 29 fois

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

Ajouter un commentaire

Commentaires

speletux
Messages postés
31
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
6 février 2014

L'intérêt premier de ce code est un exercice sur les pointeurs de fonctions, à savoir, passer une procédure à une propriété de composant.

L'autre intérêt est de dissocier le code de ce navigateur du code des écrans de visualisation d'enregistrements.

Ce navigateur est prévu pour se déplacer dans des listes chaînées ou des tableaux, ce que ne permettent pas, à ma connaissance, les composants D/K correspondants.

C'est un code qui est compatible Delphi/Kylix et Lazarus (Free Pascal)
cs_imi
Messages postés
6
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
25 mars 2008

C'est quoi l'interet au juste ?? Tu réinventes l'eau chaude !!! Les composants de navigation de delphi sont largement suffisant et correspondent exactement à ce que tu fais. le fait de naviguer sur 4 tables simultanément ne change rien à la conception .....

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.