Créer
très simplement un assistant (builder) pour
vos Contrôles

Vous avez probablement utilisé les Assistants (Builder) dans le générateur de formulaire de
VFP sur des contrôles de VFP, et vous avez trouvé cela bien
pratique…

Pourquoi pas ne pas créer des assistants pour vos
contrôles ?

Les codes sources en VFP des assistants de VFP sont
disponibles dans un sous répertoire VFP : HOME()+"\Tools\xsource\VFPSource\builders\"

En creusant le sujet on s’aperçoit d’une
certaine complexité à mettre en œuvre un assistant de
contrôle …

Mais il existe un « framework »
pour les « builders » de Visual FoxPro !

Cette charpente permet de créer très
simplement un assistant ; celui-ci se trouve dans le répertoire :
HOME()+"\Tools\xsource\VFPSource\Wizards\debuilder\"

Et cela gère tout ce que l’on peut attendre
pour créer rapidement et simplement un assistant :

Appel
de l’assistant…

Ouverture
et fermeture de la fenêtre,

Affichage
dynamique des modifications des propriétés sur le
contrôle

Validation
des modifications (Bouton OK)

Abandon
des modifications (Bouton Annuler)

…

Un exemple basique pas à pas mieux qu’un
long discours ?

Supposons que nous voudrions faire un assistant pour un
contrôle de type onglets (PageFrame), celui-ci
posant la question du nombre d’onglets (Pages) et de la position des
onglets. (Pas très intéressant mais un simple cas
d’école)

Etape 1 : Réalisation du « builder » au moyen de ce « framework »

Lancement de VFP9

Mon répertoire de test est
« D:\VFPmyBuilder »

SET DEFAULT TO d:\vfpmybuilder

SET PATH TO d:\vfpmybuilder additive

Création d’une
classe nommée « AssistantOnglet »,
stockée dans le fichier VCX « MesAssistants »
et basée sur le « framework »
de builders de VFP9

MODIFY CLASS AssistantOnglet OF MesAssistants as BuilderForm FROM HOME()+"\Tools\xsource\VFPSource\Wizards\debuilder\BuilderControls"

L’écran suivant doit
apparaître :

Je rajoute alors :

un « label »,
caption = « Nombre d'onglets : »,
Autosize

un « spinner », que je nomme name=
Nombre,

un
« OptionGroup », que je
nomme name = Position, avec 4 options ButtonCount=4 les captions des options : « en
Haut, en Bas, à Gauche, à Droite » le tout Autosize

Mon assistant ressemble donc à quelque chose comme
cela :

Un peu de code maintenant …

Sur l’événement « InteractiveChange » du spinner,

Je
veux tester une valeur minimum de 2 (nombre de pages dans la PageFrame) et un maximum de 20 (par exemple)

Je
veux fixer ensuite le PageCount du PageFrame dans le designer avec la valeur de mon spinner

this.Value=MAX(2, this.Value)

this.Value=MIN(this.Value, 20)

with Thisform.oSource

.PageCount=this.Value

endwith

DODEFAULT()

Sur l’événement « InteractiveChange » de l’OptionGroup

Je veux fixer le TabOrientation du PageFrame dans
le designer avec la valeur de mon OptionGroup (-1 car
le TabOrientation commence à 0 et la valeur de
l’OptionGroup à 1)

Thisform.oSource.TabOrientation = This.Value-1

DODEFAULT()

Enfin pour être complet, je voudrais que mon assistant
démarre en récupérant les valeurs actuelles des
propriétés du PageFrame en cours
d’édition, donc dans le Init du
formulaire je rajoute l’initialisation suivante :

lparameters toSource,   tcSource,   tuOther

DODEFAULT( toSource, tcSource, tuOther)

ThisForm.Nombre.Value = Thisform.oSource.PageCount

Thisform.Position.Value = Thisform.oSource.TabOrientation+1

Et voilà mon assistant terminé…

Etape 2 : Réalisation de ma classe et le lier
l’assistant

Création d’une classe nommée
« MonPageFrame» stockée dans
le fichier VCX « MesControles» et
basée sur le « pageframe »
de VFP

MODIFY CLASS MonPageFrame OF MesControles as PageFrame

Pour ajouter le lien à l’assistant,

il suffit de rajouter une nouvelle
propriété publique nommée « Builder »
et ayant comme valeur « MesAssistants,AssistantOnglet » (VCX, la classe)

Etape 3 : Test de l’assistant….

Création d’un formulaire de test

MODIFY FORM test

Sélectionner la librairie « MesControles »

Sélectionner le
contrôle « MonPageframe »
et posez le sur l’écran de test

Puis….
Clic droit « Builder »
(Assistant Contrôle)

Magique non ?

J’ai vu cela dans une session de Doug Henning (Stonefield Software)
lors du Visual Foxpro Devcon de Prague 2006.

Cordialement

Francis Faure

Mes fichiers de démo ci-joint.