Annexe 1
Exemples sur des composants de base



Plan du chapitre 3 Annexe 1:
 
    3.1. Test des Tedit-TradioButton-TRadioGroupButton-TButton
    3.2. Test des TMainMenu
    3.3. Test des Tlistbox
    3.4. Test des Images, TBevel, TCheckList, TradioGroup, Tlistbox, Tlabel
    3.5. Test des TMemo, TOpenDialog,  TSaveDialog, TmainMenu; TMenuItem;  TFontDialog; TColorDialog, TPanel, TSpeedButton.
    3.6. Test des Ttimer
    3.7. Test des TStringGrid, TTimer, TtrackBar
    3.8. Test des TabControl
    3.9. Test travail avec deux Units, de Show et de ShowModal
    3.10. Test  de Application.ProcessMessage
    3.11. Test  d'une application du système: le presse-papier
    3.12. Test  d'une application utilisant la procédure ProcessMessages(bis)
    3.13. Les Exceptions
    3.14. Les Frames
    3.15. Création dynamique de classe

Comparaisons sur des composants de base

Nous allons dans cette partie reprendre des projets réalisés avec Delphi et les migrer sur Kylix. Nous n'avons effectué que les modification minimales pour que les applications fonctionnent. C'est pour cette raison que vous pourrez noter sur les copies d'écran qui suivent quelques problèmes d'affichage de police sous Kylix.
 
 

3-1. Test des Tedit-TradioButton-TRadioGroupButton-TButton

Cet exercice a pour objet de tester les fonctionalité des composants cités ci-dessus et de certaines de leurs méthode.

L'interface de cet exercice ce présente ainsi:

Code en Delphi

Code Kylix
 

Un click sur un bouton radio change la couleur de l'edit,
Un click sur le bouton "interdire les changements" désactive les RadioButtons.

Le passage de Delphi5 à Kylix se réalise sans aucun problème.
 
 

3-2. Test des TMainMenu

Nous réalisons le même exerciceque le précédent, avec l'interface suivante:
 

Un click sur l'un des choix de couleur change la couleur de l'Edit.
Cet exercice fonctionne très bien avec Kylix.
 
 

3-3. Test des Tlisbox:

Cet exemple à pour objectif un premier test des ListBox:

Code Delphi

Code Kylix

L'interface en Delphi:


 
 

L'interface en Kylix:

Les noms des artistes ainsi que le disque correspondant sont saisis dans une ListBox. Le nom et le titre sont séparés par une *. Lorsque l'utilisateur saisi le nom d'un artiste dans l'Edit "Quel Nom", et qu'il clique sur "Chercher", les titrede l'artiste correspondant s'inscrivent dans la seconde ListBox, et la quantité de disque de cet artiste dans la seconde Edit.
 
 
 

3-4. Test des Images, TBevel, TCheckList, TradioGroup, Tlistbox, Tlabel

L'interface se présente ainsi:

Code Delphi:
 

Delphi

L'interface en Kylix:


 

Cet exercice  pour objectif: de calculer le poids idéal de la personne en fonction de sa taille et de son sexe. L'utilisateur coche un radio bouton (homme ou femme), puis saisi sa taille. S'il coche la checkbox "Liste", le résultat est affiché du calcul est affiché dans la listbox en plus de l'edit. L'affichage peut être effectué avec une grande ou une petite police de caractère (RadioGroup).Le passage à Kylix se fait sans problème.
 
 

3-5. Test des TMemo, TOpenDialog,  TSaveDialog, TmainMenu; TMenuItem;  TFontDialog; TColorDialog, TPanel, TSpeedButton.
 

L'interface en Delphi:

Description

Le premier TmenuItem comprend :
- Nouveau (vider le TMemo),
- Ouvrir (Ouvrir un TOpenDialog),
- Enregistrer sous (Ouvrir un TSaveDialog),
- Quitter,

Le second TmenuItem comprend :
- Couper,
- Copier,
- Coller,

Le troisième TmenuItem comprend:
- Polices (Ouvrir un TfontDialog),
- Couleurs (Ouvrir un TcolorDialog),
- Standard (fixe une police par défaut),
- FontDialog1: TFontDialog;
- ColorDialog1: TFontDialog;

Un PanelAffiche qui affiche des boutons de racourci vers les  principales fonctions de l'application.

L'application passe sans problème sous kylix.

Vous trouverez ci-dessous les différentes boîtes de dialogues pouvant être utilisées sous Kylix. Les même possibilités sont laissées au développeur, et l'utilisateur d'une application développée sous Kylix  ne sera pas troublée par la différence d'ergonomie avec Windows: l'interface est identique!

Code  Delphi (Unit Principale)

Code Kylix (Unit Principale)

L'interface en Kylix:


 
 

La boite de Dialogue TOpenDialog sous Kylix:


 

La boite de Dialogue TColorDialog sous Kylix:


 
 

La boite de dialogue TFontDialog sous Kylix:


 
 
 

