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:
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:
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:
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!
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
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.
Interface sous Kylix:
3-8. Test des TabControl:
Interface:
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.
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:
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:
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.
Interface 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: