Delphi, niveau 2, page 1

Contenu : Leçon 11 : Navigation dans le code, Traquer les erreurs, Dessin d'une icône et association à une Form et à l'objet Application, construire avec des paquets d'exécution, réalisation d'un fichier d'aide en ligne, Help et Web, utilisation d'InstallShield (ou Install Shield, installateur d'applications) ; leçon 12 : Objet en Pascal ; leçon 13 : Remplir un tableau, tableau à plusieurs dimensions, délai (voir aussi le chapitre : Travaux pratiques et MPI), Timer ; leçon 14 : Consulter un site Internet, envoyer un mail ; leçon 15 : Code correspondant aux touches du clavier

Cours de Delphi, leçon 11

Contenu : Utilisation avancée de l'environnement Delphi, associer une icône à un exécutable, construire des exécutables avec des paquets ou paquetages d'exécution, réaliser et associer un fichier d'aide en ligne, employer Install Shield pour livrer des exécutables.

Utilisation avancée de l'environnement Delphi

1.1 Navigation dans le code


Avec le temps, vos projets, Project, deviennent de plus en plus vastes. Il vous faut vous déplacer dans le code. Pour cela (ces fonctionnalités nécessiteront peut-être une première compilation pour être opérationnelles) :

Pour faire apparaître une des unités d'un projet, faites Voir | Unités.

Dans une Unité, Unit, Control + Majuscule + flèche vers le haut permet de passer alternativement de la déclaration d'une procédure, à son implémentation (le code à l'intérieur de cette procédure). Flèche vers le bas convient aussi.

Pour obtenir un modèle de code : Control + J
Exemple : Entrez If, puis faites Control + J. Delphi vous propose diverses possibilités. Faites un double clic sur celle qui vous intéresse ; Delphi écrit pour vous la structure du code. Ceci se paramètre dans Outils | Options d'environnement | Expert de code.

Laissez le curseur quelques instants sur le nom d'une variable ; Delphi affiche dans une bulle d'aide la déclaration de cette variable et la ligne correspondante. Faites un clic droit sur le nom de variable, puis Chercher la déclaration ; Delphi vous y conduit. Exemple : Soit le fragment de code suivant :

implementation

var i : integer ;

procedure Essayer ;
// var i : real ;
begin
i := 3 ;
end ;