3-6. Test des Ttimer

Code Delphi

Code Kylix

Interface Delphi (à gauche) et Kylix (à droite):
 

Cet exercice utilise un timer pour changer la couleur de l'Edit et donner l'impression qu'il clignote. Cet exemple fonctionne sans problème avec Kylix
 
 

3-7. Test des TStringGrid, TTimer, TtrackBar

Cet exercice a pour objectif de réaliser et de visualiser un tri  par sélection
 

Interface sous Delphi :


 

Principe de fonctionnement:
- Les cellules de la StringGrid sont remplies aléatoirement par des nombres entiers (bouton Initialiser),
- Le bouton Pas à Pas lance le tri et l'animation, à chaque pression sur le bouton pas à pas, l'instruction du tri en Pascal de base affiché dans la Listbosx est surlignée,
- A chaque étape, la position de i et j est affichée dans deux StringGrid  (i en rouge et j en bleu),
- Le bouton Tri Selection effectue le tri de manière automatique aves les animations,
- Le bouton Tri Immédiat affiche directement le résultat, sans animation,
- La TrackBar permet de faire varier la vitesse d'exécution.
- Cette application utilise deux Timer.

  Le passage de cette application de Delphi à Kylix nous a posé quelques soucis:

- Kylix ne peut fabriquer trois fichiers .dcu car les droits certains droits d'accès au répertoire /usr/local/kylix/source/vcl sont réservés au root. C'est dans ce répertoire que les Uses utilisées pour la compilation sont stockées.

- A la compilation, Kylix ne peut pas créer MaskUtils.dcu, Qmasks.dcu et Qgrid.dcu. On peut alors copié les fichiers .pas correspondant situé dans le repertoire cité ci-dessus dans le repertoire de l'application en cours, et ajouter les Units à l'application en utilisant le bouton "Ajouter Unit".

- On peut également se mettre en root, et modifier les droits d'accès correspondants, en tapant par exemple en mode console la commande suivante: chmod o+xw /usr/local/kylix/source/vcl. "o" donne les droits à tous les utilisateurs, "x" donne les droits d'exécution   et "w" de modification.

  Après ces opération, l'application fonctionne sans problème.

Code Kylix

Interface sous Kylix:


 
 
 

3-8. Test des TabControl:

Interface:

Code Delphi:
 

Code Kylix

Interface en Delphi et sous Kylix:
 

Nous construisons une Form avec un TabControl et 5 onglets. Le Tab control comprend un memo. La première ligne affichée par ce memo change en fonction de l'onglet choisi par l'utilisateur.

Pour cet exercice, nous avons rencontré des difficultés:
  - En Delphi, les Tabs, propriété définissant les onglets, sont de type TString, ont les crée grâce à une boîte d'édition dans l'inspecteur d'objets.
