Utilisation avancée de MapInfo sans MapBasic Introduction FMB : la fenêtre MapBasic Jacques Paris professeur honoraire, principal Paris PC Consult Enr. [email protected] version initiale 12/12/2002 – Jacques Paris document en format A4 Table des matières 1 - La fenêtre MapBasic 1 1 - 1 La fonction affichage de la FMB 1 - 2 La FMB comme poste de commande. 1 - 3 Le support existant pour l'utilisation de la FMB 2 - MapBasic adapté à la FMB 2-1 2-2 2-3 2-4 2-5 2 3 4 5 Quelques interdits Arguments des fonctions : une contrainte générale Variables Les commandes " Run " Les commentaires 3 - Pourquoi et comment se servir de la FMB 5 5 5 6 7 8 3 -1 Les incontournables 8 3 -1 - 1 Extraction de coordonnées 3 -1 - 2 Modification d'un objet 3 - 2 Utilisations immédiates 3 - 3 Utilisations différées 3-3-1 3-3-2 3-3-3 3-3-4 3-3-5 8 9 enregistrement conservation réutilisation Document WOR TXT ou WOR 4 - Quelques exemples de mise en œuvre 4-1 4-2 4-3 4-4 4-5 8 8 9 9 10 10 11 12 Construction d'une procédure simple Un document WOR succinct Un document WOR pour lancement d'un " splash screen " Transformation d'objets et contrôle de boucle Normalisation de cartes thématiques 5 - Optimiser son milieu de travail 18 5 - 1 Meilleure fonctionnalité de la FMB 5 - 2 Meilleure exploitation des WOR 6 – Perpectives 12 12 13 13 15 18 20 22 Annexe A : Restrictions sur les commandes MB dans la FMB 23 Annexe B : Codes des Commandes de Menu et leurs équivalents dans la FMB 25 1 - La fenêtre MapBasic La fenêtre MapBasic est présente dans MapInfo depuis la version 3 (la première version Windows). Elle est ouverte par un item du menu « Options » ou par l’icône ‘clé plate’ de la barre « Outils »; ces deux éléments opèrent en bascule et peuvent être utilisés pour fermer la FMB quand elle est ouverte. Il ne peut y avoir qu’une FMB ouverte en même temps, tout comme il n’y a qu’une fenêtre message, légende, ... (souvent nommées fenêtres système en opposition aux cartes, tableaux, ... qui sont des fenêtres document)) mais cette fenêtre peut servir pour entrer des données ce qui n’est pas le cas des fenêtres système. La FMB fut documentée pour la première fois dans MI Pro MapFAQ’s (1996 après la sortie de la version 4) , et est toujours décrite dans le chapitre 24 « Using the MapBasic Window » dans le MI User’s Guide, chapitre 23 dans le Guide de l’Usager de MI. Dans la version anglaise, le chapitre 24 a été réduit de 50 pages (version 5.0, mode d’emploi et un bon nombre de fonctions détaillées et directement utilisables) à 18 (version 6.5, mode d’emploi seulement), l’idée étant que le « MapBasic Reference » en format PDF est inclus maintenant dans le CD d’installation de MI, sans aucune aide cependant pour convertir les constantes littérales en numériques. La version française n’a pas suivi une réduction aussi dramatique, mais elle ne contient que 5 des 25 fonctions avec arguments. 1 1 – 1 La fonction affichage de la FMB La mission initiale de la FMB est d’afficher les équivalents en MapBasic des commandes passées par le menu, mais avec certaines limitations et variations. Ainsi, pas toutes les commandes sont « transcrites » Menu FMB Window | Nouvelle fenêtre de données Browse * From mont_rue Menu FMB Browse | Choisir champs (Rien) Certaines sont traduites différemment Menu FMB Table | Mise à jour de colonne (existante à partir d’une autre table) Add Column "q_dr_96" (V0238 )From q_su_96 Set To sum(V0238) Where COL1 = COL3 Menu FMB File | Ouvrir document WOR Run Application "C:\Program Files\MapInfo\Professional\startup.WOR" Certaines sont décomposées en plusieurs énoncés Menu Ouvrir une table FMB Open Table "C:\Q2002\donnees\mont_rue.TAB" Interactive Map From mont_rue Menu FMB Compacter une table Create Table "~MAP0061" (nom Char(20),type Char(2), direction Char(2),adr_deb_g Integer,adr_fin_g Integer,adr_deb_d Integer,adr_fin_d Integer, adr_impute Char(2),classe Char(3),arc_id Char(8), source Char(1),longueur_m Float) file "C:\ Q2002\donnees\ ~MAP0061.TMP" TYPE NATIVE Version 300 Create Map For ~MAP0061 CoordSys Earth Projection 1, 66 Set Table ~MAP0061 FastEdit On Undo Off Insert Into ~MAP0061 (nom, type, direction, adr_deb_g, adr_fin_g, adr_deb_d, adr_fin_d, adr_impute, classe, arc_id, source, longueur_m) Select nom, type, direction, adr_deb_g, adr_fin_g, adr_deb_d, adr_fin_d, adr_impute, classe, arc_id, source, longueur_m From ~MAP0060 Commit Table ~MAP0061 Set Table ~MAP0061 FastEdit Off Undo On Drop index mont_rue (nom) Create Index On mont_rue (nom) 2 Connaître quelles sont les commandes qui sont ainsi affichées va permettre de savoir celles qui pourront être réutilisées par la suite. Une fois la FMB ouverte, l’affichage se fait de façon continue, même si la fenêtre est miniaturisée. La seule façon de l’interrompre est de fermer la fenêtre, ce qui la vide par la même occasion de tout son contenu. 1 – 2 La FMB comme poste de commande. Cette fenêtre est l’équivalent d’un très simple éditeur de texte combiné à un lanceur de commandes. Les fonctions d’édition sont des plus simples : copier, coller (de la FMB ou d’une autre source), effacer, déplacer. Les flèches permettent de se déplacer dans l’espace défini par le texte présent. L’ajout d’une nouvelle ligne se fait par <CONTRL>+<ENTRER> Le lanceur de commande est la touche <ENTRER> qui peut lancer une seule ligne ou plusieurs. Position du curseur (une ligne à la fois) n’importe où dans la ligne et <entrer> Sur-lignage d’un groupe de lignes et <entrer> Si une commande est écrite sur plusieurs lignes, il faut toutes les sélectionner. Si une partie seulement d’une ligne est sous-lignée, seulement la partie sous-lignée sera lancée, ce qui généralement va résulter en une erreur. Si l’on veut répéter le lancement de la même commande, ou du même groupe de lignes, l’action à prendre dépend de la nature des commandes. Si la FMB perd le focus suite aux commandes, il faut le lui redonner en cliquant dans la barre de titre; la sélection n’est pas alors perdue et on tape <ENTRER>; l’exemple type est une commande insertion dans une table. Si le focus n’est pas perdu, il suffit de retaper <ENTER>; c’est la cas par exemple avec un print (qui affiche le résultat dans la fenêtre message). Les commandes de menu principal ou de menu flottant (clic du bouton droit alors que sur la fenêtre) sont assez limitées. 3 1 – 3 Le support existant pour l’utilisation de la FMB En plus du chapitre du « Guide de l’utilisateur de MapInfo » mentionné pour les versions anglaise et française, il existe plusieurs fichiers MI et des documents complémentaires. Le fichier d’aide de MapBasic qui est maintenant disponible comme fichier PDF sur le disque d’installation de MapInfo à compter de la v6.50, auparavant venait avec MapBasic uniquement Des fichiers auxiliaires de MI comme MapInfoW.MNU et de MapBasic (fichiers de définition comme mapbasic.def, menu.def et icons.def) Des listes adhoc de conversion/équivalence comme - les annexes du « Mini-Guide to the MBW » les documents du « projet ABC » (Application Backwards Compatibility) Le Mini-Guide peut être commandé sur le site www.paris-pc-gis.com section « PPCC, products and services » et le projet ABC est sur le même site à www.paris-pcgis.com/abc/abc_main_fr.htm 4 2 - MapBasic adapté à la FMB Il faut d’abord bien comprendre que les commandes soumises par la FMB sont simplement interprétées sans compilation, ce qui implique l’usage de scripts linéaires (exécutés séquentiellement une ligne à la fois, l’une après l’autre). Ce sont exactement les mêmes contraintes que pour les documents WOR générés directement par MI et ce qui peut être dit au sujet d’un « milieu » est valable en général pour l’autre. Ceci nous entraîne à parler plutôt des commandes interdites que des permises. 2 – 1 Quelques interdits Cette première contrainte élimine tous les éléments basés sur la notion de branchement dans la séquence des commandes (DO, IF, WHILE, FOR, GOTO ...) ou le concept de routines ou fonctions définies par l’utilisateur ou devant être définies (cas des fonctions API Windows). D’autres éléments sont interdits par d’autres règles particulières pour des raisons parfois moins évidentes. Par exemple. « INCLURE xxx » implique d’ajouter au point indiqué des commandes contenues dans un autre fichier au moment de la compilation. De même les boîtes de « DIALOG » ne sont remplies de façon dynamique qu’à la compilation. Finalement, il ne peut y avoir aucune manipulation de fichiers, en opposition aux tables. On ne peut pas par exemple ouvrir un fichier et y écrire des résultats. L’annexe A contient tous ces « interdits » et les raisons qui y sont attachées 2 – 2 Arguments des fonctions : une contrainte générale Les arguments de fonctions qui en comportent (un peu plus de deux douzaines) doivent être passés comme des codes numériques car le fichier « mapbasic.def » n’est pas accessible de la fenêtre. Ces diverses valeurs seront précisées dans chacune des fonctions au fur et à mesure de leur présentation. 2 – 3 Variables Les variables sont définies comme dans MapBasic avec un énoncé DIM. Cependant dans la FMB, il ne peut y avoir qu’une seule variable par DIM Les variables dimensionnées (vecteurs) ne sont pas permises. Tout variable reste définie pour la durée de la session de MapInfo. Afin d’éviter leur accumulation ou une mauvaise réutilisation, il faudrait lancer dès que l’utilisation d’une variable est terminée un énoncé réservé à la FMB : UNDIM. L’exemple suivant vient d’un WOR généré par MI concerne la dimension de la dernière fenêtre créée. Dim WorkspaceMaximizedWindow As Integer WorkspaceMaximizedWindow = Frontwindow() Set Window WorkspaceMaximizedWindow Max Undim WorkspaceMaximizedWindow Ces variables FMB sont valables dans l’environnement MM/MI c’est-à-dire qu’elles ne sont pas contraintes par le cadre de la FMB. Elles peuvent être donc « passées » dans d’autres utilisations comme dans certains dialogues. Il s’agit de sélectionner les régions limitrophes d’une région donnée excluant celle-ci. Si la carte voulue n’est pas ouverte, il faut l’ouvrir. 5 Open Table "C:\donnees\q_dr_96.TAB" Interactive Map From q_dr_96 On crée une variable objet dans laquelle on va placer l’objet sélectionné dim o as object o=selection.obj La formule “ obj intersects o and areaoverlap(obj,o)=0 “ peut être entrée dans la boîte « expression » du dialogue SQL Select. Si de plus on dirige la sélection sur une table nommée Sel, l’exécution de la commande menu se traduit dans la fenêtre MB par select * from q_dr_96 where obj intersects o and areaoverlap(obj,o)=0 into sel . 2 – 4 Les commandes « Run » Il y a plusieurs formes de la commande RUN que nous allons passer en revue. RUN APPLICATION “<applicationr>.MBX “ permet de lancer des applications MBX. Peut faire partie d’un script ou d’un WOR. RUN APPLICATION “<fichier>.WOR“ permet de lancer des documents classiques mais surtout des « scripts » qui seraient exécutables dans la fenêtre MB. RUN COMMAND <cmd> exécute la commande représentée par la chaîne de caractères <cmd>. Cette chaîne peut être spécifiée directement et doit alors être entre ““ ou comme une variable caractère. Run Command est une solution parfaite quand il s’agit de passer un élément d’un énoncé par une variable alors que MI s’attend à trouver le nom d’une table ou d’une colonne. Exemple : on veut faire un traitement standard à plusieurs tables dont on ne connaît pas le nom a priori. Il faut d’abord sélectionner la table puis l’ouvrir pour créer une nouvelle table avec le nom de l’originale prolongé de « _res ».. Dim a_tab as string Dim coord as string a_tab=fileopendlg(“”,””,”TAB”,”Choisir votre table”) open table a_tab as base coord=tableinfo(base,29) offtab=base+"_res" create table offtab (id char(4)) run command "create map for "+offtab+" "+coord RUN MENU COMMAND xxx lance des opérations similaires à celles du menu en utilisant un code numérique (défini dans MENU.DEF) mais pas tous les codes définis sont opérationnels. Il est bien entendu que seuls ceux pour des commandes ayant une trace dans la FMB 6 peuvent être considérés dans une première analyse, mais ce n’est pas forcément toujours le cas, surtout quand la trace est composée de plusieurs commandes. Il y a donc dans certains cas des possibilités d’équivalences. L’annexe B donne une idée de ce à quoi on peut s’attendre. RUN PROGRAM “<programme_spécification> “ lance le programme spécifié avec les arguments de la ligne de commande voulus (fichier à ouvrir, redirection des résultats, ... ) 2 –5 Les commentaires En MapBasic, le texte entre une apostrophe et la fin de la ligne est ignoré, ce qui permet d’insérer des commentaires dans le texte. Dans la FMB, la présence d’une apostrophe va interrompre le traitement de l’information à cet endroit, alors que dans un document WOR ce n’est pas le cas, les commentaires n’ayant aucun effet sur la poursuite des opérations. Il faudra se souvenir de cette différence de comportement quand il s’agira de construire des scripts pour réutilisation. 7 3 – Pourquoi et comment se servir de la FMB 3 –1 Les incontournables Certaines opérations ne peuvent pas se faire sans avoir recours à la FMB. Nous allons prendre deux exemples classiques 3 –1 – 1 Extraction de coordonnées Il est très fréquent que l’on veuille extraire des coordonnées des objets pour les mettre sous une forme tabulaire. Cela se fait en deux étapes impliquant la création des colonnes nécessaires (type float) suivie de leur remplissage avec une fonction comme centroidX(), centroidY() si on veut prendre les centroïdes. Le problème est que très souvent les données ainsi recueillies ne correspondent pas aux coordonnées de la table originale. Ceci est dû au fait que le système de coordonnées utilisé par MB/MI est par défaut en degrés, c’est à dire sans véritable projection. Si les coordonnées de la table sont dans un système autre que degrés, il faut alors imposer à MB/MI d’utiliser ce système. Ceci se fait en exécutant dans la FMB la commande suivante : SET COORDSYS TABLE <nom_de_la_table> 3 –1 – 2 Modification d’un objet Si on veut modifier par des commandes MB un objet, il faut réinsérer l’objet modifié dans la table. Ceci se fait par la commande UPDATE. Cependant, la fenêtre UPDATE ne permet pas d’accéder à la colonne OBJ (elle n’existe pas dans la liste déroulante et elle ne peut pas y être ajoutée). Il faut alors exécuter la commande UPDATE dans la FMB. L’angle du texte de l’objet sélectionné doit être augmenté de 25 degrés. dim o as object o=selection.obj alter object o geography 7,objectgeography(o,7)+25 update selection set obj = o 3 – 2 Utilisations immédiates La FMB peut se révéler un outil de choix dans certaines utilisations immédiates, c’est-à-dire que l’on peut recycler de l’information contenue dans la fenêtre suite à des commandes préalables pour d’autres conditions d’application. Une telle utilisation peut impliquer un simple énoncé, une séquence d’opérations ou un une opération complexe. Les exemples de la section 4 mettent en valeur les dimensions les plus spécifiques de type d’utilisation dont voici les principaux : - identifier clairement les conditions pré-requises à l’opération par ex. quelles sont la(es) table(s) ouverte(s) nécessaire(s), leur(s) statut(s) indispensable(s) (éditable, en particulier), quelles sont les opérations préalables pour atteindre cette étape - dégager de la masse d’information enregistrée par la FMB les énoncés essentiels repérer les quelques énoncés qui forment l’essentiel de la procédure, les isoler pour en former un bloc plus facilement manipulable. 8 - rechercher s’il y a des éléments variables les énoncés peuvent contenir des éléments propres à la dernière opération qu’il faudra modifier pour leur réutilisation, nom de table, de colonne, valeurs spécifiques pour une sélection,.... - penser à remplacer des éléments répétés par une ou des variables dans le cas où la procédure comporte plusieurs énoncés faisant appel à un élément commun et qu’elle doit être répétée plusieurs fois, il est souvent plus efficace de remplacer cet élément par une variable; il n’y aura qu’à changer la définition de la variable une fois plutôt que de faire des remplacements multiples à chaque répétition. - envisager d’écrire certains énoncés pour créer les conditions préalables nécessaires ces énoncés ne sont pas nécessairement partie de ceux enregistrés par la FMB mais peuvent être essentiels à la procédure - identifier les parties uniques (énoncés initiaux) et répétitives (procédure même) les énoncés initiaux sont souvent exécutés une seule fois alors que ceux formant le cœur de la procédure peuvent être exécutés plusieurs fois. Bien les séparer facilitera la tâche de sélectionner des blocs pour leur soumission. 3 – 3 Utilisations différées Il s’agit d’enregistrer des procédures qui pourraient être reprises dans le futur. Pour cela il s’agit d’enregistrer, de conserver et de récupérer les énoncés de la façon le plus sécuritaire et efficace que possible. À la solution classique d’un fichier texte qui peut être réutilisé en tout ou en partie dans la FMB, il faut envisager d’ajouter l’emploi d’un fichier document WOR dont les particularités sont discutées à la fin de cette section 3 – 3 – 1 enregistrement La FMB permet d’enregistrer tout son contenu dans un fichier TXT. Si d’autres énoncés non essentiels à la procédure sont dans la fenêtre, il faudra donc éditer ce fichier pour éliminer l’inutile. Si on veut seulement une partie du contenu de la FMB, il suffit d’ouvrir un fichier texte et de faire un simple Copier/Coller. 3 – 3 – 2 conservation Conservation veut aussi dire organisation et documentation. Comme la réutilisation est prévue pour le futur, il est plus qu’indispensable de rajouter aux énoncés MB quelques lignes expliquant leur fonction, les conditions d’utilisation, bref, le minimum nécessaire pour s’y retrouver. Il est préférable que tous les commentaires soient mis en début de procédure car des commentaires dispersés nécessiteront On peut choisir de stocker toutes les procédures dans des fichiers indépendants ou de les rassembler dans quelques fichiers en les regroupant par famille. Cette dernière solution requiert l’utilisation d’un bon repérage visuel pour retrouver la bonne procédure rapidement. 9 3 – 3 – 3 réutilisation La FMB ne permet que de faire un Copier/Coller à partir d’un fichier texte ouvert en dehors de MI. On peut à ce moment là ne pas transférer les lignes de commentaire. S’il y en reste dans le corps du bloc transféré, il faudra les ignorer lors de la définition des énoncés à exécuter pour que la procédure ne bloque pas (voir 2 – 5) 3 – 3 – 4 Document WOR Un WOR se distingue d’un fichier TXT sous 2 aspects structurels et un de syntaxe. Un WOR est essentiel un TXT avec une extension différente et un entête (les premières lignes de texte spécifique). On peut donc créer un WOR à partir d’un TXT dans un simple éditeur de texte; il suffit de rajouter au début les lignes voulues et de l’enregistrer avec la bonne extension. L’en-tête est le suivant : !Workspace !Version 600 !Charset WindowsLatin1 Le numéro de version devrait être celui correspondant à la version du MI utilisé. Il pourrait toujours être inférieur à cela mais la présence de certains énoncés peut être incompatible avec ce numéro, quoique cela n’empêchera pas son exécution. Ce n’est que s’il lui est supérieur que MI refusera d’exécuter le WOR. L’aspect de la syntaxe qui soit différent est que des commentaires peuvent se trouver dans le corps de la procédure sans avoir d’effet sur le déroulement des opérations. Si nous avons choisi d’avoir un WOR c’est que nous allons le réutiliser de façon différente; au lieu d’en extraire des énoncés qui seront exécutés dans la FMB, c’est le WOR qui sera exécuté en bloc par un « RUN APPLICATION “<fichier>.WOR“ ». Comme WOR et FMB appartiennent au même univers, ils peuvent communiquer sans difficulté. Ceci veut dire que les variables définies dans l’un sont disponibles dans l’autre. Ceci peut être un avantage mais offrir aussi quelques inconvénients. Voici un WOR !Workspace !Version 600 !Charset WindowsLatin1 dim b as string print a b=right$(a,len(a)/2)+left$(a,len(a)/2) Dans la FMB dim a as string a="Test 1" run application "c:/test_wor.wor" print b "Test 1" est imprimé par le WOR et "t 1Tes" par la FMB 10 3 – 3 –5 TXT ou WOR Le choix ne devrait pas être difficile car deux conditions sont bien claires. D’abord, un WOR implique une exécution en bloc de toute la procédure et ne devrait donc pas être choisi si tous les énoncés ne sont pas réutilisés de la même façon. Ensuite, un WOR ne devrait pas comprendre de variables dont les valeurs doivent être fixées avant exécution; il faudrait alors ouvrir le WOR, faire les corrections, l’enregistrer et l’exécuter, Il pourrait y avoir cependant moyen d’éviter ces complications en utilisant la communication possible entre FMB et WOR comme dans l’exemple ci-dessus pour définir (DIM + contenu) les variables utilisées dans le WOR (sans DIM alors pour ces variables). 11 4 – Quelques exemples de mise en œuvre 4 – 1 Construction d’une procédure simple La table Mont_rue contient les rues définies par des segments limités aux intersections. L’objectif est de créer une carte de rues principales et « complètes » (une seule polyligne par « nom ») Ouverture de la carte Open Table "C:\donnees\mont_rue.TAB" Interactive Création d’une carte finale “princip” ne comportant qu’une colonne « nom » Select nom from mont_rue where rowid=0 into Princip commit table Princip as "Princip" close table Princip open table "Princip" Définition d’une variable objet et d’une variable chaîne dim obj_nou as object dim nom_rue as string Sélection des segments ayant le nom spécifié « nom_rue » au début de la colonne « nom » de Mont_rue et fusion en un seul objet Nom_rue=”Pie ix” Select nom from mont_rue where nom like nom_rue+”%” into Selrue Objects Combine Data nom=nom obj_nou=selection.obj Insertion de l’objet et de son nom insert into Princip (obj,nom) values (obj_nou, nom_rue) Visualisation des résultats browse * from Princip map from Princip Set Map Window frontwindow() Zoom Entire Une remarque s’impose: la sélection avec « like nom_rue+”%” » risque de ramasser tous les fragments commençant de la bonne façon mais finissant avec des BLD, RUE ou PLA ce qui peut créer des objets bizarres. 4 – 2 Un document WOR succinct Il s’agit de contrôler la position et la taille de la FMB ainsi que la police d’affichage !Workspace !Version 600 !Charset WindowsLatin1 12 set window 1002 position (.01,3.9) width 8 height 2 font ("Arial",1,10,0) Ce document pourra être exécuté de la FMB chaque fois voulue. 4 – 3 Un document WOR pour lancement d’un « splash screen » La table « splash » est le « splash screen » voulu. Une fois affichée avec les paramètres voulus (obtenus de la FMB), la fenêtre carte est maximizée et l’application « splash_timer » est lancée. Cette application « compte » simplement l’écoulement de quelques secondes; comme l’application est active durant ce temps, toute autre opération est gelée, y compris la possibilité de fermer la fenêtre. À la fin du délai, tout est fermé, et MI redevient disponible. !Workspace !Version 600 !Charset WindowsLatin1 Open Table "c:\mapinfo\splash" As splash Interactive Map From splash Position (0.0520833,0.0520833) Units "in" Width 4.91667 Units "in" Height 2.95833 Units "in" Set Window FrontWindow() ScrollBars Off Autoscroll On Set Map CoordSys Earth Projection 1, 0 Center (1.690140845,-1.098591549) Zoom 463.1318504 Units "mi" Preserve Zoom Display Zoom Distance Units "mi" Area Units "sq mi" XY Units "degree" Dim WorkspaceMaximizedWindow As Integer WorkspaceMaximizedWindow = Frontwindow() Set Window WorkspaceMaximizedWindow Max Set Map Window WorkspaceMaximizedWindow Preserve Scale Undim WorkspaceMaximizedWindow run application "c:\mapinfo\splash_timer.mbx" close all 4 – 4 Transformation d’objets et contrôle de boucle Transformer des polylignes en lignes simples ayant les mêmes extrémités Nous utilisons la table ouverte « alines » Pour un seul objet sélectionné : update selection set obj= createline(objectnodex(obj,1,1), objectnodey(obj,1,1), objectnodex(obj,1,objectinfo(obj,20)), objectnodey(obj,1,objectinfo(obj,20))) Si nous voulons appliquer cette formule à tout la table : update alines set obj= createline(objectnodex(obj,1,1),objectnodey(obj,1,1), objectnodex(obj,1, objectinfo(obj,20)), objectnodey(obj,1,objectinfo(obj,20))) 13 Il y a un risque de rencontrer l’erreur : « objectnodeX: argument 3 out of range » qui provient si un des objets est une polyligne à sections multiples; la valeur de objectinfo(obj,20) de l’argument 3 indique le nombre total de nœuds, alors que l’argument 2 (valeur 1) pointe sur la première section de l’objet; s’il y a plus d’une section, le nombre de nœuds indiqué excède celui de la première section. Il faut donc exercer un contrôle sur les caractéristiques des objets. Nous allons d’abord apporter un premier développement : pour avoir un meilleur contrôle sur l’objet même; utilisons une variable objet et une boucle formelle dim o as object dim i as integer i=1 fetch rec i from alines o=alines.obj update alines set obj=createline(objectnodex(o,1,1), objectnodey(o,1,1),objectnodex(o,1,objectinfo(o,20)), objectnodey(o,1,objectinfo(o,20))) where rowid=i i=i+1 Les problèmes suivants risquent d’apparaître: « error fetching record » si une ligne est vide « objectnodex argument 1 has invalid type » si un objet n’est pas une polyligne aucune indication de fin de liste sinon parfois une erreur difficile à comprendre. Modifions la technique pour récupérer les enregistrements et éviter les « vides » fetch first from alines o=alines.obj i=alines.rowid update alines set obj=createline(objectnodex(o,1,1), objectnodey(o,1,1),objectnodex(o,1,objectinfo(o,20)), objectnodey(o,1,objectinfo(o,20))) where rowid=i fetch next from alines Toujours l’erreur sur l’argument 3 d’un objet parce qu’il a plusieurs sections et le nombre total des nœuds de la polyligne est appliqué à sa première section. Il nous faut alors changer l’énoncé du problème à «remplacer une polyligne par une ligne simple allant du premier nœud de la première section au dernier nœud de la dernière section » update alines set obj=createline(objectnodex(o,1,1), objectnodey(o,1,1), objectnodex(o,objectinfo(o,21),objectinfo(o,21+ objectinfo(o,21))), objectnodey(o,objectinfo(o,21),objectinfo(o,21+ objectinfo(o,21)))) where rowid=i Il nous reste toujours un « objectnodex argument 1 has invalid type » potentiel lorsque un des enregistrements n’est pas une polyligne. D’où le besoin de travailler sur des objets de type homogène et pour cela d’extraire les objets du type voulu et d’agir sur la sélection. select * from alines where int(objectinfo(obj,1))=4 into sele 14 Finalement, nous voulons maintenir le style propre des lignes car l’énoncé « create line » utilise le même style de ligne courrant pour toutes les nouvelles lignes. La procédure redéfinie se lit dans son ensemble de la façon suivante : dim o as object dim i as integer dim p as pen select * from alines where int(objectinfo(obj,1))=4 into sele fetch first from sele o=sele.obj i=sele.rowid p=objectinfo(o,2) o=createline(objectnodex(o,1,1), objectnodey(o,1,1), objectnodex(o,objectinfo(o,21),objectinfo(o,21+ objectinfo(o,21))),objectnodey(o,objectinfo(o,21), objectinfo(o,21+objectinfo(o,21)))) alter object o info 2,p update sele set obj=o where rowid=i fetch next from sele Le dernier bloc est répété autant de fois qu’il y a d’enregistrements (bloc est souligné une fois puis répéter <ENTRER>, clic dans la barre de titre de la FMB). Il n’y a pas d’indication de fin de fichier, la procédure restant bloquée sur le dernier enregistrement. Une possibilité serait d’ajouter avant la dernière ligne un print sele.rowid et d’arrêter la procédure dès que l’indicateur ne change plus. 4 – 5 Normalisation de cartes thématiques Le problème est de produire des cartes thématiques utilisant la même « légende », c’est à dire définies suivant les mêmes règles (nombre de plages, limites des plages, symbolisation). Une table « q_dr_96 » ne contient que des objets et 4 colonnes d’identification dont DR (code numérique, première colonne) et Nom_DR (alpha). Une table « Q_96dr02 » est un fichier de données statistiques. Sa première colonne est le code numérique de la DR. Dans ce cas-ci, il s’agit de faire des analyses thématiques de quelques variables dont on veut garder les valeurs de façon permanente. 1 – Ajouter les colonnes (nom et type) voulues Alter Table "q_dr_96" ( add TotlPls64 Integer, SeulPls64 Integer) Interactive 2 – Transférer les données Add Column "q_dr_96" (TotlPls64)From q_96dr02 Set To V0238 Where COL1 = COL1 15 Add Column "q_dr_96" (SeulPls64)From q_96dr02 Set To V0242 Where COL1 = COL1 3 – La transformation de structure est permanente (pas de sauvegarde nécessaire) mais le contenu des colonnes doit être enregistré pour devenir permanent. Commit Table q_dr_96 Interactive 4 – Faire l’analyse thématique du % de personnes de plus de 64 ans vivant seules. Résultats de la commande : shade window 49175080 1 with SeulPls64 / TotlPls64 * 100 ranges apply all use color Brush (2,255,16777215) 16.2: 22.6 Brush (2,13697023,16777215) Pen (1,2,0), 22.6: 25.6 Brush (2,10535167,16777215) Pen (1,2,0), 25.6: 27.3 Brush (2,7373055,16777215) Pen (1,2,0), 27.3: 29.8 Brush (2,3162367,16777215) Pen (1,2,0), 29.8: 35.4 Brush (2,255,16777215) Pen (1,2,0) default Brush (2,16777215,16777215) Pen (1,2,0) # use 1 round 0.1 inflect off Brush (2,16776960,16777215) at 3 by 0 color 1 # set legend window 49175080 layer prev display on shades on symbols off lines off count on title "% des 64 ans et + vivant seul" Font("Arial",0,9,0) subtitle "recensement 1996" Font ("Arial",0,8,0) ascending off ranges Font ("Arial",0,8,0) auto display off, auto display on, auto display on, auto display on, auto display on ,auto display on Create Cartographic Legend From Window 49175080 Behind Frame From Layer 1 5 – Nous voulons la même analyse thématique réalisée sur la paire de tables Q_su_96 (carte) et Q_96su02 (données) ayant exactement les mêmes structures que les précédentes. Il suffit de changer ‘dr’ en ‘su’ dans les 4 premières commandes. Alter Table "q_su_96" ( add TotlPls64 Integer, SeulPls64 Integer) Interactive Add Column "q_su_96" (TotlPls64)From q_96su02 Set To V0238 Where COL1 = COL1 Add Column "q_su_96" (SeulPls64)From q_96su02 Set To V0242 Where COL1 = COL1 Commit Table q_su_96 Interactive 6 – Il faut s’assurer que la carte q_su_96 est bien affichée dans la fenêtre active. On va réutiliser les commandes shade, etc, en modifiant seulement l’identificateur de la fenêtre. dim i_wind as integer i_wind=frontwindow() shade window 100 ranges 16.2: 22.6 22.6: 25.6 25.6: 27.3 27.3: 29.8 29.8: 35.4 i_wind 1 with SeulPls64 / TotlPls64 * apply all use color Brush (2,255,16777215) Brush (2,13697023,16777215) Pen (1,2,0), Brush (2,10535167,16777215) Pen (1,2,0), Brush (2,7373055,16777215) Pen (1,2,0), Brush (2,3162367,16777215) Pen (1,2,0), Brush (2,255,16777215) Pen (1,2,0) 16 default Brush (2,16777215,16777215) Pen (1,2,0) # use 1 round 0.1 inflect off Brush (2,16776960,16777215) at 3 by 0 color 1 # set legend window i_wind layer prev display on shades on symbols off lines off count on title "% des 64 ans et + vivant seul" Font("Arial",0,9,0) subtitle "recensement 1996" Font ("Arial",0,8,0) ascending off ranges Font ("Arial",0,8,0) auto display off, auto display on, auto display on, auto display on, auto display on ,auto display on Create Cartographic Legend From Window i_wind Behind Frame From Layer 1 7 – Toutes les modifications voulues peuvent être apportées au Shade en particulier pour ajuster les limites. La réutilisation du Shade est une meilleure alternative aux « gabarits thématiques » car on conserve ainsi les limites de classe qui étant automatiquement définies par l’ensemble des données dans une analyse thématique « normale » doivent être corrigées à la main chaque fois. 17 5 – Optimiser son milieu de travail L’utilisation de la FMB peut devenir très facilement une partie intégrale du fonctionnement quotidien. Il est tout naturel alors de penser à trouver des solutions qui amélioreraient la performance. Voici deux exemples qui montrent comment on peut apporter des améliorations à la FMB et comment simplifier l’utilisation des documents WOR. 5 – 1 Meilleure fonctionnalité de la FMB MBWPlus est une application conçue par Anssi Joutsimieni et adapté par l’auteur (disponible gratuitement sur www.paris-pc-gis.com) s’installe dans le menu « Outils » et donnent les capacités suivantes : - insertion de fichiers complets addition de leur contenu dans la fenêtre ou remplacement complet extension par défaut à choisir parmi plusieurs (TXT, WOR, MB...) possibilité de « trouver/remplacer » menu spécifique et menu flottant (bouton droit de la souris) étendus sélection de la police d’affichage rafraîchissement de la fenêtre, utilisé aussi pour la rouvrir si elle a été fermée Les options concernant l’extension, le mode d’insertion et la police d’affichage sont conservées dans un fichier INI et sont donc toujours disponibles lors de l’ouverture de la FMB. MBWPlus est un programme multilingue aux standards MLC (voir www.paris-pcgis.com/mlc/mlc_main_fr.htm) Menu de MBW 18 Menu spécifique MapBasic Menu flottant Options concernant le type d’extension à rechercher par défaut, le mode d’insertion et la police. 19 5 – 2 Meilleure exploitation des WOR AF Manager (gratuit sur www.paris-pc-gis.com) est une application qui permet le lancement d’application du type FONCTION (elles font leur travail et disparaissent sans laisser de trace, de menu...). Elle se présente sous la forme d’une barre d’outils (deux constants, « au sujet de » et « définitions des applications ») et au moins une icône d’application, pouvant aller jusqu’à 10. Cliquer sur une de ces icônes lance l’application directement. La barre d’outils peut être flottante ou dans une position fixe maintenue dans le fichier INI. AF Manager est conforme aux standards MLC mais n’existait qu’en anglais au moment de la rédaction de ce document.. Menu de AF Manager La spécification des applications se fait par l’item du menu ou le bouton spécial On peut se déplacer parmi les applications définies, les éditer ou les supprimer, ou bien en rajouter La fenêtre d’édition ou d’ajout permet de localiser l’application, ajouter le message qui sera affiché dans l’info-bulle, de choisir l’icône parmi celles disponibles avec MI ou dans tout dll spécifié. 20 Cette barre ne contient qu’une seule application 21 6 – Perpectives La première fonction de la FMB est certes l’enregistrement des contreparties des commandes du menu. Cette simple fonction permet à l’utilisateur de se familiariser avec le lexique et la syntaxe de MapBasic et au-delà de développer de l’intérêt pour son utilisation. Il s’agira d’abord de rechercher des raffinements ou des améliorations aux formules proposées. Ensuite il peut commencer à réutiliser des énoncés en apportant des modifications à certaines valeurs directement ou en créant des variables. D’un simple énoncé, il passe à une séquence de plusieurs, puis aborde la possibilité d’opérations complexes qu’il peut lancer comme une application WOR. De là à vouloir gérer toutes les applications-fonctions de façon efficace, il n’y a qu’un pas Pour celui qui possède MapBasic, la FMB devient un outil particulièrement appréciable qui dépasse la simple possibilité de pouvoir extraire des énoncés dont on est sûr de l’orthographe et de la syntaxe. Il permet en effet de faire certaines expérimentation de programmation sur des éléments bien déterminés dans un milieu contrôlé (formules, séquences, résultats...) ainsi que de faire des tests de conditions d’application, comme par exemple d’utiliser des SELECT pour faire des simulations de IF et d’en apprécier les conséquences. En un mot, si la FMB a été quelque peu négligée par MI, elle n’en reste pas moins, à mes yeux, un outil indispensable au développement d’habiletés avancées, un lieu de prédilection pour un auto-apprentissage enrichissant. 22 Annexe A : Restrictions sur les commandes MB dans la FMB Les énoncés, commandes et procédures qui suivent ne devraient pas être utilisées dans la FMB. Les raisons des restrictions sont détaillées ou utilisent une de ces clefs : MB F H restriction énoncée dans MB Reference Guide. énoncés reliés à l’utilisation de fichiers. Comme un fichier me peut pas être ouvert à partir de la FMB, j’ai exclu ces énoncés même si certains pourraient être opérationnels après qu’une application laisse un fichier ouvert et accessible, ce qui est très improbable. procédures de “handler”, qui sont en fait des sous-routines et sont donc interdites. AEEXECUTE Mac seulement AEINITIATE Mac seulement ALTER CONTROL MB CALL MB CONTINUE Utilisé seulement pour le “debugging“ d’une application. CONTROL …… Éléments de la définition.d’un “dialog“ (qui est interdit) CREATE RANGES Ces deux énoncés requièrent une variable vecteur qui CREATE STYLES n’est pas permise dans la FMB DECLARE FUNCTION MB DECLARE SUB MB DEFINE MB DIALOG MB DIALOG PRESERVE MB DIALOG REMOVE MB DO CASE.....END CASE MB DO....LOOP MB EndHandler procedure H END PROGRAM MB EOF() F EXIT DO MB EXIT FOR MB EXIT FUNCTION MB EXIT SUB MB FOR.....NEXT MB FILEATTR() F ForegroundTaskSwitchHandler proc. H FUNCTION.....END FUNCTION MB GET F GLOBAL N’est pas reconnu même s’il n’est pas “interdit” GOTO MB IF.....END IF MB INCLUDE MB INPUT # F LINE INPUT # F LOF() F 23 MAIN procedure ONERROR OPEN FILE PRINT # PROGRESSBAR PUT READCONTROLVALUE() REDIM RemoteMapGenHandler proc. RemoteMsgHandler proc. RESUME SEEK SEEK() H MB MB F MB F H S’applique seulement aux variables vecteur H H MB F F 24 Annexe B Codes des Commandes de Menu et leurs équivalents dans la FMB Cette liste des items de menus et de leurs conditions d’utilisation dans la FMB suit l’ordre dans lequel les différents menus et items sont présentés dans MapInfowW.MNU, SAUF QUE LES SOUS-MENUS (en italiques) sont placés après les menus d’où ils sont appelés. Certains ajouts de combinaisons de commandes ayant des contreparties dans la FMB (en général codes 000). Quelques additions venant du MENU. Sources : version 6.5 anglaise et française 123 *** 112 000 ??? Code de la commande Menu un énoncé (ou un ensemble d’énoncés) est généré quand cet item du menu est utilisé. Cet énoncé peut être utilisé pour passer des paramètres ce que ne permet pas de faire le RUN MC. Il est imprimé à la ligne suivante. ce RMC+code n’est pas opérationnel dans la FMB il n’y a aucun code pour cet item pas testé pour ce document FILE / FICHIER > NEW TABLE / NOUVELLE TABLE 101 Create table (+) Dépendant de l’option dans le dialogue File>Open, CREATE TABLE peut être suivi par CREATE MAP (nouvelle fenêtre carte), ADD MAP (ajout dans fenêtre carte existant), BROWSE (fenêtre tableau) ou rien (no view). > OPEN TABLE / OUVRIR TABLE 102 Open table (+) Dépendant de l’option dans le dialogue File>Open, OPEN TABLE peut être suivi par MAP (nouvelle fenêtre carte), ADD MAP (ajout dans fenêtre carte existant), BROWSE (fenêtre tableau) ou rien (no view). > OPEN DBMS / OUVRIR TABLE DBMS 116 > OPEN WORKSPACE / OUVRIR DOCUMENT 108 Run application "-------.WOR" > CLOSE TABLE / FERMER TABLE 103 Close table > CLOSE ALL / TOUT FERMER 104 Close all > CLOSE DBMS CONNECTION / FERMER UNE CONNEXION DBMS 124 > SAVE TABLE / ENREGISTRER TABLE 105 Commit table > SAVE COPY AS / ENREGISTRER TABLE SOUS 106 Commit table ... as > SAVE QUERY / ENREGISTRER REQUÊTE 117 Commit table selection as > SAVE WORKSPACE/ ENREGISTRER DOCUMENT SOUS 109 > SAVE WINDOW AS / EXPORTER FENÊTRE 609 > REVERT TABLE / ANNULER CHANGEMENTS 107 Rollback table 25 *** *** ??? *** *** *** ??? *** *** *** *** > PAGE SETUP / CONFIGURATION DE L’IMPRESSION > PRINT / IMPRIMER > MRU un des fichiers les plus récemment utilisés if .TAB Open table + Add map if .WOR action directe, pas de code if .MBX action directe, pas de code > EXIT / QUITTER 111 112 113 EDIT / EDITION > UNDO / ANNULER 201 > CUT / COUPER 202 Peut être remplacé par DELETE FROM SELECTION, mais UNDO non disponible après > COPY / COPIER 203 Sans utilité car il n’y a aucun moyen de diriger le contenu du presse-papier vers la bonne table. > PASTE /COLLER 204 La séquence habituelle Sélectionner/Copier/Coller peut être remplacée par SELECT/INSERT > COPY MAP WINDOW 000 > PASTE MAP WINDOW 000 > CLEAR / EFFACER 205 Peut être remplacé par DELETE FROM SELECTION, mais UNDO non disponible après. > CLEAR MAP OBJECTS ONLY / EFFACER OBJETS 206 > RESHAPE / MODIFIER OBJETS 1601 > NEW ROW / NOUVELLE LIGNE 702 > GET INFO / INFORMATIONS 207 OBJECTS / OBJETS > SET TARGET / DÉFINIR CIBLE Set target on > CLEAR TARGET / ANNULER CIBLE Set target off > COMBINE / ASSEMBLER Objects combine > DISAGGREAGATE / DÉSAGRÉGER-DISSOCIER ??? > BUFFER / TAMPON Create object as buffer > CONVEX HULL / ENVELOPPE CONVEXE ??? > ENCLOSE / CRÉATION DE SURFACES ??? > SPLIT / DÉCOUPER Objects split into target > ERASE / SUPPRIMER INTÉRIEUR Objects erase into target > ERASE OUTSIDE / SUPPRIMER EXTÉRIEUR Objects intersect into target > OVERLAY NODES / AJOUTER NŒUDS Overlay nodes into target 26 1610 *** 1611 *** 1605 *** 1621 1606 *** 1616 1617 1612 *** 1613 *** 1614 *** 1615 *** > CHECK REGIONS / VÉRIFICATION DES RÉGIONS ??? > CLEAN / CORRIGE LES ANOMALIES OBJETS ??? > SNAP-THIN / FUSION-SIMPLICATION ??? > SMOOTH / LISSER > UNSMOOTH / ANNULER LISSAGE > CONVERT TO POLYGON / CONVERTIR EN POLYGONE Peut être remplacé par UPDATE SELECTION SET OBJ = CONVERTTOREGION (OBJ) > CONVERT TO POLYLINE / CONVERTIR EN POLYLIGNE Peut être remplacé par UPDATE SELECTION SET OBJ = CONVERTTOPLINE (OBJ) 1618 1619 1620 1602 1603 1607 1604 QUERY / SÉLECTION > SELECT / SÉLECTION Select > SQL SELECT / SÉLECTION SQL Select > SELECT ALL / TOUT SÉLECTIONNER > INVERT SELECTION / INVERSER LA SÉLECTION 301 *** 302 *** 303 311 > UNSELECT ALL / TOUT DÉSELECTIONNER > FIND / RECHERCHER (si une table ouverte est indexée) > FIND SELECTION / RECHERCHER SÉLECTION > CALCULATE STATISTICS / STATISTIQUES 304 305 306 309 TABLE > UPDATE COLUMN / METTRE À JOUR COLONNE Update > APPEND ROWS TO TABLE / AJOUTER Insert into > GEOCODE / GÉOCODAGE > CREATE POINTS / CRÉER POINTS > COMBINE OBJECTS USING COLUMN / FUSIONNER Create objects as union > IMPORT / IMPORTER > EXPORT / EXPORTER > MAINTENANCE / GESTION TABLES > RASTER / IMAGE RASTER 405 *** 411 *** 407 408 406 *** 401 402 MAINTENANCE / GESTION TABLES > TABLE STRUCTURE / MODIFIER STRUCTURE Alter table > DELETE / SUPPRIMER TABLE Drop table > RENAME / RENOMMER TABLE Rename table > PACK / COMPACTER TABLE 27 404 *** 409 *** 410 *** 403 *** Create table "T" + Create map for ~T + Set table ~T + Insert into ~T + Commit table ~T + Set table ~T où T = MAP000X. L’ensemble de ces énoncés n’est pas opérationnelle dans la FMB à cause de l’utilisation d’une table temporaire qui ne peut pas être générée explicitement. Il faut utiliser tout simplement Pack Table ... > MAKE DBMS TABLE MAPP / CARTOGRAPHIER TABLE DBMS 415 ??? > CHANGE DBMS TABLE SYMB / MODIFIER SYMBOLE TABLE DBMS 418 ??? > UNLINK DBMS TABLE / RAPATRIER TABLE DBMS 416 ??? > REFRESH DBMS TABLE / RAFRAÎCHIR TABLE DBMS 417 ??? RASTER / IMAGE RASTER > ADJUST IMAGE SIZE / PARAMÈTRES > MODIFY IMAGE REGISTRATION / MODIFIER CALAGE > SELECT CONTROL POINT / POINTS DE CALAGE 414 413 1730 OPTIONS / AFFICHAGE > LINE STYLE / STYLE LIGNES > REGION STYLE / STYLE POLYGONES > SYMBOL STYLE / STYLE SYMBOLES > TEXT STYLE / STYLE TEXTES > TOOLBARS / BARRES D’OUTILS Alter buttonpad + (dépendant des changements) > SHOW/HIDE THEME LEGEND WINDOW / CACHER AFFICHER LÉGENDE > SHOW/HIDE STATISTICS WINDOW / CACHER AFFICHER STATISTIQUES > SHOW/HIDE MAPBASIC WINDOW / CACHER AFFICHER FENÊTRE MB > SHOW/HIDE STATUS BAR / CACHER AFFICHER BARRE D’ÉTAT > CUSTOM COLORS / PALETTE DE COULEURS > PREFERENCES 501 502 503 504 605 *** 606 607 608 616 617 208 PREFERENCES (accès direct aux éléments de la fenêtre Preferences) > SYSTEM SETTINGS > MAP WINDOW > LEGEND WINDOW > STARTUP > ADDRESS MATCHING > DIRECTORIES > OUTPUT SETTINGS > PRINTER 210 212 215 211 213 214 216 217 WINDOW / FENÊTRE > NEW BROWSER WINDOW / DONNÉSS Browse > NEW MAP WINDOW / CARTE Map from > NEW GRAPH WINDOW / GRAPHIQUE Graph > NEW LAYOUT WINDOW / MISE EN PAGE 28 601 *** 602 *** 603 *** 604 *** Layout+set coordsys layout+ create frame (plusieurs au besoin)+ set coordsys > NEW REDISTRICT WINDOW / SECTORISATION 615 *** Create redistricter > REDRAW WINDOW / RAFRAÎCHIR 610 > TILE WINDOWS / MOSAÏQUE 611 > CASCADE WINDOWS / CASCADE 612 > ARRANGE ICONS / RÉORGANISER LES ICÔNES 613 > fenêtres ouvertes et listées choix dans la liste 614 ouvre une fenêtre avec liste déroulante pour faire le choix première dans la liste 620 n(ième) dans la liste 620+n-1 HELP / AIDE > MAPINFO HELP TOPICS / CONTENU 1203 > MAPINFO ON THE WEB / MAPINFO SUR WWW 1210 > MAPINFO & DATA PRODUCTS SUPERSTORE / LA BOUTIQUE DES CARTES 1211 > MAPINFO FORUM ON MS NETWORK / MAPINFO FORUM ON MS NETWORK 1209 > ABOUT MAPINFO / À PROPOS DE MAPINFO 1205 BROWSE / DONNÉES > PICK FIELDS / CHOISR CHAMPS > OPTIONS / GRILLE Set browse window 704 703 *** 801 000 *** 000 *** MAP / CARTE > LAYER CONTROL / CONTRÔLE DES COUCHES > ADD / AJOUTER Set map redraw off + Add map + Set map layer + Set map redraw on > REMOVE / RETIRER Set map redraw off + Remove map + Set map redraw on > CREATE 3DMAP / CRÉER UNE VUE 3D ??? > CREATE PRISM MAP / CRÉER UNE CARTE PRISMATIQUE ??? > CREATE THEMATIC MAP / ANALYSE THÉAMTIQUE Shade + set legend > MODIFY THEMATIC MAP/ MODIFIER ANALYSE THÉMATIQUE Set shade + set legend > CREATE LEGEND / CRÉER LÉGENDE Create cartographic legend > CHANGE VIEW / WOOM Set map > CLONE VIEW / DUPLIQUER FENÊTRE Run command WindowInfo(FrontWindow(),15) 29 817 818 307 *** 308 *** 816 *** 805 *** 811 *** > PREVIOUS VIEW / ZOOM PRÉCÉDENT > VIEW ENTIRE LAYER / AFFICHER TOUTE LA COUCHE Set map > CLEAR CUSTOMS LABELS / EFFACER ÉTIQUETAGE PERSONNALISÉ > SAVE COSMETIC LAYER / ENREGISTRER COUCHE DESSIN Create table + Create map+ Commit table > CLEAR COSMETIC OBJECTS / EFFACER COUCHE DESSIN > SET CLIP REGION / DÉFINIR POCHOIR Set map clipping object > CLIP REGION ON/OFF/ ACTIVER DÉSACTIVER POCHOIR Set map clipping on/off > SETUP DIGITIZER / CONFIGURER MI PRO POUR NUMÉRISER > OPTIONS / OPTIONS Set map 806 807 814 809 810 812 *** 813 *** 803 802 ??? LAYOUT / MISE EN PAGE > CHANGE ZOOM / ZOOM > VIEW ACTUAL SIZE / VUE TAILLE RÉÉLLE > VIEW ENTIRE LAYOUT / VUE PLEINE PAGE > PREVIOUS VIEW / VUE PRÉCÉDENTE > BRING TO FRONT / PLACER DESSUS > BRING TO BACK / PLACER DESSOUS > ALIGN OBJECTS / ALIGNER OBJETS > CREATE DROP SHADOWS / CRÉER OMBRES PORTÉES > OPTIONS / OPTIONS 902 903 904 905 906 907 908 909 901 GRAPH / GRAPHIQUE (Vieux menu) > TYPE / TYPE 1001 > LABEL AXIS / AXE DES LIBELLÉS 1002 > VALUE AXIS / AXE DES VALEURS 1003 >SERIES / SÉRIES 1004 (Nouveau menu) > FORMATTING / FORMATAGE > GENERAL OPTIONS/ PROPRIÉTÉS GÉNÉRALES > SERIES OPTIONS / PROPRIÉTÉS DES SÉRIES > GRIDS & SCALES / PARAMÉTRAGE DES GRILLES ET ÉCHELLES > TITLES / TITRES > 3D VIEWING ANGLE / ANGLE DE VUE 3D > SAVE AS TEMPLATE / ENREGISTRER MODÈLE SOUS 2007 2002 2003 2004 2005 2006 2008 MAPBASIC > CLEAR CONTENTS / EFFACER CONTENU > SAVE CONTENTS / ENREGISTRER CONTENU 30 *** 1101 1102 REDISTRICT / SECTORISATION > ASSIGN SELECTED OBJECTS / AFFECTER OBJETS > SET TARGET DISTRICT MAP / DÉFINIR SECTEUR CIBLE > ADD DISTRICT / AJOUTER SECTEUR > DELETE TARGET DISTRICT / SUPPRIMER SECTEUR > OPTIONS / OPTIONS 705 706 707 708 709 LEGEND / LÉGENDE > ADD FRAMES / AJOUTER LÉGENDE > REFRESH / RAFRAÎCHIR > WINDOW PROPERTIES / PROPRIÉTÉS 1903 1902 1901 MAP 3D / VUE 3D > REFRESH TEXTURE / RAFRAÎCHIR LA GRILLE > CLONE VIEW / DUPLIQUER LA VUE > PREVIOUS VIEW / RETOURNE À LA VUE PRÉCÉDENTE > VIEW ENTIRE LAYER / AFFICHER TOUTE LA VUE > VIEWPOINT CONTROL / MODIFICATION DU POINT DE VUE > WIREFRAME / FILAIRE > PROPERTIES/ CONFIGURATION DE LA VUE 2103 2105 2106 2101 2107 2104 2102 ??? ??? ??? ??? ??? ??? ??? TOOLS / OUTILS > CRYSTAL REPORTS / CRYSTAL REPORTS > RUN MAPBASIC PROGRAM / EXÉCUTER > TOOL MANAGER / GESTIONNAIRE D’OUTILS 110 ??? 1801 CRYSTAL REPORTS / CRYSTAL REPORTS > NEW REPORT / NOUVEAU RAPPORT Create report > OPEN REPORT / OUVRIR UN RAPPORT Open report 1802 *** 1803 *** 31 PAS INCLUS DANS LES MENUS MI STANDARD SEND MAIL > CURRENT WINDOW SEND MAIL > WORKSPACE 114 115 HELP > CONTEXT SENSITIVE HELP > CONTENTS HELP > USE HELP HELP > HELP MODE HELP > MAPINFO TECHNICAL SUPPORT 1201 1202 1204 1206 1208 LEGEND > DELETE LEGEND 1 32 ">

公開リンクが更新されました
あなたのチャットの公開リンクが更新されました。