Avant de commencer un code, il faut bien entendu avoir en tête le rendu final et ce que l'on veut exactement (un cahier des charges en gros). Tout n'est hélas pas possible et pas forcément le plus ergonomique avec Mapbasic bien qu'il rende d'énormes services.
Pour ton programme, dans le plus simple des cas, il faudra sélectionner le tronçon de réseau et lancer la petite application qui ouvrira le dialogue pour que l'opérateur choisisse la bonne information.
Explications parties par parties :
Code:
Include "mapbasic.def"
Ligne que j'inclus (et pas que moi) au début du code, cela permet de faire des raccourcis en remplaçant des paramètres par des chiffres (en gros, c'est un fichier qui a d'enregistré tout plein de paramètres)
(manuel 9.5 page 788)
Code:
Declare Sub ok_sub 'notes values when user clicks OK.
Declare Sub Main
Les déclarations : on énumère en début de code toutes les procédures (Sub) que le programme contient. ok_sub est le nom de la procédure qui va se lancer lorsque l'utilisateur cliquera sur "ok" mais c'est seulement parce qu'on va le définir dans le code, on peut très bien l'appeler Tartampion mais c'est plus simple et plus parlant.
Les commentaires en mapbasic se mettent après des quotes '
Début de la première procédure, qui sera terminée un peu plus bas par le "End Sub". Dans le cas d'une boîte de dialogue, le mieux est que la toute première procédure soit la création d'un bouton dans la barre de menu (ce que l'on ne fait pas ici car vaut mieux attendre que le programme fonctionne parfaitement).
Code:
Dim s_title As String 'the title of the map
Dim materiaux As SmallInt
En général et préférablement placée au début de la procédure, les déclarations des variables et constantes. Celles qui sont déclarées à l'intérieur d'une procédure, resteront à l'intérieur de celle-ci, déclarée sous forme de Dim (manuel page 254). Celles qui doivent être déclarée pour toutes les procédures doivent l'être à l'extérieur des procédures sous forme de Global (manuel page 323). (j'en parle ici parce que dans le cas d'un Dialogue, ça peut être utile de conserver la valeur d'une variable même lorsque la procédure est terminée).
Code:
Dialog
Title "Choix matériaux"
Control ListBox
Title "Fonte;PVC;Acier”
Into materiaux
ID 1
Control OKButton
Position 5, 35
Calling ok_sub
Control CancelButton
Position 60, 35
Le code de la boîte de dialogue (manuel page 246) qui commence par Dialog et généralement on lui donne un titre qui apparaîtra tout en haut.
Le Dialog peut contenir ensuite plein de petits modules comme des listes ou des boutons, dont l'ordre de tabulation sera défini par l'ordre dans le quel on aura placé ces divers modules (1er : 1er dans la liste des tabulations, etc.)
Les modules ou Control sont sous la forme :
Control le_nom_de_ton_controle_defini_dans_le_manuel
Position X, Y (où X et Y sont la position du contrôle dans la boîte de dialogue).
Les autres paramètres dépendent du type de contrôle et sont à voir dans le manuel. Par exemple, pour la listbox, les éléments du listbox sont déclarés après la clause Title, entre guillemets et séparés par des points virgules.
Code:
If CommandInfo(CMD_INFO_DLG_OK) Then
' ... then the user clicked OK.
Else
' ... then the user clicked Cancel.
End If
CommandInfo(CMD_INFO_DLG_OK) est vraie lorsque l'utilisateur clique sur Ok, donc si c'est faux, cela veut dire que l'utilisateur a cliqué sur Cancel (ou sur la petite croix).
Le code placé en fin de procédure est le code qui s'exécutera si la boîte de dialogue est fermée.
Ici, un If (donc condition) qui se traduit par :
Si clic sur bouton Ok est vrai Alors
'code a placer si l'utilisateur clique Ok
Et si ce n'est pas vrai Alors
'code a placer si l'utilisateur ferme la fenêtre par Cancel (ou petite croix)
Fin de condition
Dans la partie "vrai", on peut par exemple placer le code : Call Sub ok_sub ce qui appellera la procédure ok_sub si l'utilisateur clique sur ok.
Fin de procédure.
Code:
Sub ok_sub
' Here, place code to handle user clicking OK
End Sub
Procédure qui se lancera suite au clic sur "Ok", qui pour le moment est remplie avec un commentaire et donc ne fera rien du tout.
p.s. : ce n'a pas la prétention d'être un cours exhaustif ni très clair, mais j'ai tenté d'éclaircir un maximum les diverses parties du code en ajoutant des éléments qui peuvent être utiles par la suite lorsque l'on programme en mapbasic. Je conseille vivement de lire des cours sur mapbasic pour avoir des bases solides, ça prend quelques jours pour que les bases soient acquises, tout dépend des antécédents en programmation, mais le temps gagné par la suite est considérable.
Liens sociaux