Quel est le i employé par la procedure (avant que // soit écrit dans // var i : real ;) ?
Placez les //, puis enlevez-les et comparez la bulle d'aide, ou comparez la déclaration à laquelle vous conduit Delphi, par clic droit.

Lorsque vous entrez du code, ne vous précipitez pas. Par exemple, entrez Form1. ; attendez une fraction de seconde ; Delphi vous présente tous les objets, fonctions et procédures associés à Form1.
Entrez Form1.Edit1.Color := puis frappez Control + Espace. delphi vous propose une liste d'argument valides (mais pas forcément pertinents selon ce que vous souhaitez faire).

Dans Projet | Options | Compilateur | Débogage, cochez Information de débogage. A la prochaine compilation, Delphi placera dans la gouttière des points bleus en face des lignes de code effectivement compilées dans l'exécutable. Les endroits qui ne comportent pas de point bleu seront ignorés ; par exemple si vous avez créé une procédure, mais si vous avez oublié de l'utiliser.

1.2. Traquer les erreurs


Un programme idéal serait un programme d'emploi intuitif, réalisant ce qu'on attend de lui, et surtout ne 'plantant' pas. Il paraît que les utilisateurs de Mac (sur un Personal Computer, un usage collectif serait sans doute moins serein) connaissent ce Nirvana. Delphi permet de s'en approcher sur un PC avec Windows en système d'exploitation. Oui oui !
Quelles sont les causes les plus fréquentes d'erreurs graves ?

Delphi gère l'erreur de division par 0, en affichant une boîte d'alerte. Si la division incorrecte se produit 1000 fois dans une boucle, impossible de s'en sortir. de même pour la lecture dans un Edit d'un nombre écrit de manière incorrecte.
Windows ne teste pas l'existence d'un composant, avant de l'appeler. En cas d'erreur, l'ordinateur plante et il est souvent impossible d'en reprendre le contrôle, même par Control + Alt + Suppr.

Pour tous ces cas, Delphi possède un remède miracle, l'instruction Try Except End, ou Try Finally End. Rendez-vous dans l'aide en ligne pour plus de détails.

Pour éviter les boucles dont le programme ne sort pas, personnellement je préfère employer l'instruction For i := 1 To 1000 Do, plutôt que While... C'est parfois plus lourd, mais au moins, on finit par en sortir.

Icônes


Vous avez réalisé une belle application en Delphi (pensez à télé charger notre librairie de pilotage des cartes Candibus), mais vous voudriez lui donner une allure plus professionnelle. Pour cela, vous devez :

  1. Lui associer une icône bien à vous
  2. Lui associer une aide en ligne
  3. La livrer prête à l'installation
Ce sont ces différents points que nous allons aborder maintenant.

1 Dessin d'une icône


Delphi est livré avec un outil de dessin suffisant pour ce travail, qui permet aussi de créer des ressources.
Dans Delphi, faites : Outils | Éditeur d'images | Fichier | Nouvelle | Icône | 32 x 32, 16 couleurs.
Un clic gauche sur l'un des pavés de couleur permet de dessiner avec cette couleur, en choisissant un outil, par exemple crayon (différentes épaisseurs possibles), et en maintenant le bouton gauche de la souris enfoncé.
Un clic droit sur l'un des deux pavés portant un dessin en forme de S permet de choisir la couleur du fond transparent, qui sera lui aussi dessiné à l'aide d'un outil, en maintenant enfoncé le bouton droit de la souris.
Pensez à faire : Icône | Tester, sur différentes couleurs de fond.

2 Associer cette icône à votre Form


Sauvegardez votre travail.
Fermez l'éditeur d'images.
Dans Delphi, sélectionnez la Form, par un clic gauche. Si vous n'y parvenez pas, parce qu'elle est couverte de composants, retrouvez la en haut, dans la liste déroulante de l'inspecteur d'objet. Dans cet inspecteur, au niveau de Icon, faites un double clic sur [vide], puis Charger | Choix dans la boîte de dialogue | OK.

3 Associer cette icône à votre Application


Il vous faudra aussi associer cette icône à l'objet Application, pour que cette même icône, réduite, apparaisse lorsque la fenêtre de votre application est réduite. Pour cela, faites : Projet | Options | Application | Charger icône.

Retour en haut de cette page 

4 Construire avec des paquets d'exécution


Ceci permet de réduire considérablement la taille des fichiers exécutables ; en contrepartie, il vous faudra fournir les paquets (paquetages serait un terme plus élégant) Delphi correspondants. Ce n'est donc intéressant que si vous créez et livrez plusieurs logiciels.

Voici un exemple numérique :
Nous vous proposons sur ce site une suite logicielle contenant pour l'instant 12 exécutables. Ceux-ci utilisent tous une base commune de ressources permettant la gestion des fenêtres (TForm), des graphiques (TChart)...
Soit cette base est incluse dans chaque logiciel ; chacun est totalement complet et indépendant, mais de taille importante ; soit la base est livrée à part, une seule fois.
 
Nom de l'exécutable Taille de l'exécutable complet Taille de l'exécutable, sans paquetages
NavPhy 560 640 octets 41 984 octets
AcquisC 677 376 123 392
AcSurBas 940 032 328 192

etc.
Pour 7 exécutables, la taille totale passe de 5 899 776 à 1 743 872 octets. Le gain est de 4 010 464 octets, mais il faut livrer en plus les fichiers VCL40.bpl et TEE40.bpl de 1 884 136 et 382 456 octets. Le gain est alors de 1 889 312 octets. Ce gain va s'améliorer à mesure que la suite de logiciels s'étoffera.

Pour 12 exécutables, le gain total est de 3,4 mégaoctets ; Ils tiennent une fois compressés par Install Shield facilement sur 2 disquettes, et il est possible d'en ajouter encore, car maintenant, chaque nouveau logiciel est très compact.

Cela nécessite par contre une planification préalable, car chaque logiciel devra être compilé en lui retirant les mêmes paquetages. Il ne faudra pas oublier de livrer ceux-ci (ils font partie des fichiers installé avec Delphi, dans C \ Windows \ system). Compte tenu de la taille des paquetages, il faut étudier le moyen de n'avoir à les livrer qu'une seule fois.

Cela est plus simple qu'il n'y paraît, car Install Shield détecte automatiquement les paquetages qui doivent être ajoutés à la suite logicielle et propose de les inclure dans les fichiers compressés.
 

Retour en haut de cette page 

5 Réaliser un fichier d'aide en ligne


Deux techniques s'offrent à vous :

1 réaliser un fichier .hlp Windows, à l'aide d'un logiciel spécialisé (vous pouvez le réaliser avec un traitement de textes basique, puis le compiler à l'aide d'un outil livré avec Delphi, mais bonjour la galère), et le lier à votre exécutable,

2 ou un fichier HTML, mais dans ce cas, vous devrez associer un explorateur Intranet à votre logiciel. Cette deuxième méthode conduit cependant à un emploi plus lourd et plus lent de l'aide. Pour créer le navigateur Intranet, cherchez dans les exemples livrés avec Delphi, à Borland \ Delphi3 (ou 4) \ Demos \ CoolStuf \ ou bien utilisez les outils Internet disponibles dans la palette d'outils, à l'onglet Internet.
Pour la première méthode, il existe un logiciel américain, HelpScribble, tout en anglais, dont l'adresse figure à la page de bonnes adresses, accessible par la Home Page.

Mais nous avons préféré un logiciel français, certes un peu "rigide" par moment, mais qui permet beaucoup de choses amusantes, bandeaux défilants ... Il s'agit d'Help et Web de Escot - SEP Christophe 6, rue Saunière 31000 Toulouse. (Voir aussi nos pages de bonnes adresses).
puce Ce logiciel est hyper simple d'emploi, mais n'aime pas certaines fantaisies. Une fois que vous aurez réalisé un fichier d'aide, vous ne pourrez pas changer son adresse sur votre disque dur (ou du moins c'est difficile). Lorsque vous nommez des cibles, donnez à chacune un nom différent (il n'aime pas les changements à posteriori). Si vous joignez une image, choisissez un fichier bitmap (de toute façon, Help et Web compressera votre fichier d'aide), car les autres formats, jpeg ... ne sont pas tous standards et peuvent provoquer des plantages. A part cela, il marche bien.