- En kylix les Tabs sont de type TTabs, on les crée dans une boîte de dialogue  spécifique, qui présente chaque Tab comme un objet disposant ses méthodes et evenement dans l'inspecteur d'objet (vide en l'occurence !). Le développement ne devait probablement pas être terminé sur cette version Béta.

Lorsque l'on recupère le fichier Windows, Kylix refuse d'ouvrir, puisqu'il ne reconnait pas les Tstrings pour des Tabs.  Nous avons essayé d'initialiser le programme au démarrage avec une procédure du type

TabControl.tab[i].Caption:='ALPHA' mais ce la ne marche pas.

La copie d'écran ci-dessus à donc été réécrite sous kylix.
 
 

3-9. Test travail avec deux Units, de Show et de ShowModal:

Le code des fiches est sur deux Units distinctes.

Code Kylix (Unit1)

Code Kylix (Unit2)
 

L'interface Delphi:


 

L'interface Kylix:
 


 

L'objectif de cet exercice est d'ouvrir une seconde Fiche à partir d'une première. Un click sur le Main Menu ouvre la seconde Fiche en showmodal, c'est à dire qu'il est impossible de retourner sur la première Fiche sans fermer la seconde, qui reste seule active. Nous n'avons pas rencontré de problème de passage sous Kylix.

La procédure form2.show permet d'afficher la Form2, l'utilisateur garde alors la main sur la Form1. La Procèdure Form2.ShowModal affiche également la Form2, mais l'utilisateur doit cliquer sur le bouton "Close Fiche2" pour reprendre la main sur la fiche1.

Sur la Form2, un click sur "Close Fiche-1" entraine la fermeture totale de l'application.
 
 

3-10. Test  de Application.ProcessMessage

Interface:

Code Delphi:

Delphi

Objectif: l'utilisateur fixe un temps en miliseconde dans l'Edit, l'application effectue des boucles comptabilisées dans un Label (en vers) jusqu'à ce que le delai soit écoulé. Cette application n'utilise pas de Timer, mais la procédure ProcessMessage.

Cette procédure liée au système fonctionne parfaitement sous kylix.

La procedureProcessMessages interrompt l'exécution d'une application pour que Windows ou Linux puisse traiter la file d'attente des messages.

Cependant, comme nous le détaillerons plus loin, ces deux procédures n'ont pas même origine sous Linux ou Windows, ce qui est logique, puisque ProcessMessages fait appel au système Windows.

Sous Windows, la procedure ProcessMessages est définie ainsi:
Procedure TApplication.ProcessMessages;
(----------)
begin
  while ProcessMessage (Msg) do {loop}
end;
(---------)
function TApplication.ProcessMessages(var Msg:TMsg):Boolean;
var Handled:Boolean;
begin
  Result:=false;
  if  PeekMessage(MS,0,0,0,PM_REMOVE) then
  begin
    result=true;
    if Msg.message<>WM_QUIT then
(----------)
 

Sous Linux (voir la partie reservée à QT):

Procedure TApplication.ProcessMessages;
begin
  Qapplication_processEvents(handle)    //Appel à QT
  if GetCurrentThreadID=MainThreadID then CheckSyncronize //Appel à QT
 
 
On peut constater que Delphi fait appel au Message Système de Windows (du type WM_QUIT ) alors que Kylix utilise la bibliothèque de QT, réalisée en C++. C'est cette bibliothèque qui orientera le choix des commandes à exécuter en fonction du système d'exploitation utilisé. Nous n'avons rencontré aucun problème pour réaliser cet exercice, si ce n'est pour comprendre comment les développeurs de Kylix avaient fait pour résoudre le problème.

 
 

3-11. Test  d'une application du système: le presse-papier:

Cette application a pour objectif de tester l'utilisation du presse papier:

Code Delphi:

Code Kylix

Delphi

L'interface du programme est composée d'une form et d'un Memo. A l'éxécution, le contenu du presse papier est édité dans le mémo (procédure PasteFromClipBoard).

Cette application fonctionne sans problème en exécutant le programme sous kylix.
En revanche, l'exécutable Kylix seul ne fonctionne pas.
 
 

3-12. Test  d'une application utilisant la procédure ProcessMessages(bis):

Cette application à pour objectif de faire compter de 1 à 3000 dans la Listbox en utilisant Application.ProcessMessages, les boutons donnent la possibilité d'interrompre le comptage, de le reprendre à partir de l'endroit ou il s'est arrêté. Si l'utilisateur clique sur "fermer",  l'application s'arrête, il faudra cliquer sur lancer pour la redémarrer. Cette application passe sans problème de Delphi à Kylix.

Code Delphi

Code Kylix

Interface Kylix:
 
Kylix
 
 
 
 
 
 
 
 

 

Interface Delphi:
 

 
 
 
 
 
 
 
 

 


 

3-13. Les Exceptions

L'unité SysUtils présente sous Delphi et qui permet de gérer les exceptions existe aussi sous Kylix, ce qui laisse présager une gestion des exceptions identiques.
Le premier exemple déclenche une exception appelée EzroDivide et le deuxième exemple testé consiste à ouvrir un fichier texte et à provoquer des erreurs en effaçant le fichier avant qu'il ne soit refermé.
La syntaxe utilisée en Delphi, avec les mots clés try...except ou try...finally ou le redéclenchement par raise, ne pose pas de problème et les noms des classes d'exception sont les mêmes. La compilation et l'exécution de cet exemple génère le même résultat,
comme l'obligation de passer au pas à pas en mode création.

Premier exemple:Déclencher

Kylix :

Delphi :

 

Deuxieme exemple:ExceptFichier
Kylix:
 

Delphi :

 

 
 
 
 

3-14. Les Frames

Pour commencer à tester la personnalisation de la palette une frame issue de Delphi a été utilisée.
Elle consiste à déplacer deux labels sur une fiche en mode trace ou en pas à pas à partir d'un click sur bouton,
à interrompre ou reprendre cette activité, régulée un timer et des flags.Des images au format bitmap signalent
les modifications effectuées.
Hormis les uses,$R* .dfm et $R*.res rien n'a été changé dans le code et tout fonctionne à l'identique.
Le format bitmap est reconnu. Seul souci, il faut reprendre l'organisation de la fiche car le format et la disposition
des composants est modifiée en passant de Delphi à Kylix.
L'intégration de ce cadre à la palette se fait de la même façon, par un click droit sur celle-ci.

Kylix: UFrame

  




3-15. Création dynamique de classe

L'héritage de classe est possible en choisissant, comme dans Delphi, Nouveau Composant du menu Composant dans la barre d'outils.
Deux exemples créent deux classes dérivées des TEdit, l'un permet de convertir le texte qu'il contient en majuscule ou en minuscule et réciproquement. L'autre, permet de placer un edit sur une fiche en fonction de l'endroit cliqué.

Premier exemple: UFEditMajMin

Kylix:

Delphi:

Deuxième exemple: HeritageTEdit

Kylix:

Delphi: