Comment installer les composants
Les composants Delphi présents dans le CD ROM, associés au chapitre "Construire des outils" du livre :
Les composants sont classés en trois catégories
de développement . Le classement est essentiellement effectué
à partir de la classe initiale dont il dérive. Nous avons
choisi trois classes de départ (d'abstractions différentes)
correspondant à trois types généraux de composants
que l'on peut dévélopper rapidement. Il est possible d'ouvrir
encore plus la classe mère mais nous pensons que cela obligerait
le lecteur à rentrer dans la complexité technique du produit.
Ces trois catégories devraient suffire à faire comprendre
le mécanisme de construction. Elles fournissent en outre un nombre
important de nouveaux outils.
Les 3 catégories
explorées, un composant est construit par :
Delphi.Composants
|__ Propriete.Tree
|__ Methode.Tree
|__ Evenement.Tree
|__ Retailler.Tree
Remonter
Delphi.Composants
|__ Compos.TwinArbre
|__ Compos.exprarit
|__ Compos.ListeNonVisu\DebugListe
Remonter
Delphi.Composants
|__ Compos.ListeNonVisu
|__ Liste4Visuellecompos.Dlfi (version
visuelle du précédent)
Remonter
Delphi.Composants
|__ Compos.temps
Remonter
Un composant d'arbre dont on peut modifier la taille à la conception.
On reprend le principe de construction du composant Evenement.Tree
en y ajoutant une méthode privée permettant d'intercepter
pendant la conception le message système WM_SIZE (changement
de la taille du contrôle).
Par rapport au contenu de la Unit du composant Evenement.Tree, nous n'avons fait qu'ajouter la méthode "procedure WMSize" dont le rôle est d'intercepter le message de modification de la taille du contrôle pendant la conception.
interface
TTree4 = class(TCustomControl){strictement identique à
l'étape 1}
private
Fniveau:integer;
Arbre:Toutline;
procedure WMSize(var
Message:TWMsize);message WM_SIZE;
.........
implementation
// méthode "WMSize" de modification de la taille:
procedure TTree4.WMSize(var
Message:TWMsize);
{permet de modifier la taille du customcontrol
lors de la conception.
Elle est exécutée à chaque
fois que, lors de la conception, vous essayez
de modifier la taille du CustomControl. Le
Toutline ajuste sa hauteur
(height) et sa largeur (width) à celle
du CustomControl.}
begin
inherited;
Arbre.setbounds(0,0,width,height);
end;
Le code source du composant complet se trouve sur le CD-ROM dans : Delphi.Composants\Retailler.Tree\Utree4.pas
Composant : Compos.TwinArbre (association de composants visuels)
Ce composant est un exemple d'association de plusieurs composants:
Un Toutline est associé à deux autres composants
visuels TTrackBar et TEdit, afin de ne plus former qu'un
seul composant. En outre pour son fonctionnement sur la partie arborescente
(Toutline) il est construit comme une combinaison des 4 variations sur
le Toutline ( Methode.Tree, Propriete.Tree, Evenement.Tree, Retailler.Tree).
Il est donc conseillé de bien étudier séparément
ces 4 composants distincts, puis de considérer le composant TWinArbre
comme récapitulant en une seule classe toutes les modifications
apportées au Toutline. Enfin, il vous est possible d'ajouter au
TWinArbre vous même, de nouvelles propriétés ou de
nouvelles réaction à certains évènements en
suivant la démarche conseillée dans le développement
pas à pas de chacun des 4 exemples.
aspect visuel ducomposant TWinArbre:
Voici à titre indicatif la classe du composant TwinArbre :
TwinArbre = class(TCustomControl)
private
{ les 3 objets visuels assemblés}
FPotentiometre: TTrackBar;
FEdit1: TEdit;
FTree:Toutline;
OldColor:TColor;
procedure WMSize(var Message:TWMsize);message
WM_SIZE;
function Getmaxniveau:integer;
function GetProfondeur:integer;
function GetEnabled:boolean;
procedure SetEnabled(x:boolean);
function GetLignes:Tstrings;
procedure SetLignes(x:Tstrings);
function GetCouleur:TColor;
procedure SetCouleur(x:TColor);
function GetAscenceur:TScrollStyle;
procedure SetAscenceur(x:TScrollStyle);
procedure affiche_un_niveau(le_niveau:integer);
procedure affiche_racine;
procedure lire_un_niveau(indice:integer;niveau:integer);
procedure CalCulChemin(Noeud:ToutLineNode;Liste:TStringList);
procedure ArbreMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PotentiometreChange(Sender: TObject);
public
Liste: TStringList;
constructor Create(Aowner:Tcomponent);override;
property Potentiometre: TTrackBar read
FPotentiometre;
property Tree: Toutline read FTree
write
FTree;
property Profondeur:integer read GetProfondeur;
published // ce qui apparaît dans l'inspecteur
d'objet lors de la conception
property Enabled:boolean read Getenabled
write
Setenabled;
property Lignes: Tstrings read GetLignes
write
SetLignes;
property Couleur: TColor read GetCouleur
write
SetCouleur;
property Ascenceur: TScrollStyle read
GetAscenceur write SetAscenceur;
end;
Le code source du composant complet se trouve sur le CD-ROM dans : Delphi.Composants\Compos.TwinArbre\UWinArbre.pas
Composant : Compos.exprarit (association de composants visuels)
Ce composant TExpraritm permet la saisie d'expressions arithmétiques par filtrage. Il est composé d'un assemblage visuel constitué de deux TEdit, un TListBox et une table de TBitBtn (créée dynamiquement lors de la conception). Ces objets visuels sont associés à un analyseur descendant récursif (pour grammaire LL(1) des expressions arithmétiques) qui est fourni et qui sert à assurer le filtrage des expressions saisies par l'utilisateur. Ce composant recouvre les parties du cours concernant la construction de composant pour une interface de saisie et le filtrage par analyse d'une grammaire LL(1).
Afin d'aider le lecteur la construction de ce composant a été decomposée selon la procédure des trois étapes successives (un programme, une classe, le composant) et se trouve sur le CD :
code source
dans :
Delphi.Composants\Compos.exprarit\Exprarithm00.dev (un
programme)
Delphi.Composants\Compos.exprarit\Exprarithm01.dev (une
classe)
Delphi.Composants\Compos.exprarit\Exprarithm02.dev (le
composant)
aspect visuel du composant TExpraritm:
Voici à titre indicatif la classe du composant TExpraritm :
type
TypBouton=(T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,TTest,Tback,Tclear,Tplus,
Tmoins,Tmult,Tpuiss,Tparferm,Tdiv,Tdivint,Tmod,Tparouvr,
Tvar,Tleave,TFin);
TableBouton=array[TypBouton]of TBitBtn;
enscar=set of char;
TExpraritm=class(TCustomControl)
private
Edit1: TEdit;
Edit2: TEdit;
ListBoxvar: TListBox;
UnBouton:TableBouton;
numcar: integer;
carlu: char;
LesFollow,LesInit:enscar;
Chiffres,Lettres:enscar;
edit_expr,expr_loc,expr_err:string; {expressions
dans l'éditeur}
erreur_expr:boolean;{erreur
dans l'expression}
procedure ListBoxClick(Sender: TObject);
procedure BitBtnClick(Sender: TObject);
procedure BitBtnTestClick(Sender: TObject);
procedure BitBtnbackClick(Sender: TObject);
procedure BitBtnclearClick(Sender: TObject);
procedure BitBtnvarClick(Sender: TObject);
procedure BitBtnleaveClick(Sender: TObject);
procedure BitBtnfinClick(Sender: TObject);
procedure expr;
procedure init;
procedure carsuiv;
procedure err(n:integer);
function GetLignes:Tstrings;
procedure SetLignes(x:Tstrings);
public
Expression:string;
Reconnue:boolean;
constructor create(Aowner:Tcomponent);override;
published
property Lignes:TStrings read
GetLignes write SetLignes;
end;
Composant : Compos.TEditListe (association de composants visuels)
Ce composant est proposé à titre pédadgogique afin d'être modifié et enrichi par des nouvelles fonctionnalités. Il sert de panneau visuel de deboggage au composant non visuel de liste (classe Tliste dans "UListeCompos " ), il utilise un champ FListe de type Tliste, le code source vous indique comment réutiliser pratiquement un de vos composant déjà construit, dans un nouveau composant.
Le code source du composant complet se trouve sur le CD-ROM dans : Delphi.Composants\Compos.ListeNonVisu\DebugListe\UEditListeCompos.pas
Un exemple d'utilisation
de ce composant se trouve ur le CD-ROM dans :
Delphi.Composants\Compos.ListeNonVisu\DebugListe\PoidsListedebug.Dlfi
aspect visuel du composant TEditListe:
Voici à titre indicatif la classe du composant TEditListe :
unit UEditListeCompos;
interface
Uses UListeCompos,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons,StdCtrls,ExtCtrls, Grids,ComCtrls;
type
TEditListe=class(TCustomControl)
private
FBevel:TBevel; FEditRang: TEdit;FEditElement: TEdit;
FEditrangpos: TEdit;
FEditposition: TEdit; FEditajouter: TEdit; FEditinserer:
TEdit;
FEditmodifier: TEdit; FEditsupprimer: TEdit;
FListBox1: TListBox;
FBitBtnCharger: TBitBtn;FBitBtnElement: TBitBtn;
FBitBtnPosition: TBitBtn;
FBitBtnAjouter: TBitBtn;FBitBtnInserer: TBitBtn;
FBitBtnModifier: TBitBtn;
FBitBtnSupprimer: TBitBtn; FBitBtnSauver: TBitBtn;
FBitBtnEffacer: TBitBtn; FBitBtnFermer: TBitBtn;
FLabel1: TLabel; FLabelCount: TLabel;
FListe:TListe; //composant
personnel non visuel de liste de chaînes
procedure BitBtnSauverClick(Sender: TObject);
procedure BitBtnChargerClick(Sender: TObject);
procedure BitBtnEffacerClick(Sender: TObject);
procedure BitBtnElementClick(Sender: TObject);
procedure BitBtnPositionClick(Sender: TObject);
procedure BitBtnAjouterClick(Sender: TObject);
procedure BitBtnInsererClick(Sender: TObject);
procedure BitBtnModifierClick(Sender: TObject);
procedure BitBtnSupprimerClick(Sender: TObject);
procedure BitBtnFermerClick(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Voir;
public
constructor create(Aowner:Tcomponent);override;
destructor Liberer;
procedure EditerListe(var L:TListe);
published
{property à
rajouter si vous le souhaitez}
end;
Composant : Compos.ListeNonVisu (un composant non visuel)
Ce composant (TListe dans UListecompos.pas) est proposé à titre pédadgogique. Il montre comment encapsuler la classe TStringList dans un composant : nous construisons ce composant de liste de chaînes non visuelle héritant de Tcomponent (ancêtre abstrait le plus haut pour tout composant) avec un seul champ de type TStringList, ses opérateurs étant une encapsulation des opérateurs du TStringList. Nous avons construit une méthode (procedure VersListBox (LBox:TListBox); ) qui permet la recopie du contenu de la liste dans un TlistBox, le programmeur pourra donc visualiser rapidement le contenu de sa liste interne en utilisant cette méthode publique.
Le code source du composant complet se trouve sur le CD-ROM dans : Delphi.Composants\Composant\UListecompos.pas
Aspect de l'icône du composant dans la palette :
TListe = class(TComponent)
private
FListGeneric:TstringList;
function Getcount:integer;
function GetDuplic:boolean;
procedure SetDuplic(x:boolean);
function Getsorted:boolean;
procedure Setsorted(x:boolean);
public
constructor create(Aowner:Tcomponent);override;
destructor Liberer;
{opérateurs de manipulation
de la liste}
procedure Effacer;
function Element(rang:integer):string;
function Position(element:string):integer;
procedure Ajouter(ch:string);
procedure Inserer(element:string;rang:integer);
procedure Modifier(rang:integer;element:string);
procedure Supprimer(rang:integer);
{opérateurs de recopie
d'une liste}
procedure EstUneCopiede(T:TListe);
procedure VersListBox(LBox:TListBox);
{opérateurs d'entrée/sortie
dans une liste}
procedure Charger;
procedure Sauver;
// ajoutez ici vos propres opérateurs
publiques de liste
{propriétés publiques,
uniquement consultables}
property Quantite:integer read Getcount
;
property ListGeneric:TstringList read
FListGeneric;
published
property Dupliquee:boolean read GetDuplic
write
SetDuplic;
property Triee:boolean read Getsorted
write
Setsorted;
// ajoutez ici vos propres
propriétés publiées
end;
Une version de composant de liste de chaînes
visuelle héritant du TListBox se trouve sur le CD-ROM dans :
Delphi.Composants\Liste4Visuellecompos.Dlfi
type
T0 = string;
liste =class(TListBox)
public
constructor
create(Aowner:Tcomponent);override;
procedure
init_liste;
function
longueur : integer;
procedure
supprimer (k: integer);
procedure
inserer (k: integer; x: T0);
function
kieme (n: integer): T0;
function
Test (x: T0): boolean;
procedure
Rechercher (x: T0; var place: integer);
procedure
creationListe(Box:TListBox);
procedure
Ajouter(x:T0);
procedure
effacer;
private
function
Est_vide:boolean;
end;
Composant : Compos.temps(un composant associé, visuel avec Timer)
Ce composant Ttemps est proposé à titre pédadgogique afin d'être observé, modifié et enrichi par de nouvelles fonctionnalités. Il est composé par association d'un TEdit, d'un TLabel, de trois TBitBtn et d'un TTimer. Il fournit en temps réel l'heure machine, mise à jour toutes les secondes.
La construction de ce composant a été decomposée selon la procédure des trois étapes successives (un programme, une classe, le composant) et se trouve sur le CD :
code source du
composant complet dans : Delphi.Composants\Compos.temps\Dateheure00.dev
(un
programme)
Delphi.Composants\Compos.temps\Dateheure01.dev (une classe)
Delphi.Composants\Compos.temps\Dateheure02.dev (le composant)
aspect visuel du composant Ttemps:
Ttemps = class(TCustomControl)
private
Timer1: TTimer;
LabelHeure: TLabel;
Edit1: TEdit;
BitBtndate: TBitBtn;
BitBtnjour: TBitBtn;
BitBtnNow: TBitBtn;
LesJours:array[1..7]of string;
FHeure,FDate,FJour:string;
FFondcolor,FClockcolor:Tcolor;
procedure Timer1Timer(Sender: TObject);
procedure BitBtndateClick(Sender: TObject);
procedure BitBtnjourClick(Sender: TObject);
procedure BitBtnNowClick(Sender: TObject);
procedure SetFondcolor(x:Tcolor);
procedure SetClockcolor(x:Tcolor);
procedure RetaillerWMSize(var Message:TWMsize);message
WM_SIZE;
public
constructor create(x:Tcomponent);override;
published
property L_Heure:string read FHeure
write
FHeure;
property LaDate:string read FDate
write
FDate;
property LeJour:string read FJour
write
FJour;
property CouleurFond:Tcolor read FFondcolor
write
SetFondcolor;
property CouleurClock:Tcolor read
FClockcolor write SetClockcolor;
end;