Il est souvent demandé au support Mercator les noms des objets composants les écrans de Mercator. Cette question n'a pas de raison d'être dans la mesure où Visual FoxPro offre en tant que tel un système permettant d'énumérer tous les objets au sein d'un niveau hierarchique dans un formulaire.
Chaque formulaire ou sous-élement dans la hiérarchie dispose de la collection controls, qui contient l'ensemble des contrôles (objets) placés à ce niveau. La fonction stop permet ensuite simplement d'afficher le nom obtenu.
Exemples :
Pour un écran de ventes
stop(ventes.controls(1).name)
stop(ventes.controls(2).name)
stop(ventes.controls(3).name)
...
Pour l'onglet complément de la fiche articles
stop(f_stock.pageframe.complement.controls(1).name)
stop(f_stock.pageframe.complement.controls(2).name)
...
Pour énumérer l'ensemble des objets sur un niveau hiérarchique, il suffit d'exécuter un code semblable à celui-ci, qui produira un fichier 'c:\test\objets.txt' contenant le nom de tous les objets.
delete file 'c:\test\objets.txt'
local i_ctl
for i_ctl=1 to f_stock.pageframe.complement.controlCount
strtofile(f_stock.pageframe.complement.controls(m.i_ctl).name+chr(13)+chr(10),'c:\test\objets.txt',1)
endfor
stop('OK')
Dans vos modules, nous vous déconseillons d'adresser les objets via la collection
controls(). En effet, l'ordre dans la collection peut être modifié au gré des nouvelles versions de Mercator, tandis que les noms d'objets ne varieront pas.
Exemple :
- f_stock.pageframe.complement.controls(1).visible = .F. -> PAS OK !
- f_stock.pageframe.complement.num_serie.visible = .F. -> OK !
Pour connaître le nom de la fenêtre active, il suffit de paramétrer une touche de fonction dont la chaîne de commande est :
stop(wontop())
Ensuite, activer la fenêtre souhaitée et presser la touche ainsi paramétrée.
Ces fonctionnalités ne sont pas propres à Mercator, mais sont bel et bien accessibles à tout programmeur Visual Fox Pro.
Le support Mercator ne donnera plus les noms des objets demandés, étant donné qu'ils peuvent être obtenus facilement via cette méthode.