Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPOSANT TPASSWORD COMPOSITE GÉNÉRANT UN MOT DE PASSE ET UN CODE D'ACTIVATION


Information sur le tutorial

Catégorie :Composants Date de création : 14/08/2007 02:14:19 Vu : 4 870 fois

Note :
Aucune note

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Création d'un composant visuel composite constitué de 4 Boutons et de 4 LabelEdits qui donne le mot de Passe et son Code d'Activation associés à un Nom/Login et un nombre aléatoire. De plus le code du composant génére une feuille autoformée lorsque le composant est mis sur une feuille.

Tutorial

TUTORIEL SUR LA CRÉATION D'UN COMPOSANT COMPOSITE VISUEL

 

Un composant graphique composite est un composant comprenant plusieurs composants. Tout composant visuel se sert de la VCL. On y trouve les Boutons, les Labels etc.. Pour encapsuler les différents composants que vous aurez à choisir il vous faut choisir un composant Conteneur. Le plus approprié est sans doute le TCustomPanel de l'unité ExtCtrlsdont TPanel en est un dérivé .

 

Examinons le programme représenté par l'image ci-après qui a pour but de calculer un Mot de Passe et un Code d'Activation.

 

La Feuille Principale ci-après est constitué de 4 Boutons TBitBtn dont les Caption sont Sortie, Génère, Aide, Efface et dont les noms sont Sortie, Ok,Aide, Efface et de 4 TLabeledEdit dont les Caption sont Nom ou Login, Résultat du Mot de Passe, Générateur et Résultat du Code d'Activation  et dont les noms sont Nom, Nombre, Passe et Code.

 

Feuille Principale - Programme générateur de Code - Mot de Passe

 

Image1.jpg

Ø       Sortie  : On sort du programme

Ø      Génère  : On génère un mot de Passe et un Code d'Activation en fonction du No et du Générateur.

Ø      Aide     :  Une aide qui apparaît dans une Feuille Modale.

Ø      Efface  : Effacement de toutes les saisies ( Nom et Générateur ).

 

 Image2.jpg

Feuille Modale d'Aide

La fenêtre Modale de l'Aide constituée d'un TRichEdit s'ouvre en cliquant sur le bouton Aide. En cliquant sur le texte ou sur la croix de fermeture la feuille se ferme et on se retrouve sur la feuille principale.

 

Le but est de servir de la programmation ci-après pour créer un composant TPassword qui incorporera les 2 feuilles Principale et Modale.

 

Listing de la Programmation événementielle  :

 

----------- Feuille Principale FormMdp ------ Projet Password.dproj ---------------

unit Mdp;

interface

uses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,

     Forms,Dialogs,StdCtrls,Buttons,ExtCtrls;

type

  TFormMdp = class(TForm)

    Nom,Nombre,Passe,Code:TLabeledEdit;

    Efface,Ok,Sortie,Aide:TBitBtn;Panel:TPanel;

    procedure EffaceClick(Sender:TObject);

    procedure SortieClick(Sender:TObject);

    procedure OKClick(Sender:TObject);

    procedure NomKeyPress(Sender:TObject;var Key:Char);

    procedure NombreKeyPress(Sender:TObject;var Key:Char);

    procedure AideClick(Sender:TObject);

  private

  end;

var FormMdp:TFormMdp;

implementation

Uses Aide;

{$R *.dfm}

procedure TFormMdp.AideClick(Sender:TObject); // Appel de la Feuille FormAide

begin

  With FormAide Do Begin Left:=FormMdp.Left;

    Top:=FormMdp.Top+FormAide.Height+20;ShowModal;End;

end;

procedure TFormMdp.EffaceClick(Sender:TObject);

begin

  if Nom.Text<>'' then Begin Nom.Clear;Nombre.Clear;Passe.Clear;

    Code.Clear;End;Nom.SetFocus;

end;

procedure TFormMdp.NombreKeyPress(Sender:TObject;var Key:Char);

begin

  If (Key=#13) And (Nom.Text<>'') And (Nombre.Text<>'') then

    If (Length(Nombre.Text)>9) Or (Length(Nombre.Text)<3) then

      Begin MessageDlg('Vous avez saisi '+

        IntToStr(Length(Nombre.Text))+' chiffres'+#13+#13+

        'Entrez au minimum 3 chiffres'+#13+

        'et au maximum 9 chiffres ',mtError,[mbOk],0);

        Nombre.Clear;Nombre.SetFocus;End Else OkClick(Sender);

  If Not((Key) In ['0'..'9']) Or (Ord(Key)=8) then Key:=#0;

end;

procedure TFormMdp.NomKeyPress(Sender:TObject;var Key:Char);

begin

  if Key=#13 then OkClick(Sender);

  if Not((UpCase(Key) In ['A'..'Z']) Or (Ord(Key)=8)

    Or (Ord(Key)=32)) then Key:=#0 Else Key:=UpCase(Key);

end;

Function Genere(Nom:String;Nombre:Integer):String;

Var Valeur,i,Nb:Integer;Chaine:String;

Begin

  // Génération du Mot de Passe - Calcul de la Somme Ascii du Nom

  Valeur:=0;For i:=1 To Length(Nom) Do Inc(Valeur,Ord(Nom[i]));

  // Calcul d'une somme Hexadécimale avec le Générateur

  Nb:=Valeur*Nombre;

  // Sortie du résultat de la génération du Code d'Activation

  Chaine:=IntToStr(Valeur)+'-'+IntToHex(Valeur,1)+'-'+

    Copy(IntToHex(Nb,1),1,5)+'-'+

    Copy(Copy(IntToHex(Nb,1),6)+IntToHex(Nombre,1),1,5);

  if Copy(Chaine,Length(Chaine),1)='-' then

    Chaine:=Copy(Chaine,1,Length(Chaine)-1);Genere:=Chaine;

End;

Function MotPasse(Chaine:String):String; // Génére le mot de Passe

Begin

  Chaine:=Copy(Chaine,1,5)+'-'+Copy(Chaine,6);

  If Copy(Chaine,Length(Chaine),1)='-' then

    Chaine:=Copy(Chaine,1,Length(Chaine)-1);MotPasse:=Chaine;

End;

procedure TFormMdp.OKClick(Sender:TObject);

Var Nb:Integer;

begin

  If (Nom.Text='') Or (Nombre.Text='') then Begin If (Nom.Text='')

    Then Nom.SetFocus Else Nombre.SetFocus;Exit;End;

  Randomize;Nb:=Random(Length(Nombre.Text)*StrToInt(Nombre.Text)+1);

  Passe.Text:=MotPasse(IntToHex(Nb,1));

  Code.Text:=Genere(Nom.Text,Nb);

end;

procedure TFormMdp.SortieClick(Sender:TObject);

begin

  Application.Terminate;

end;

end.

 

 


--------------- Feuille Modale FormAide ------------------------------

unit Aide;

interface

uses

  Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,

  Dialogs,StdCtrls,ComCtrls;

type

  TFormAide = class(TForm)

    Memo:TRichEdit;

    procedure MemoClick(Sender:TObject);

  end;

var FormAide:TFormAide;

implementation

Uses Mdp;

{$R *.dfm}

procedure TFormAide.MemoClick(Sender:TObject); // Retour à la feuille FormMdp

begin

  ModalResult:=mrOk;

end;

end.

------------------------------------------------------------------

 

Création du Composant Tpassword :

 

1ère étape : Se servir du Générateur de Delphi  avec le Menu Composants puis Nouveau Composant Visuel. Choisir dans la liste TCustomPanel de l'unité ExtCtrls. Saisissez dans la fenêtre suivante :

Nom de la Classe = TPassword, Nom de la Palette = Guy  .. puis

Nom de l'Unité = D:\My progs\Code\Password.pas.

 

2ème étape  : A ce stade l'ossature de l'unité ainsi crée est la suivante.

 

unit Password;

interface

uses SysUtils,Classes,Controls,ExtCtrls;

type

  TPassword = class(TCustomPanel)

  Private    { Déclarations privées }

  Protected { Déclarations protégées }

  Public     { Déclarations publiques }

  Published { Déclarations publiées }

  end;

procedure Register;

implementation

procedure Register;

begin

  RegisterComponents('Samples',[TPassword]);

end;

end.

Ø       Nom de l'Unité du Composant

 

Ø       Unités nécessaires pour utiliser le composant TPanel.

 

 

 

 

 

 

 

 

 

 

Ø       Enregistrer TPassword dans ma Palette Perso Guy

Étant donné que l'on veut incorporer 4 TBitBtn et 4 TLabeledEdit, les unités nécessaires à ces composants sont Buttons et ExtCtrls. Donc dans la ligne Uses il nous rajouter Buttons. Les contrôlesTRichEditnécessite l'unité ComCtrls, la fonction MessageDlg l'unité Dialogs, la fonction UpCase l'unité System FormAide l'unité Forms. Les images Glyph (TBitmap)  l'unité Graphics, (TIcon) etc.

 

Finalement la déclaration des unités nécessaires aux composants, fonctions et procédures devra être :

Uses

Messages, SysUtils, Classes, Graphics, Controls, StdCtrls, Forms, Buttons, ExtCtrls,

Dialogs, ComCtrls;

 

  Private    { Déclarations privées }

      Dans cette partie on déclare les composants que vous aller utiliser ainsi que les propriétés que l'on va ajouter. On ne peut y accéder à partir d'autres unités.

 

  Protected { Déclarations protégées }

      Recense les procédures et les événements qui seront en lien avec les boutons.

C'est une interface de dérivation.

 

  Public     { Déclarations publiques }

      Essentiellement les procédures de création et de destruction du composant TPassword. C'est une Interface d'exécution.

        Constructor Create(Owner:Tcomponent);Override;

        Destructor Destroy;Override;

 

La directive Override surcharge l'implémentation de la méthode reçue en héritage.

 

  Published { Déclarations publiées }

    C'est une Interface de Conception. C'est ici que l'on recense toutes les propriétés et procédures qui seront affichées dans l'inspecteur d'objet.

 

3ème étape  : Ajout d'une nouvelle propriété About au composant TPassword(TPanel).

 

Rajoutons une nouvelle Propriété nommée About qui sera visible dans l'inspecteur d'Objet pour notre composant TPassword. Celle-ci ne sera qu'en lecture et sera un message de copyright dudit composant ; ici ® Guy Bidi 2007. Pour cela il nous faut déclarer quel est son Type, quelle est la variable s'y référant avec Private et la publier avec Published pour l'implémenter dans les propriétés du composant. Ainsi on aura :

 

Type

TAbout=String; // Propriété About rajoutée

TPassword = class(TCustomPanel)

Private                 { Déclarations privées }

FAbout:TAbout;     / Déclaration d'un variable de Type TAbout qui est une chaîne de caractères.

published  { Déclarations publiées }

  Property About:TAbout read FAbout;

 

La fonction read va Lire la variable FAbout qui sera initialisée plus loin lors de la création du composant avec la procédure Constructor TPassword.Create(Owner:TComponent);

 

La fonction générale Property X :Type Read X write Proc associe une propriété nommée X de type Type qui en lecture sera la variable X et qui en écriture exécutera la procedure Proc.

 

Constructor TPassword.Create(Owner:TComponent);

Begin

  Inherited Create(Owner);FAbout:='® Guy Bidi 2007';

 

Inherited indique que le composant TPassword de type TPanel sera surchargé de propriété et méthodes avec du code (FAbout).

 

destructor TPassword.Destroy; // Destruction des Composants

begin

        inherited Destroy;           -> On libére le composant Tpassword.

end;

 

Modifions complètement l'aspect de notre TPassword en ajoutons le code suivant :

 

Constructor TPassword.Create(Owner:TComponent );

Begin

  Inherited Create(Owner);Width:=300;Height:=200;Left:=0;Top:=0;

  Height:=156;Width:=361;Color:=11448063;FAbout:='® Guy Bidi 2007';

  Caption:=' ';BevelInner:=bvNone;BevelKind:=BkNone;

  BevelOuter:=bvNone;BorderStyle:=bsNone;FullRepaint:=True;

  ParentBackground:=False;ParentBiDIMode:=True;

  ParentColor:=False;ParentCtl3D:=False;ParentFont:=False;

  Font.Style:=[fsBold];Font.Name:='Tahoma';

 

Outre les propriétés de couleur, de Fonte il faut noter que les propriétés Caption, BevelInner, BevelKind, BevelOuter, BorderStyle sont utilisées pour rendre le TPanel comme transparent. FullRepaint le redessine. A noter que ces propriétés doivent être réintégrées dans la partie Published pour qu'elles apparaissent.

 

4ème étape  : Ajout du Bouton Sortie dans le composant TPassword..

 

Ce bouton Sortie est TBitmap avec des propriétés (voire le code source du programme), ainsi qu'une procédure événementielle OnClick. Il nous faut donc ajouter un Bouton TBitmap et sa procédure OnClick qui va avec.

 

Déclarons le Bouton Sortie: 

TPassword = class(TCustomPanel)

  private    { Déclarations privées }

    FAbout:TAbout;Sortie :TBitBtn ;

 

Déclarons l'événement OnClick du Bouton Sortie:

 

  protected  { Déclarations protégées }

    Procedure SortieClick(Sender:TObject);

 

A la création de TPassword(Create) on y ajoute le code des propriétés que l'on veut modifier ainsi que l'événement OnClick à savoir :

 

Constructor TPassword.Create(Owner:TComponent);

Begin

  Inherited Create(Owner);Width:=300;Height:=200;Left:=0;Top:=0;

  Height:=156;Width:=361;Color:=11448063;FAbout:='® Guy Bidi 2007';

  Caption:=' ';BevelInner:=bvNone;BevelKind:=BkNone;

  BevelOuter:=bvNone;BorderStyle:=bsNone;FullRepaint:=True;

  ParentBackground:=False;ParentBiDIMode:=True;

  ParentColor:=False;ParentCtl3D:=False;ParentFont:=False;

  Font.Style:=[fsBold];Font.Name:='Tahoma';

  Sortie:=TbitBtn.Create(Self);With Sortie Do Begin

    SetBounds(273,118,81,25);Parent:=Self;ParentFont:=True;

    Caption:='&Sortie';ShowHint:=True;Hint:='Sortie du Programme';

    Visible:=True;TabOrder:=4;TabStop:=True;OnClick:=SortieClick;

    Glyph.LoadFromResourceName(hInstance,'SORTIE');End;

 

On crée le Bouton avec TbitBtn.Create(Self), puis on modifie sa taille et son emplacement par la fonction SetBounds(273,118,81,25) et on indique que ce composant Bouton appartient au TPassword(Tpanel) par la fonction Parent :=Self. L'événement OnClick se fera par la procédure SortieClick précédemment déclarée dans Protected et qui terminera l'exécution du programme :

 

Procedure TPassword.SortieClick(Sender:TObject);

Begin

  Application.Terminate;

End;

 

    Que dire Glyph.LoadFromResourceName(hInstance,'SORTIE'); Le BitBtn a une propriété Glyph qui charge une image Bmp à partir d'un fichier. On constate que le composant va devoir utiliser 4 images Bmp (Sortie.bmp, Key.bmp, Help.bmp, Efface.bmp) pour les 4 boutons et une icône(Aide.ico) pour la feuille modale FormAide (voire plus loin).

La meilleure méthode consiste à encapsuler ces images dans un fichier Ressources. Utiliser le programme de votre choix mais Res_HiA  v 3.2 de DelphiCool à  http://delphicool.developpez.comest de bon aloi. Compiler les 4 images et icône avec les noms de SORTIE, KEY, AIDE, EFFACE et ICONE dans un fichier Ressource intitulé MyResource.res que vous placerez dans le répertoire de votre composant. Il ne reste plus qu'à l'appeler dans le code de TPassword. Ceci se fait grâce à :

procedure Register;

implementation

{$R MyResource.res }                  puis utiliser la procédure

LoadFromResourceName(Instance: THandle; const ResName: String);

5ème étape  : Ajout du LabeledEdit Nom dans le composant TPassword..

 

  TPassword = class(TCustomPanel)

  private    { Déclarations privées }

    FAbout:TAbout;Sortie:TBitBtn;   // 1 Bouton

    Nom:TLabeledEdit;                 // 1 LabelEdit          

 

  protected  { Déclarations protégées }

    Procedure SortieClick(Sender:TObject);

    Procedure NomKeyPress(Sender:TObject;var Key:Char); // Teste les caractères

 

Constructor TPassword.Create(Owner:TComponent);

Begin

  Inherited Create(Owner);Width:=300;Height:=200;Left:=0;Top:=0;

  Height:=156;Width:=361;Color:=11448063;FAbout:='® Guy Bidi 2007';

  Caption:=' ';BevelInner:=bvNone;BevelKind:=BkNone;

  BevelOuter:=bvNone;BorderStyle:=bsNone;FullRepaint:=True;

  ParentBackground:=False;ParentBiDIMode:=True;

  ParentColor:=False;ParentCtl3D:=False;ParentFont:=False;

  Font.Style:=[fsBold];Font.Name:='Tahoma';

  Sortie:=TbitBtn.Create(Self);With Sortie Do Begin

    SetBounds(273,118,81,25);Parent:=Self;ParentFont:=True;

    Caption:='&Sortie';ShowHint:=True;Hint:='Sortie du Programme';

    Visible:=True;TabOrder:=4;TabStop:=True;OnClick:=SortieClick;

    Glyph.LoadFromResourceName(hInstance,'SORTIE');End;

  Nom:=TLabeledEdit.Create(Self);With Nom Do Begin

    SetBounds(7,28,159,21);Parent:=Self;LabelPosition:=lpAbove;

    Visible:=True;TabOrder:=0;TabStop:=True;Color:=12582911;

    With EditLabel Do Begin Width:=117;Height:=13;

      Caption:='              Nom ou Login';End;

    LabelSpacing:=7;OnKeyPress:=NomKeyPress;End;

 

Rien de spécial si ce n'est la procédure appelée NomKeyPress.

Examinons cette procédure :

Procedure TPassword.NomKeyPress(Sender:TObject;var Key:Char);

Begin

  if Key=#13 then OkClick(Sender);                                               

  if Not((UpCase(Key) In ['A'..'Z']) Or (Ord(Key)=8)                ,

    Or (Ord(Key)=32)) then Key:=#0 Else Key:=UpCase(Key);

End;

Si la touche est RETURN on exécute la procédure OkClick(Sender) qui sera celle du bouton Génère.

, Si on en tape pas une lettre de A à Z ou l'espace alors la touche sera nulle sinon ma touche sera convertie en majuscule.

 

6ème étape  : Ajout d'une feuille Modale FormAide dans le composant TPassword..

 

Cette feuille Formaide s'affichera au Click du composant Aide.

Celle-ci est constituée d'un TRichEdit et d'une procédure de sortie pour retourner au composant TPassword :

 

Déclaration de la feuille :

type

  TAbout=String; // Propriété About rajoutée

  TPassword = class(TCustomPanel)

  private    { Déclarations privées }

    FAbout:TAbout;Sortie,Ok,Aide,Efface:TBitBtn;   // 4 Boutons

    Nom,Nombre,Passe,Code:TLabeledEdit;  // 4 LabelEdits

    FormAide:TForm;  // Fiche Aide Modale pour le Bouton Aide

    Memo:TRichEdit;  // Le Mémo qui va avec la Feuille FormAide

 

Déclaration des procédures :

protected  { Déclarations protégées }

    Procedure SortieClick(Sender:TObject);

    Procedure OkClick(Sender:TObject);

    Procedure AideClick(Sender:TObject);

    Procedure EffaceClick(Sender:TObject);

    Procedure MemoClick(Sender:TObject);

    Procedure NomKeyPress(Sender:TObject;var Key:Char);

 

Codes des procédures et création de la feuille FomrAide:

 

  TPassword = class(TCustomPanel)

  private    { Déclarations privées }

    FAbout:TAbout;Sortie:TBitBtn;   // 1 Bouton

    Nom:TLabeledEdit;                 // 1 LabelEdit           

 

  protected  { Déclarations protégées }

    Procedure SortieClick(Sender:TObject);

    Procedure NomKeyPress(Sender:TObject;var Key:Char); // Teste les caractères

 

Constructor TPassword.Create(Owner:TComponent);

Begin

  Inherited Create(Owner);Width:=300;Height:=200;Left:=0;Top:=0;

  Height:=156;Width:=361;Color:=11448063;FAbout:='® Guy Bidi 2007';

  Caption:=' ';BevelInner:=bvNone;BevelKind:=BkNone;

  BevelOuter:=bvNone;BorderStyle:=bsNone;FullRepaint:=True;

  ParentBackground:=False;ParentBiDIMode:=True;

  ParentColor:=False;ParentCtl3D:=False;ParentFont:=False;

  Font.Style:=[fsBold];Font.Name:='Tahoma';

  Sortie:=TbitBtn.Create(Self);With Sortie Do Begin

    SetBounds(273,118,81,25);Parent:=Self;ParentFont:=True;

    Caption:='&Sortie';ShowHint:=True;Hint:='Sortie du Programme';

    Visible:=True;TabOrder:=4;TabStop:=True;OnClick:=SortieClick;

    Glyph.LoadFromResourceName(hInstance,'SORTIE');End;

  Nom:=TLabeledEdit.Create(Self);With Nom Do Begin

    SetBounds(7,28,159,21);Parent:=Self;LabelPosition:=lpAbove;

    Visible:=True;TabOrder:=0;TabStop:=True;Color:=12582911;

    With EditLabel Do Begin Width:=117;Height:=13;

      Caption:='              Nom ou Login';End;

    LabelSpacing:=7;OnKeyPress:=NomKeyPress;End;

  FormAide:=TForm.Create(Self);With FormAide Do Begin

    BorderIcons:=[biSystemMenu];BorderStyle:=bsSingle;BorderWidth:=1;

    Height:=173;Width:=361;Name:='FormAide';Font.Style:=[fsBold];

    Font.Name:='Tahoma';Position:=poOwnerFormCenter;AutoSize:=True;

    Caption:='Aide sur l''utilisation du générateur de Code';

    FormAide.Icon.LoadFromResourceName(Hinstance,'ICONE');End;            

  Memo:=TRichEdit.Create(Owner);With Memo Do Begin Parent:=FormAide;

    BevelInner:=bvRaised;BevelOuter:=bvLowered;BorderStyle:=bsSingle;

    Color:=16754431;Height:=145;Width:=353;

    Lines.Append(                                                                           ,

      '            -*    SHAREWARE GÉNÉRATEUR DE CODE    *-'+#13+#13+

      ' Ce générateur de code d''activation est un shareware qui est'+#13+

      ' la propriété    de   ®  Guy Bidi     -   Email:      paounet@free.fr.'+#13+#13+

      ' Après les saisies respectives de votre Nom ou  login ou seuls'+#13+

      ' les  caractères  de A à Z et  l''espace  sont acceptés puis d''un'+#13+

      ' nombre entier constitué au minimum de 3 chiffres jusqu''à  9'+#13+

      ' chiffres  au maximum  comme générateur, vous  obtenez  le'+#13+

      ' code d''activation en cliquant sur le bouton Génère.');

      ShowHint:=True;OnClick:=MemoClick;                                        f

      Hint:='Cliquez pour retourner au Générateur de Code';End;

 

Chargement l'icône de la feuille FormAide à partir des MyResource.res.

, Ajout d'un Texte dans le TrichEdit intitulé Mémo avec la propriété Lines.

f Ajout d'une procédure MemoClick au Click sur le Mémo.

 

Procedure TPassword.MemoClick(Sender:TObject);

Begin

  FormAide.ModalResult:=mrOk;        à   On ferme la feuille Modale FormAide.

End;

 

7ème étape  : Le Code complet du composant TPassword..

 

L'essentiel de l'ajout de composant et des procédures événementielles inhérent au composant TPassword a été vu. Voici le code complet du composant avec ses fonctions diverses :

 

unit Password;     // Composant TPassword créé par Guy Bidi - ® 2007

interface

uses Messages,SysUtils,Classes,Graphics,Controls,StdCtrls,Forms,

     Buttons,ExtCtrls,Dialogs,ComCtrls;

type

  TAbout=String; // Propriété About rajoutée

  TPassword = class(TCustomPanel)

  private    { Déclarations privées }

    FAbout:TAbout;Sortie,Ok,Aide,Efface:TBitBtn;   // 4 Boutons

    Nom,Nombre,Passe,Code:TLabeledEdit;  // 4 LabelEdits

    FormAide:TForm;  // Fiche Aide Modale pour le Bouton Aide

    Memo:TRichEdit;  // Le Mémo qui va avec la Feuille FormAide

  protected  { Déclarations protégées }

    Procedure SortieClick(Sender:TObject);

    Procedure OkClick(Sender:TObject);

    Procedure AideClick(Sender:TObject);

    Procedure EffaceClick(Sender:TObject);

    Procedure MemoClick(Sender:TObject);

    Procedure NomKeyPress(Sender:TObject;var Key:Char);

    procedure NombreKeyPress(Sender:TObject;var Key:Char);

  public     { Déclarations publiques }

    Constructor Create(Owner:Tcomponent);Override;

    Destructor Destroy;override;

  published  { Déclarations publiées }

    Property About:TAbout read FAbout;

    Property Color;

    Property Visible;

    Property Font;

    Property FullRepaint;

    Property ParentBackground;

    Property ParentBiDIMode;

    Property ParentColor;

    Property ParentCtl3D;

    Property ParentFont;

  end;

procedure Register;

implementation

{$R MyResource.res}

Constructor TPassword.Create(Owner:TComponent);

Begin

  Inherited Create(Owner);Width:=300;Height:=200;Left:=0;Top:=0;

  Height:=156;Width:=361;Color:=11448063;FAbout:='® Guy Bidi 2007';

  Caption:=' ';BevelInner:=bvNone;BevelKind:=BkNone;

  BevelOuter:=bvNone;BorderStyle:=bsNone;FullRepaint:=True;

  ParentBackground:=False;ParentBiDIMode:=True;

  ParentColor:=False;ParentCtl3D:=False;ParentFont:=False;

  Font.Style:=[fsBold];Font.Name:='Tahoma';

  Sortie:=TbitBtn.Create(Self);With Sortie Do Begin

    SetBounds(273,118,81,25);Parent:=Self;ParentFont:=True;

    Caption:='&Sortie';ShowHint:=True;Hint:='Sortie du Programme';

    Visible:=True;TabOrder:=4;TabStop:=True;OnClick:=SortieClick;

    Glyph.LoadFromResourceName(hInstance,'SORTIE');End;

  Ok:=TbitBtn.Create(Self);With Ok Do Begin

    SetBounds(183,118,79,25);Parent:=Self;Caption:='&Génère';

    ShowHint:=True;Hint:='Génère le mot de passe ou d''activation';

    Visible:=True;TabOrder:=2;TabStop:=True;OnClick:=OkClick;

    Glyph.LoadFromResourceName(hInstance,'KEY');End;

  Aide:=TbitBtn.Create(Self);With Aide Do Begin

     SetBounds(98,118,68,25);Parent:=Self;Caption:='&Aide';

    ShowHint:=True;Hint:='Aide sur le programme';

    Visible:=True;TabOrder:=6;TabStop:=True;OnClick:=AideClick;

    Glyph.LoadFromResourceName(hInstance,'AIDE');End;

  Efface:=TbitBtn.Create(Self);With Efface Do Begin

    SetBounds(7,118,65,25);Parent:=Self;Caption:='&Efface';

    ShowHint:=True;Hint:='Efface les saisies';

    Visible:=True;TabOrder:=7;TabStop:=True;OnClick:=EffaceClick;

    Glyph.LoadFromResourceName(hInstance,'EFFACE');End;

  Nom:=TLabeledEdit.Create(Self);With Nom Do Begin

    SetBounds(7,28,159,21);Parent:=Self;LabelPosition:=lpAbove;

    Visible:=True;TabOrder:=0;TabStop:=True;Color:=12582911;

    With EditLabel Do Begin Width:=117;Height:=13;

      Caption:='              Nom ou Login';End;

    LabelSpacing:=7;OnKeyPress:=NomKeyPress;End;

  Passe:=TLabeledEdit.Create(Self);With Passe Do Begin

    SetBounds(182,28,168,21);Parent:=Self;LabelPosition:=lpAbove;

    Visible:=True;TabOrder:=0;TabStop:=False;Color:=16755370;

    With EditLabel Do Begin Width:=117;Height:=13;LabelSpacing:=7;

      Caption:='   Résultat du Mot de Passe';End;End;

  Nombre:=TLabeledEdit.Create(Self);With Nombre Do Begin

    SetBounds(35,87,73,21);Parent:=Self;LabelPosition:=lpAbove;

    Visible:=True;TabOrder:=0;TabStop:=False;Color:=12582911;

    With EditLabel Do Begin Width:=68;Height:=13;

      Caption:=' Générateur';End;LabelSpacing:=7;

      OnKeyPress:=NombreKeyPress;End;

  Code:=TLabeledEdit.Create(Self);With Code Do Begin

    SetBounds(181,87,169,21);Parent:=Self;LabelPosition:=lpAbove;

    Visible:=True;TabOrder:=0;TabStop:=False;Color:=16755370;

    With EditLabel Do Begin Width:=167;Height:=13;

      Caption:=' Générateur';End;LabelSpacing:=7;End;

  FormAide:=TForm.Create(Self);With FormAide Do Begin

    BorderIcons:=[biSystemMenu];BorderStyle:=bsSingle;BorderWidth:=1;

    Height:=173;Width:=361;Name:='FormAide';Font.Style:=[fsBold];

    Font.Name:='Tahoma';Position:=poOwnerFormCenter;AutoSize:=True;

    Caption:='Aide sur l''utilisation du générateur de Code';

    FormAide.Icon.LoadFromResourceName(Hinstance,'ICONE');End;

  Memo:=TRichEdit.Create(Owner);With Memo Do Begin Parent:=FormAide;

    BevelInner:=bvRaised;BevelOuter:=bvLowered;BorderStyle:=bsSingle;

    Color:=16754431;Height:=145;Width:=353;

    Lines.Append(

      '            -*    SHAREWARE GÉNÉRATEUR DE CODE    *-'+#13+#13+

      ' Ce générateur de code d''activation est un shareware qui est'+#13+

      ' la propriété    de   ®  Guy Bidi     -   Email:      paounet@free.fr.'+#13+#13+

      ' Après les saisies respectives de votre Nom ou  login ou seuls'+#13+

      ' les  caractères  de A à Z et  l''espace  sont acceptés puis d''un'+#13+

      ' nombre entier constitué au minimum de 3 chiffres jusqu''à  9'+#13+

      ' chiffres  au maximum  comme générateur, vous  obtenez  le'+#13+

      ' code d''activation en cliquant sur le bouton Génère.');

      ShowHint:=True;OnClick:=MemoClick;

      Hint:='Cliquez pour retourner au Générateur de Code';End;

End;

Procedure TPassword.NombreKeyPress(Sender:TObject;var Key:Char);

Begin

  If (Key=#13) And (Nom.Text<>'') And (Nombre.Text<>'') then

    If (Length(Nombre.Text)>9) Or (Length(Nombre.Text)<3) then

      Begin MessageDlg('Vous avez saisi '+

        IntToStr(Length(Nombre.Text))+' chiffres'+#13+#13+

        'Entrez au minimum 3 chiffres'+#13+

        'et au maximum 9 chiffres ',mtError,[mbOk],0);

        Nombre.Clear;Nombre.SetFocus;End Else OkClick(Sender);

  If Not((Key) In ['0'..'9']) Or (Ord(Key)=8) then Key:=#0;

End;

Procedure TPassword.NomKeyPress(Sender:TObject;var Key:Char);

Begin

  if Key=#13 then OkClick(Sender);

  if Not((UpCase(Key) In ['A'..'Z']) Or (Ord(Key)=8)

    Or (Ord(Key)=32)) then Key:=#0 Else Key:=UpCase(Key);

End;

Function Genere(Nom:String;Nombre:Integer):String;

Var Valeur,i,Nb:Integer;Chaine:String;

Begin

  // Génération du Mot de Passe - Calcul de la Somme Ascii du Nom

  Valeur:=0;For i:=1 To Length(Nom) Do Inc(Valeur,Ord(Nom[i]));

  // Calcul d'une somme Hexadécimale avec le Générateur

  Nb:=Valeur*Nombre;

  // Sortie du resultat de la génération du Code d'Activation

  Chaine:=IntToStr(Valeur)+'-'+IntToHex(Valeur,1)+'-'+

    Copy(IntToHex(Nb,1),1,5)+'-'+

    Copy(Copy(IntToHex(Nb,1),6)+IntToHex(Nombre,1),1,5);

  if Copy(Chaine,Length(Chaine),1)='-' then

    Chaine:=Copy(Chaine,1,Length(Chaine)-1);Genere:=Chaine;

End;

Function MotPasse(Chaine:String):String; // Génére le mot de Passe

Begin

  Chaine:=Copy(Chaine,1,5)+'-'+Copy(Chaine,6);

  If Copy(Chaine,Length(Chaine),1)='-' then

    Chaine:=Copy(Chaine,1,Length(Chaine)-1);MotPasse:=Chaine;

End;

Procedure TPassword.OkClick(Sender:TObject);

Var Nb:Integer;

begin

  If (Nom.Text='') Or (Nombre.Text='') then Begin If (Nom.Text='')

    Then Nom.SetFocus Else Nombre.SetFocus;Exit;End;

  Randomize;Nb:=Random(Length(Nombre.Text)*StrToInt(Nombre.Text)+1);

  Passe.Text:=MotPasse(IntToHex(Nb,1));

  Code.Text:=Genere(Nom.Text,Nb);

End;

Procedure TPassword.EffaceClick(Sender:TObject);

Begin

  if Nom.Text<>'' then Begin Nom.Clear;Nombre.Clear;Passe.Clear;

    Code.Clear;End;Nom.SetFocus;

End;

Procedure TPassword.MemoClick(Sender:TObject);

Begin

  FormAide.ModalResult:=mrOk;

End;

Procedure TPassword.AideClick(Sender:TObject);

Begin

  FormAide.ShowModal;Nom.SetFocus;

End;

Procedure TPassword.SortieClick(Sender:TObject);

Begin

  Application.Terminate;

End;

destructor TPassword.Destroy; // Destruction des Composants

begin

  inherited Destroy;

end;

procedure Register;

begin

  RegisterComponents('Guy',[TPassword]);

end;

end.

 


Création du Package Password :

 

Il ne reste désormais qu'à enregistrer ce composant afin de le tester. Cliquez sur Fichier puis sur Nouveau puis Autre et choisissez Groupe de Projets.

Un intitulé ProjectGroup1 apparaît dans la fenêtre. Avec le bouton de la souris choisissez Ajouter un nouveau projet (ou cliquez sur le menu Icône Nouveau). Choisissez dès lors Delphi puis Package. La fenêtre présente l'ossature suivante :

 

ProjectGroup1

Package1.bpl

Contient

Requiert

Rtl.dcp

 

Ø       Renommer Package1.bpl en Password.bpl

Ø       Avec le bouton droit de la souris cliquez sur Ajouter et sélectionner l'unité Password.pas dans votre répertoire

Résultat

ProjectGroup1

Password.bpl

Contient

..\..\..

MyProgs

Code

Password.dcr

Password.pas

Requiert

Rtl.dcp

Vcl.dcp

 

Ø       Nom du composant compilé.