IV. Notre premier programme OWL : MINIMUM.PAS▲
Le temps est venu de créer notre premier vrai programme Windows basé sur OWL.
Comme déjà dit dans les préliminaires, OWL (Object Windows Library) est une bibliothèque d'objets génériques d'interface avec Windows. Chacun des mots soulignés a son importance et appelle des explications :
- objets : pour travailler avec OWL, nous devons utiliser la POO (Programmation Orientée Objet). Si vous n'êtes pas rompu(e) à la POO, vous risquez de ne pas comprendre les explications données et de ne pas pouvoir progresser par la suite.
Je vous conseille de vous plonger dans cet excellent tutoriel : Introduction à la programmation orientée objet par Eric Sigoillot.
A l'exception des index de méthodes virtuelles, il n'y a en fait rien de nouveau par rapport à la programmation objet sous Turbo Pascal.
 - génériques : les objets de la bibliothèque OWL ont un fonctionnement très basique et tout le travail de programmation consistera à les adapter à vos besoins et à les enrichir par le biais de l'héritage.
 - d'interface avec Windows : les objets OWL contiennent essentiellement des routines qui réagissent aux flux de messages Windows. Tels quels, ils fournissent le travail nécessaire au fonctionnement de base d'un programme; vous pouvez modifier ou enrichir ce fonctionnement en implémentant vos propres routines.
Voici le code du plus petit programme fonctionnel possible, qui servira d'ossature pour tous les programmes que nous réaliserons par la suite :
Program
MINIMUM;
(* Le programme Windows minimum !
Réalisé par Alcatîz pour Developpez.com - 18-06-2006 *)
Uses
OWindows;
Type
tProgramme = Object
(tApplication)
Procedure
INITMAINWINDOW; virtual
;
end
;
Procedure
tProgramme.INITMAINWINDOW;
(* Allocation de la fenêtre principale du programme *)
Begin
MainWindow := New(pWindow,INIT(Nil
,'Le programme minimum'
));
End
;
Var
Programme : tProgramme;
Begin
Programme.INIT('Minimum'
);
Programme.RUN;
Programme.DONE;
End
.
Compilez et exécutez ce programme : vous obtenez une fenêtre Windows standard, que vous pouvez déplacer, agrandir, réduire, maximiser, iconiser et fermer :
Détaillons à présent chacun des éléments du programme.
IV-A. L'unité OWindows▲
L'unité OWindows contient la déclaration des objets essentiels de la bibliothèque OWL, dont l'objet tApplication et les objets fenêtres (que nous rencontrerons très bientôt). Sa déclaration est absolument indispensable.
IV-B. L'objet tApplication▲
L'objet tApplication constitue la colonne vertébrale de tout programme OWL. C'est lui qui assure l'intégration du programme dans l'environnement multitâche Windows.
Tous les programmes OWL doivent créer un objet descendant de tApplication et, au minimum, redéfinir la méthode InitMainWindow pour initialiser la fenêtre principale de l'application
Dans le présent programme, nous avons appelé tProgramme le type d'objet descendant et nous avons déclaré comme variable globale une instance de cet objet appelée Programme (oui, c'est très original).
C'est généralement la seule instance d'objet qui soit déclarée comme variable globale, toutes les autres étant allouées dynamiquement dans le tas global de Windows.
Vous verrez tout au long du tutoriel qu'en fait, pour la presque totalité des programmes, le bloc principal fera trois lignes :
Begin
Programme.INIT('Nom du programme'
);
Programme.RUN;
Programme.DONE;
End
.
Le constructeur INIT reçoit le nom du programme et se charge de l'initialisation de l'application.
La méthode RUN met en route le processus de traitement du flux de messages Windows.
Enfin, le destructeur DONE effectue les nettoyages nécessaires pour fermer proprement l'application.
IV-C. La méthode InitMainWindow▲
Grâce au principe de l'héritage, notre objet tProgramme hérite de tous les champs et de toutes les méthodes de l'objet tApplication.
Une de ces méthodes, InitMainWindow, assigne au champ MainWindow de l'objet tApplication l'adresse de la fenêtre principale de l'application.
C'est en redéfinissant cette méthode que, tout d'abord, nous choisissons un type de fenêtre principale (vous verrez qu'il y en a plusieurs) et qu'ensuite nous initialisons cette fenêtre.
Observez bien comment la fenêtre principale est allouée :
MainWindow := New(pWindow,INIT(Nil
,'Le programme minimum'
));
Cette syntaxe de la fonction New pour allouer dynamiquement un objet permet d'exécuter le constructeur immédiatement après l'allocation de l'objet
On peut de la même façon exécuter le destructeur d'un objet avec Dispose :
Dispose(Instance_d_objet,DONE);
IV-D. L'objet fenêtre tWindow▲
En allouant un pointeur pWindow, nous choisissons comme type de fenêtre principale une fenêtre toute simple, non spécialisée : tWindow.
Ce type d'objet est lui-même, dans la bibliothèque OWL, le parent d'autres types de fenêtres comme les fenêtres MDI (multi-documents) et de toute une série de contrôles commes les boutons, les cases à cocher, les boîtes listes, les champs d'édition, etc.
Vous verrez que, dès le programme suivant, nous utiliserons des objets descendants de tWindow comme fenêtres principales.
Voici la déclaration du constructeur INIT de l'objet tWindow :
Constructor
INIT (aParent : pWindowsObject; aTitle : pChar);
Le premier paramètre, aParent, est l'adresse de la fenêtre parent de notre fenêtre et le second paramètre, aTitle, le titre qui sera affiché dans la barre de titre.
Notre fenêtre principale n'ayant pas de parent, nous passons la valeur Nil au constructeur. Si nous n'avions voulu aucun titre, nous aurions également transmis Nil comme second paramètre.
IV-E. En résumé▲
Pour créer un programme OWL :
- On utilise au minimum l'unité OWindows
- On déclare comme variable globale une instance d'un objet descendant de tApplication
- On redéfinit la méthode InitMainWindow dans laquelle on alloue la fenêtre principale
- Dans le programme principal, on exécute successivement les méthodes Init, Run et Done du descendant de tApplication