Dans Help et Web, faites Fichier | Nouveau projet | Création d'un projet vierge | Répertoire | Sélectionner ... Nom du projet ... OK.
Vous êtes en présence de deux zones de travail redimensionnables, un explorateur montrant l'arborescence de votre aide et une zone d'aperçu de la page sur laquelle vous travaillez. Vérifiez que vous êtes en mode édition (la fenêtre de droite est quadrillée).
Dans la zone explorateur de la structure du document, ajoutez vos chapitres (icône en forme de livre) et les pages de ces chapitres (icône en forme de feuille de papier). Sélectionnez une page, et passez dans la fenêtre de droite pour éditer cette page. Vous pouvez entrer le texte au clavier (mode aperçu), ou mieux par copier coller depuis Word (en mode source, en collant après <<FIN ZONE FIXE>>. Soyez patients, la gestion de l'espacement des caractères n'est pas parfaite et il faut parfois être délicat pour placer le curseur ; les flèches de défilement peuvent se révéler utiles.
Une fois vos pages remplies, il vous faut placer les cibles ou signets. Cliquez à côté d'un texte (mode aperçu), faites clic droit et dans le menu qui se déroule, choisissez Poser un signet (cible intra-rubrique ... ). Donnez un nom au signet (pas deux signets portant le même nom ! ) | OK un drapeau apparaît.

Établissez maintenant vos liens hyper texte. Pour cela, sélectionnez un mot, ou un groupe de mots. Si la cible est dans la même page (exemple, retour en haut de page), allez dans la fenêtre de gauche, déroulez la liste Signets et cliquez sur celui que vous avez choisi. Si la cible est sur une autre page, faites clic droit | dans le menu qui se déroule choisissez Lien étendu (signet, autre projet ... ) | Dans l'explorateur qui s'ouvre sélectionnez le chapitre et la page (en ce cas, la cible sera le haut de la page) ou encore déroulez la liste déroulante et choisissez une cible dans la page | Validez.

Enregistrez votre projet.

Compilez le par Compiler | Compiler le projet | Onglet HLP | Compiler. Vous obtenez dans le sous dossier Help32, à l'adresse que vous aviez choisie, un fichier d'aide 32 bits pour Windows 95. Vous pouvez aussi obtenir des fichiers pour Windows 3.1 ou 98, ou pour un site Web. Dans Help32 figure aussi HelpID.pas, Unit pascal que vous pouvez associer à votre Project, si vous voulez que l'aide ouvre directement certaines pages particulières. En fait, chaque numéro de page est associé à un nom de variable pascal, et si vous changez l'ordre des pages, cela n'affecte pas ces noms de variables, que vous associez à l'appui de la touche F1.

Retour en haut de cette page 

6 Emploi d'InstallShield (pour Delphi 4)


Sur le CD de Delphi, le programme InstallShield est proposé. Installez le sur votre disque dur, il est très utile.

Supposons que vous, Monsieur Lemeilleur, créateur de la startup (ou startdown ?) Lemeilleur, ayez rédigé les exécutables Toto1.exe et  Toto2.exe (Toto1 est le principal, celui qu'il faudra lancer par un raccourci sur le bureau, employant des fonctionnalités de Toto2 qui lui n'aura pas de raccourci) destinés à la mesure de la température d'une tortue (transdisciplinarité oblige) et que vous souhaitiez que par défaut, ils s'installent sur le disque dur de la personne intéressée en C :\ Program Files \ Lemeilleur \ Physique \ Toto1.exe (et Toto2.exe).
Toto1.exe est livré avec une aide en ligne nommée AideToto1.hlp qui doit être rangée en : C :\ Program Files \ Lemeilleur \ Physique \ Aides \ AideToto1.exe.
C'est à dire que le dossier Physique doit contenir les exécutables Toto1.exe (avec raccourci sur le bureau), Toto2.exe et un sous dossier Aides contenant AideToto1.hlp.

A l'aide de l'explorateur Windows, créez un répertoire où sera rangé votre travail avec InstallShield, par exemple C :\ Mesdoc \ LogicielTortue
Dans InstallShield faites : Fichiers | Nouveau | Nouveau projet.
Nom du Projet : C'est le nom qui s'affichera dans Démarrer | Programmes | Nom du Projet | Raccourcis. Donc ici, Toto, ou quelque chose de plus descriptif comme TortueT.
Chemin du projet : Adresse de sauvegarde de l'exécutable (Setup.exe) compressé et des autres fichiers créés par InstallShield, sur VOTRE disque dur (il faut bien que vous retrouviez votre travail ! ), donc ici C :\ Mesdoc \ LogicielTortue.

Nouveau sous répertoire : Inutile, car l'explorateur est plus pratique, laissez vide.
Ne pas inclure d'installation personnalisée, trop complexe à gérer.
Créer.
InstallShield crée un fichier nommé TortueT.iwz, rangé dans C :\ Mesdoc \ LogicielTortue, contenant vos informations, plus un sous dossier TortueT, où seront rangés d'ici peu tous les fichiers que vous devrez diffuser.

Dans une fenêtre à fond jaune, apparaît une liste de tâches à accomplir. Vous pouvez suivre un ordre quelconque et revenir en arrière.

Commencez par Définir la conception visuelle | Infos Application | Cliquer. Dans Répertoire de destination par défaut, effacez TortueT, et inscrivez Physique. Remarquez que ce ne sera pas très parlant pour l'utilisateur, et qu'il vaudrait peut-être mieux nommer ce sous dossier TortueT, comme vous le propose InstallShield, ce qui conduirait pour les fichiers sur le disque dur de l'utilisateur au chemin suivant : C :\ Program Files \ Lemeilleur \ TortueT \ ...
Nom de l'application : Lemeilleur.
Version : Remplacez 1.0 par le numéro qui vous convient (cela sera utilisé par InstallShield pour les mises à jour ultérieures).
En automatique, InstallShield vous indique que l'exécutable de votre application sera dans <Program Files Dir> \ Le meilleur \ Physique. <Program Files Dir> signifie donc pour lui : C :\ Program Files.
Onglet Fenêtre principale | Titre principal | Écrire votre publicité : "TortueT, le logiciel de la société Lemeilleur, capable de mesurer la température d'une tortue, même quand elle court" (par exemple).
Onglet Fonctionnalités | Désinstalleur automatique.
Faites OK. Vous retournez à la fenêtre jaune.

Dans Sélectionner les objets InstallShield pour Delphi | Options générales | onglet Général, vous pouvez associer à vos deux exécutables des paquets Delphi (pour programmation avancée uniquement, sinon, ignorez cette tâche). OK.
Les paquets consistent en gros en ceci : si Toto1.exe et Toto2.exe utilisent des composants visuels, ou une même librairie, les ressources nécessaires sont stockées dans les deux, d'où un gaspillage. Vous pouvez les compiler les deux sans ces ressources et adjoindre celles-ci une seule fois à l'ensemble.

Dans Spécifier les composants et fichiers | Groupes et fichiers | faire Nouveau groupe | dans Nom de groupe, faire Aide en ligne (c'est un nom uniquement descriptif) | dans Répertoire de destination | faire <installdir> \ Aides, ce qui créera le sous dossier Aides pour le fichier AideToto1.hlp. | OK
Remarquez que vous sont proposées des options avancées de mise à jour, permettant que les nouveaux dossiers n'écrasent les anciens que sous certaines conditions (date, numéro de version ... ).

Vous revoilà dans Groupes et fichiers. Cliquez sur Aide en ligne, dans l'arborescence du petit explorateur, et faites Insérer des fichiers. Ajoutez AideToto1.hlp par double clic dans la boîte de dialogue qui s'ouvre.
De même dans Fichiers programme, insérer Toto1.exe et Toto2.exe. faites OK. Notez que les composants servent uniquement à une installation personnalisée.
Par Clic droit | Propriétés, vous pouvez vérifier que tout va bien. par exemple pour le dossier Aides, le répertoire de destination des groupes est : <Installdir> \ Aides, ce qui signifie : C :\ Program Files \ Lemeilleur \ Physique \ Aides.

Dans Spécifier les dossiers et icônes, faites Options générales | Général | Commande à exécuter | Clic sur ...
Choisir le fichier exécutable dont le raccourci doit figurer dans : Démarrer | Programmes | Lemeilleur. Ici, Toto1.exe | OK.
Puis cliquer sur Ajouter icône | OK.

dans Générateur de disques | Taille disque, choisissez entre disquettes 1,40 Mo, ou CD-ROM | Générer.
Installshield compresse vos fichiers de façon efficace et range le tout dans C :\ Program Files \ Lemeilleur \ Physique \ TortueT. | Fermer.

Suite à un bug, le test ne marche pas directement ; il faut dans le menu déroulant faire Liste de contrôle | 8 : Tester l'installation.

Enfin vous disposez de la possibilité d'enregistrer directement les disquettes à diffuser, par Menu déroulant | Liste de contrôle | 9 : Créer un support de distribution | Copier toutes les images disque, ou bien en changeant de fenêtre à fond jaune, pour passer à la page 3, par un clic en bas, à droite, et en faisant Créer un support de distribution | Copier sur disquettes.

Dans les deux cas, vous obtenez un dossier compressé, contenant plusieurs fichiers, diffusable par disquettes, ou CD-Rom (lancement de l'installation par double clic sur Setup.exe).

pucePar contre, pour une diffusion par Internet, il faudra ensuite regrouper tous les fichiers en un seul exécutable, à l'aide de Winzip (Il faut bien que tout le monde vive ! ).

Retour en haut de cette page 
 

Cours de Delphi, leçon 12

Contenu : Objet en Pascal (voir aussi )

La traduction en français des termes employés par Delphi pour nommer ses objets risquant d'être ambiguë, nous avons gardé les mots anglais.

Pour employer efficacement les concepts évoqués dans cette page, vous devez posséder un minimum de maîtrise de Delphi. Vous ne devez pas entrer tout le code dans une Unit Delphi, mais seulement certaines parties. De plus certaines procédures associées à une action sur des composants, par exemple un clic gauche sur un bouton

procedure TForm1.NouvPartieClick(Sender: TObject); begin end ;

doivent être ouvertes par Delphi (ici par double clic sur le bouton dont le Name est NouvPartie). Vous devez seulement copier le code entre begin et end;.

1 Notion d'objet, en Delphi

La notion d'objet en programmation, c'est un peu comme le vin dans l'alimentation : il en est d'excellents, mais les tord boyaux ne sont pas rares. Delphi et Mathematica, dans leurs domaines respectifs, programmation pour l'un, mathématiques pour l'autre, proposent de l'excellente programmation orientée objet.

Disons, pour Delphi, que cela revient à passer d'une programmation très linéaire, à un début de programmation parallèle.

Pour Mathematica, la possibilité de créer des ensembles, pourvus d'opérations, d'objets mathématiques, dotées de propriétés permet de se livrer à une véritable recherche à la fois fondamentale et expérimentale.

Vous pouvez aussi consulter dans ce même chapitre, une page proposant une technique différente, employant des tableaux d'objets.

2 Exemple assez simple

Pour illustrer aussi simplement que possible cette notion d'objet en Delphi, qui utilise le langage Pascal, proposons nous de résoudre un petit problème : Dans un logiciel destiné au jeu du pendu, la première et la dernière lettre du mot recherché sont affichées. A mesure que des lettres correctes sont proposées, elles s'affichent en bonne place.

Nous pourrions tout écrire à la main, mais il est plus commode, beaucoup plus rapide, et plus esthétique d'utiliser des objets Delphi tout faits, appelés composants. De plus, utiliser des composants, limite les risques d'erreur de programmation, car chacun a été longuement testé par Borland.

Nous allons employer des Edit.

Seulement voilà : les mots n'ont pas tous la même longueur ; il nous faut un nombre d'Edit variables. Nous pourrions en placer un peu trop et rendre invisibles les excédentaires.

Chaque objet Edit a des propriétés, dont l'une se nomme Visible.

Edit1.Visible:=False masque l'Edit1.

On appelle propriété d'un objet informatique une entité constituée d'un champ et d'une action. La propriété Visible a un champ qui contient la valeur de la propriété ; ici, il s'agit d'un Boolean qui peut être True ou False. L' action est ce qui se passe lorsque la valeur du champ est modifiée ; ici, l'Edit apparaît, ou disparaît.

Retour en haut de cette page 

3 Déclaration de classe

Les Edit que nous allons employer ont une propriété commune, leur hauteur Edit.Height et leur largeur Edit.Width. Nous allons donc déclarer une classe TEditSpecial dérivée de la classe de composants Borland TEdit :

Afin de vous permettre de savoir où entrer votre code, nous avons laissé du code que Delphi crée en automatique. Ne le retapez pas. Ouvrez un nouveau Project et faites Sauver Sous. Nommez l'Unit1 UnitPenduPrincipale. Créez une deuxième Unit par Fichier | Nouvelle fiche, faites sauver Sous et nommez la UnitCreerEdit. Placez dans la Form associée à cette Unit un Edit.

Puis entrez du code, pour que cette Unit ressemble à ceci :

unit UnitCreerEdit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Edit1: TEdit;
private
{Déclarations privées}
public
{Déclarations publiques}
end;
Type
TEditSpecial=Class(TEdit)
public
Constructor Create(Owner : TComponent); Override;
end;
var
Form2: TForm2;
implementation
{$R *.DFM}
Constructor TEditSpecial.Create(Owner : TComponent);
begin
Inherited Create(Owner);
Width := 27; Height := 27 ;
end;
end.

puceATTENTION ! La déclaration de compilation {$R *.DFM} que Delphi écrit automatiquement ne doit figurer qu'une seule fois dans votre Unit. Lorsque vous allez entrer le code donné dans cette page, le plus sur est de procéder par Copier Coller.
Vous pouvez, pour commencer, coller tout le texte, après le End. final de votre Unit, puis transférer en bonne place des fragments de code. Même placé après le End. final, la directive de compilation provoque une erreur nommée Duplicating ressources.

Nous voyons que notre Classe TEditSpeciale dérive de la classe TEdit ; elle hérite donc de tous ses champs, méthodes, propriétés, événements.

La méthode Create est un constructeur. Elle sert à Delphi, lors de la création dynamique, d'un Edit, ici. Nous décidons de la surcharger, pour imposer à nos futurs objets EditSpecial une hauteur et une largeur commune. C'est la signification de la directive Override, ajoutée à la redéclaration de la méthode.

Dans la partie Implementation, nous redéfinissons la méthode Create. Mais nous souhaitons garder les autres propriétés de la méthode Create des TEdit. D'où la déclaration :

Inherited Create(Owner); qui permet à notre nouvelle méthode Create d'hériter de toutes les propriétés de celle dont elle dérive.

Seuls Width := 27; Height := 27 ; seront modifiés.

Retour en haut de cette page 

4 Déclaration d'objets

Il nous faudra, maintenant créer des objets EditSpecial, appelés instances de la classe TEditSpecial. Ce sont des variables de cette classe spéciale, déclarées comme les autres variables :

Exemple : Var afficheLettre1 : TEditSpecial ;

et plus loin, il faudra procéder à la création par : afficheLettre1 := TEditSpecial.Create(Application) ;

Mais cette méthode est encore trop rigide, car tous les EditSpecial devront être déclarés par avance.

Voici comment faire, pour créer dynamiquement un objet, en lui donnant un Name de façon dynamique :

La encore, entrez le code avec discernement. par exemple, procedure NouvPartieClick(Sender: TObject); est créé automatiquement par Delphi, lorsque vous double cliquez sur le bouton de Name NouvPartie.

Retour en haut de cette page 

5 Création dynamique d'objets

unit UnitPenduPrincipale;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
NouvPartie: TButton;
procedure NouvPartieClick(Sender: TObject);
private
{Déclarations privées}
public
{Déclarations publiques}
end;
var
Form1: TForm1;

implementation
{$R *.DFM}
Uses
UnitCreerEdit ;

procedure TForm1.NouvPartieClick(Sender: TObject);
Var i : Integer ;
begin
{On détruit les anciens Edit d'affichage du texte}
For i := 1 To Length(MotRecherche) Do
(Form1.FindComponent('afficheLettre' + IntToStr(i)) as TEditSpecial).Free ;
{remarquez comment on transforme une String en nom d'un objet. La méthode Free a l'avantage de ne pas déclencher une exception si l'objet n'existe pas, contrairement à Destroy}
{on crée maintenant les EditSpecial en quantité suffisante. Attention, cette méthode est très lente. Les Name sont créés dynamiquement par : Name := 'afficheLettre' + IntToStr(i) ;
Notez que Create(Self) ne marche que si la procédure est créée par Delphi lui-même, ici, par double clic sur un Button}
motRecherche := 'Essayerais' ;
{On crée les Edits d'affichage du mot à rechercher}
For i := 1 To Length(motRecherche) Do Begin
With UnitCreerEdit.TEditSpecial.Create(Self) Do // Self->Application
begin {ne marche que dans un clic bouton}
Parent := Self ;
Left:= Trunc(L - 35*Length(MotRecherche)/2 + 35 * i) ;
Top:= Trunc(0.75 * H) ;
ReadOnly := True ;
Name := 'afficheLettre' + IntToStr(i) ;
Visible := True ;
If ((i=1) Or (i= Length(MotRecherche))) Then Text:= MotRecherche[i]
Else Text := '' ;
end; End ;
end;
end.

Retour en haut de cette page 

6 Autre exemple

Celui ci est tiré de l'aide en ligne de Delphi ; il permet d'explorer par une boucle, tous les contrôles d'une Form, et de modifier éventuellement l'une de leurs propriétés.

Cet exemple utilise l'événement OnActiveControlChange pour détecter si la focalisation est modifiée sur la fiche. Le cas échéant, le contrôle actif est dessiné en rouge. Tous les autres contrôles sont de la couleur de la fenêtre donnée dans le panneau de contrôle.

type

TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ déclarations privées }
public
procedure ColorControl(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ControlerCouleur(Sender: TObject);
var
I : Integer;
begin
for I:= 0 to ControlCount -1 do

begin
if Controls[I] is TWinControl then
begin
if (Controls[I] as TWinControl).Focused then
Controls[I].Color := clRed
else
Controls[I].Color := clWindow;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.OnActiveControlChange := Controler Couleur ;
end;

Retour en haut de cette page 
 

Cours de Delphi, leçon 13

Contenu : Remplir un tableau, tableau à plusieurs dimensions, délai (voir aussi page 1 dans le chapitre : Nos propositions de travaux pratiques et IESP), Timer

Page créée le 25 / 12 / 99
Astuces, en Delphi

1 comment remplir un tableau

Si vous en avez assez d'écrire Mot[1]:='Incorrigiblement' ; Mot[2]:='...
Var
//Mot : Array[0..1] Of String = ('Incorrigiblement', 'Cotylédon'); {pour les tests}
Mot : Array[0..31] Of String = ('Travaux', 'Chevaux', 'Arsenal', 'Chahuts', 'Actions', 'Courage', 'Dangereux', 'Inutile', 'Attentifs', 'Suspendues', 'Actionnaires', 'Historique', 'Élégante', 'Attentives', 'Inactiver', 'Destinataires', 'Anophèle', 'Anonyme', 'Anoures', 'Anormalement', 'Antécédents', 'Blizzard', 'Bleuâtre', 'Buvette', 'Chauve-souris', 'Chélicères', 'Coexistence', 'Collerettes', 'Corroborer', 'Corrompus', 'Incorrigiblement', 'Cotylédon');

2 tableau à plusieurs dimensions

DessinPendu : Array[1..9] Of Array[1..4] Of Real =((0.2,0.9,0.2,0.1), (0.2,0.1,0.5,0.1), (0.5,0.1,0.5,0.3), (997,0.3,0.5,0.4), (0.5,0.4,0.5,0.6), (0.5,0.43,0.4,0.58), (0.5,0.43,0.6,0.58), (0.5,0.6,0.4,0.8), (0.5,0.6,0.6,0.8));

3 Délai

Employez la procédure Sleep(durée en millisecondes), où la durée est un Integer.
Vous pouvez aussi employer un composant Timer.
puceBien que Intervall du Timer puisse être égal à 1 milliseconde, Windows est incapable de gérer des intervalles plus petits que environ 50 millisecondes (pas mal avec un processeur à 200 MHz ! ). De plus, vous n'êtes pas à l'abri d'une interruption encore plus longue, ni d'irrégularités déplaisantes.
Ceci n'est pas très mirifique ; vous pouvez voir plus loin d'autres propositions de temporisation plus rapides.

Retour en haut de cette page 

Cours de Delphi, leçon 14

Contenu : Consulter un site Internet, envoyer un mail

Pour ce faire, nous employons les API Windows.

puceEn temps normal, il vaut mieux employer des fonctions Delphi encapsulant les API. Car cela permet au code source d'être indépendant du système d'exploitation (Win 3.1, 95, Linux ... ). Les deux fonctions qui suivent se trouvent aussi dans la librairie Delphi, nommée pour l'instant Candibus, avec des noms plus simples et un seul paramètre (Voir le chapitre IESP) :

AccederAUnSiteInternet(adresseSite : String)

EcrireAuxAuteurs (adresseMail : String).

1 Consulter un site Internet

Ou lancer une U R L.

uses WinTypes, ShellAPI;
begin
ShellExecute( 0, Nil, PChar('http://perso.wanadoo.fr/jussiaux.software/'),Nil, Nil, SW_NORMAL );
end;

Qui peut avec la librairie additionnelle s'écrire :

Candibus.AccederAUnSiteInternet('http://perso.wanadoo.fr/jussiaux.software/')

2 Envoyer un Mail

uses WinTypes, ShellAPI;
begin
ShellExecute( 0, Nil, PChar('mailto:Jean.Michel.Jussiaux@wanadoo.fr'),Nil, Nil, SW_NORMAL );
end;

Les deux adresses sont de type String.

Ceci peut, avec la librairie additionnelle que nous vous proposons, s'écrire :

Candibus.EcrireAuxAuteurs ('Jean.Michel.Jussiaux@wanadoo.fr').

En donnant un nom plus simple à ces deux fonctions, vous pouvez vous aussi les inclure dans une bibliothèque personnelle de Delphi, et permettre ainsi à vos élèves d’IESP de rédiger en quelques secondes un logiciel capable d’accéder à Internet. C'est ce que nous avons fait dans la bibliothèque Candibus pour Delphi 4, que nous vous proposons en télé chargement., dans le chapitre Logiciels, ou dans TP, IESP, page 1.

Retour en haut de cette page 

Cours de Delphi, leçon 15

Contenu : Code correspondant aux touches du clavier

1 Projet

Vous souhaitez que votre programme Delphi réagisse lors de l'appui sur certaine touche du clavier. Sélectionnez le composant correspondant, mettez sa propriété KeyPreview (accessible dans l'inspecteur d'objets) à True. Puis dans le même inspecteur d'objets, choisissez Propriétés, et double cliquez dans la case vide, à côté de la propriété qui vous intéresse. Voici deux exemples. Le premier, associé à Form1, provoque l'affichage d'un texte de contrôle dans un Edit :

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
IF (Key=VK_ESCAPE )  Then Form1.Edit1.Text := 'ça marche !' ;
end;

Le deuxième affiche une boîte de message, contenant la lettre qui a été pressée

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
MessageDlg(Key + '   a été appuyée', mtInformation, [mbOK], 0)
end;

Remarquez que la variable Key n'appartient pas à la même classe dans les deux cas (Word, ou Char).

2 Codes correspondant aux touches


Ces codes sont du type Word. Ils n'ont pas tous été testés. Les codes souris ne marchent pas dans les procédures précédentes.
 
VK_LBUTTON ($01) bouton Gauche Souris VK_RBUTTON ($02) bouton Droite Souris
VK_NUMPAD3 ($63) Touche pavé numérique 3 VK_NUMPAD4 ($64) Touche pavé numérique 4
VK_NUMPAD5 ($65) Touche pavé numérique 5 VK_NUMPAD6 ($66) Touche pavé numérique 6
VK_INSERT ($2D) Insérer VK_DELETE ($2E) Supprimer
VK_HELP ($2F) Aide VK_NUMPAD0 ($60) Touche pavé numérique 0
VK_NUMPAD1 ($61) Touche pavé numérique 1 VK_NUMPAD2 ($62) Touche pavé numérique 2
VK_HOME ($24) Début VK_LEFT ($25) Flèche gauche
VK_UP ($26) Flèche haut VK_RIGHT ($27) Flèche droite
VK_DOWN ($28) Flèche bas VK_SNAPSHOT ($2C) Impression d'écran
VK_MBUTTON ($04) bouton Central Souris VK_TAB ($09) Tabulation
VK_BACK ($08) Retour Arrière VK_RETURN ($0D) Entrée
VK_SHIFT ($10) Touche de contrôle MAJ VK_CONTROL ($11) Touche de contrôle CTRL
VK_MENU ($12) Touche de contrôle ALT VK_PAUSE ($13) Pause
VK_ESCAPE ($1B)  Echappement VK_SPACE ($20) Barre d'espace
VK_PRIOR ($21) Page Haut VK_NEXT ($22) Page Bas
VK_CANCEL ($03) Arrêt Exec. programme  VK_END ($23) Fin
 VK_F19 ($82) Touches de fonction F19 VK_F18 ($81) Touches de fonction F18
VK_NUMPAD8 ($68) Touche pavé numérique 8 VK_NUMPAD7 ($67) Touche pavé numérique 7
VK_MULTIPLY ($6A) Touche pavé numérique * VK_NUMPAD9 ($69) Touche pavé numérique 9
VK_SEPARATOR ($6C) Touche pavé numérique Entrée VK_ADD ($6B) Touche pavé numérique +
VK_DECIMAL ($6E) Touche pavé numérique . VK_SUBTRACT ($6D) Touche pavé numérique -
VK_F1 ($70) Touches de fonction F1 VK_DIVIDE ($6F) Touche pavé numérique /
VK_F3 ($72) Touches de fonction F3 VK_F2 ($71) Touches de fonction F2
VK_F5 ($74) Touches de fonction F5 VK_F4 ($73) Touches de fonction F4
VK_F7 ($76) Touches de fonction F7 VK_F6 ($75) Touches de fonction F6
VK_F9 ($78) Touches de fonction F9 VK_F8 ($77) Touches de fonction F8
VK_F11 ($7A) Touches de fonction F11  VK_F10 ($79) Touches de fonction F10
VK_F13 ($7C) Touches de fonction F13 VK_F12 ($7B)  Touches de fonction F12
VK_F15 ($7E) Touches de fonction F15 VK_F14 ($7D) Touches de fonction F14
VK_F17 ($80) Touches de fonction F17 VK_F16 ($7F) Touches de fonction F16
VK_F21 ($84) Touches de fonction F21 VK_F20 ($83) Touches de fonction F20
VK_F23 ($86) Touches de fonction F23 VK_F22 ($85) Touches de fonction F22
VK_NUMLOCK ($90) Verrouillage pavé numérique VK_F24 ($87) Touches de fonction F24
VK_CAPITAL Verrouillage majuscules VK_SCROLL ($91) Verrouillage scrolling

Retour en haut de cette page