Comme promis aux rencontres AtoutFox, voice ma version de ISX (baptisée modestement ISXPlus, bon, il faut bien donner un nom). C'est censé augmenter la productivité, et chez moi ca marche tès très bien.
Cette amélioration à l’intellisense native de VFP a une longue histoire, depuis ses débuts (par Christpf Wollenhaupt d’après Francis, mais les commentaires dans le PRG mentionnent « This program has been written in 1999-2002 by Christof Lange ». [qq minutes après] : Merci Francis : Christof Lange et Christof Wollenhaupt sont une seule et même personne : voir commentaire + bas). Voici un petit historique.
11/2004 : Eddy Maue http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000104 Ces modifications sont contenues dans ma version
03/2006 : Luc http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000300 Ces modifications sont contenues dans ma version
05/2008 : Eddy Maue http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000563 Ces modifications NE SONT PAS REPRISES dans ma version
03/2010 : Christof Wollenhaupt http://www.foxpert.com/downloads.htm Je n’ai absolument pas connaissance de cette version à ce jour (merci Francis de me l’avoir signalée), et on peut imaginer qu’elle est aussi évoluée que la mienne ?
On peut citer aussi VariSense 2.0, écrit par Derek J. Kalweit (dkalweit@sensiblesoftware.com; http://www.sensiblesoftware.com/VariSense.aspx), dont certains codes ont été incorporés dans ISXPlus.
Les fonctionnalités :
Ce qu’on voit
- La frappe « m. (point)» propose la liste des variables définies en Local, Global, Parameter, lParameter (mais pas les paramètres définis dans une déclaration du type « MaFonction(MonParamètre) »)
- La frappe « This. (point)» propose la liste des membres de This, définies dans la classe ou héritées des classes parentes, qu’elles soient PRG ou VCX.
- La Frappe « This.
(point)» amène la liste des membres de la propriété si c’est un objet (par exemple défini avec « Protected iPropBidon1HiddenAsMyForm AS myformtest OF "testeisx.vcx" »).
- La Frappe « Ctrl + UpArrow » amène la liste des #Define applicables au programme courant : ceux qui y sont définis directement, ou ceux qui sont inclus dans les fichiers .h #included.
- La Frappe « . (point) » amène la liste des champs de l’alias .
- La Frappe « Ctrl + Espace » après le début d’une saisie amène la liste de :
- Si le mot commence par « m. » : liste des variables
- Si le mot commence par « This. » : liste des membres ou des membres du membre, etc.
- Si le mot avant le point est le nom d’un alias ouvert, la liste des champs de cet alias
- S’il n’y a pas de point, la liste des variables, plus des #Define, plus des tables
- La Frappe « Alt+ UpArrow » à la fin d’une saisie (même vide) amène la liste des fonctions définies dans le projet actif, plus toutes les fonctions et instructions VFP (on peut optionnellement enlever l’affichage de ces instructions VFP).
- La Frappe « Alt+ DnArrow » à la fin d’une saisie d’un nom de fonction existant dans le projet amène le msgbox ci-dessous, qui permet de choisir entre atteindre la définition de la fonction, et insérer dans le PRG les commentaires correspondant aux paramètres de la fonction..
La fonction une fois commentée
- La Frappe « Ctrl+F12 » duplique le texte et le met en commentaire avec les initiales du programmeur et la date (la première fois, elle demande les initiales).
- La Frappe « Alt+S » monte en Set Procedure le PRG actif.
- La Frappe « Ctrl+Q » Active ou désactive ISX.
Ce qu’on ne voit pas
Une grosse différence est que ISX stocke ses données sous forme de table, ce qui est important pour la vitesse dans le cas des affichages de listes de procédures/fonctions/membres/#Define : ils n’ont pas besoin d’être lus à chaque lancement d’ISX : si le fichier n’a pas été modifié depuis la dernière lecture par ISX, les informations sont prises directement dans la table.
ISX est déjà la compilation du travail de plein de personnes. Chez moi j’y ai fait travailler des stagiaires et c’était sans doutes une erreur : merci de ne pas trop regarder la qualité du code…
Attention
La version actuelle pose un Set Deleted On à l’instanciation de ISX (Do ISXPlus.PRG ou Ctrl+Q), et remet la config initiale lors de la destruction (Clear all, _Screen.oIXS = Null ou Ctrl+Q). Ca ne me gèene pas puisque je suis toujours en set deleted on, mais ce n’est pas le cas de tout le monde …
ISX ne sait lire les membres des classes définies dans ces VCX que par AMembers après avoir instancié la classe par CreateObject : ca peut être gênant pour des classes qui ne peuvent pas s’instancier « A vide », et qui affichent un message d’alerte dans ce cas. On peut désactiver cette fonctionnalité par la propriété « lIgnoreVCXClasses » de la classe cMyISX.
Installation et personnalisation
Installer : Il suffit de placer le contenu du Zip dans un répertoire (NB : les images vont normalement dans un sous-répertoire "Graphics" mais je ne sais pas comment faire pour inclure l'info dans WinZip sans que toute l'architecture soit sauvegardée depuis la racine).
Lancer : "Do ISXPlus.PRG". On peut aussi mettre cette commande dans le config.fpw.
Interrompre : "Ctrl+Q
Relancer : Ctrl+Q
Il vaut mieux ne pas toucher à la classe de base cISX pour faire ses personnalisations. Le mieux est d’utiliser la classe héritière cMyISX (dans MyISX.PRG) :
- Pour changer les options
- Pour surcharger la méthode Install, qui permet de définir les combinaisons de touches associées aux fonctions
- Pour définir de nouvelles fonctionnalités
- …
Complément
En code VFP, je donne aussi qq PRG à insérer dans le gestionnaire d'intellisense VFP (Outils/Gestionnaire d'intellisense/Custom), qui correspond à la table _FoxCode montrée par Ken Levy lors des rencontres de Montpellier. |
Un grand merci pour avoir présenté ton amélioration de ISX aux conférences et d'avoir posté cet article : effectivement cela permet un très grand gain de productivité !
Cordialement
Francis