#1 Mon 01 September 2008 17:54
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
rafraichir un mise ne page avec mapbasic
bonjour,
je réalise un atlas naturaliste avec près de 300 cartes de répartition. J'ai automatisé la réalisation de ces cartes. En gros je mets à jour une table access contenant les données sources via un formulaire access puis je bascule sous mapinfo. De là je rafraichis ma couche de points, mon analyse thématique, mon graphique et la mise en page via "rafraichir table DBMS". puis j'exporte ma fenêtre mise en page en png.
Mon problème est que dans la fenêtre mise en page l'opération de rafraichissement DBMS ne rafraichi que la carte et pas le graphique. Je dois faire un ctrl+f (=rafraichir) ou afficher ma fenêtre graphique puis ré-afficher ma fenêtre mise ne page pour que mon graphique se mette à jour. Cela avant d'exporter ; sinon l'image exportée comporte un graphique faux (non mis à jour). Bon c'est faisable mais c'est long.
J'ai fait un .wor que je lance depuis la fenêtre mapbasic par un : Run Application "mon.WOR"
Ce .wor fonctionne bien et me permet de tout faire en une seule opération (rafraichissement wms, récupération du nom de l'espèce dans la table, export de la mise en page en png avec le nom_de_l'espèce.png comme nom de fichier pour l'image produite). Bref de faire une carte en qq secondes
Mais je ne trouve pas le moyen de rafraichir mon graphique dans la mise en page avec une commande map-basic avant de lancer la commande d'export. Ca fait des heures que je cherche une commande qui permette ce rafraichissement. Si qq'un a une idée ... Voici mon .wor :
Code:
!Workspace !Version 780 !Charset WindowsLatin1 'rafraichir les tables sources DBMS (connection Access) Server Refresh Carto_SP31Actu Server Refresh Carto_SP32Actu Server Refresh Qry_Donnees_SP Server Refresh Qry_semainesSP Server Refresh Qry_Legende_carto Server Refresh Qry_TotalObs 'redessiner la carte set map redraw on 'tentative de mise à jour du graphique dans la mise ne page mais ne fonctionne pas Set Window 51807792 front Set Window 51761360 front run menu command 610 '=Rafraîchit la fenêtre active 'récupération du nom de l'espèce undim filetitle Dim filetitle as string Fetch Rec 1 From Qry_Donnees_SP filetitle = Qry_Donnees_SP.taxon & ".png" 'export de la fenêtre mise en page en png save window Frontwindow() as "C:\Documents and Settings\Gil\Bureau\Carte_sp_determinantes_provisoire\" & filetitle type "png" resolution "150"
Merci
Hors ligne
#2 Mon 01 September 2008 19:17
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: rafraichir un mise ne page avec mapbasic
Bonjour
Vous ne pouvez pas utiliser un n° de fenêtre "fixe": il change à chaque fois !!
Il faut lors de la création de la fenêtre légende (quand elle est au premier plan), demander son numéro par WinID(FrontWindow())
La même chose avec la fenêtre Mise en Page.
Mettre ces valeurs dans des variables (définies par un Dim ma_variable1 et un Dim ma_variable2, un Dim par ligne...qu'il est bon d'annuler chacune par un Undim en fin de WOR)
Alors les lignes
Set Window ma_variable1 front
run menu command 610
auront une efficacité
Hors ligne
#3 Tue 02 September 2008 11:52
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
Re: rafraichir un mise ne page avec mapbasic
Merci beaucoup pour votre réponse qui m'a bien fait avancer. En fait je travail depuis un .wor complet, fait par mapinfo lors de l'enregistrement de mon document, je n'ai donc pas d'ID pour mes fenêtres. Comme vous me le proposé, j'ai donc modifié ce .wor complet pour y ajouter 2 variables qui récupèrent l'ID des fenêtres layout et Graph.
Code:
'pour la fenêtre Graphique dim wGraph as integer wGraph = WindowID(FrontWindow()) 'pour la fenêtre mise en page dim wLayout as integer wLayout = WindowID(FrontWindow())
Ensuite dans le .wor que je lance via la fenêtre mapbasic ou un .mbx, je peux maintenant appeler ces fenêtres et carrément, je commence par les fermer. Le rafraichissement refuse toujours de fonctionner pour le graphique dans la mise en page.
Code:
Close window wLayout close window wGraph
puis par copier coller du code depuis le .wor complet, je recréé ces deux fenêtres (en prenant bien soin de leur attribuer chacune les mêmes variables wGraph et wLayout pour pouvoir les fermer lors de la création de la carte suivante). Ce n'est pas du code super propre (les fenêtres se ferment et s'ouvrent) mais ça fonctionne bien : par un simple <Entrée> sur la ligne run Application "mon.WOR" de la fenêtre mapbasic, je met à jour ma mise en page et je l'exporte en png avec carte et graphique.
Je ne sais toujours pas pourquoi le graphique ne se rafraichi pas mais j'ai contourné le problème
Si besoin je mets le code complet de mon .wor qui ferme, recréé les fenêtres puis exporte la mise en page mais il est long ; c'est juste un copier coller d'une partie de celui créé par mapinfo + qq lignes ajoutées.
Merci pour ces conseils précieux je débute en mapbasic.
Hors ligne
#4 Tue 02 September 2008 14:27
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: rafraichir un mise ne page avec mapbasic
Si vous fermez les fenêtres (??? un peu curieux !!), à leur recréation elle auront des numéros différenrs qu'il faudra retrouver, donc refaire wGraph = WindowID(FrontWindow()) et wLayout = WindowID(FrontWindow())
Mais à un moment ou un autre il faut profiter de cette connaissance de ces numéros pour faire
Set Window wGraph front
run menu command 610
Set Window wLayout front
run menu command 610
si vous voulez ce raffraîchissement
Hors ligne
#5 Tue 02 September 2008 19:58
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
Re: rafraichir un mise ne page avec mapbasic
j'ai essayer comme vous proposez sans fermer les fenêtres, voir le code ci-dessous ça fonctionne mais le graphique ne se rafraichi que si je rafraichi le layout puis le graph puis de nouveau le layout ??? Si je fais comme proposé : rafraichissement graph puis layout ça ne suffit pas. Ce n'est pas grave, ça fonctionne bien et je n'ai plus les fenêtres qui se ferment et s'ouvrent, c'est plus propre. Ci-dessous le code commenté de mon .wor, cette fois bien simplifier, il servira peut-être. Merci bcp Maurice.
Je poursuis dans access pour faire les 300 cartes en un click : dans une boucle : mise à jour des données dans la table access via une requête sql avec des variables sur l'id du taxon puis, lancement du .wor ci-dessous. Mais j'ai qq soucis. Je refais un sujet pour la suite.
Code:
!Workspace !Version 780 !Charset WindowsLatin1 'rafraichissement DBMS des 6 tables ou reqûetes sources se trouvant dans Access Server Refresh Carto_SP31Actu Server Refresh Carto_SP32Actu Server Refresh Qry_Donnees_SP Server Refresh Qry_semainesSP Server Refresh Qry_Legende_carto Server Refresh Qry_TotalObs 'redessiner la carte set map redraw on 'rafraichissement (les variables wGraph et wLayout de ces 2 fenêtres sont initialisées dans le .wor complet du projet) Set Window wLayout front run menu command 610 Set Window wGraph front run menu command 610 Set Window wLayout front run menu command 610 'récupération du nom de l'espèce dans le champ taxon de la table Qry_Donnees_SP Dim filetitle as string Fetch Rec 1 From Qry_Donnees_SP filetitle = Qry_Donnees_SP.taxon & ".png" 'export de la fenêtre mise en page en png save window Frontwindow() as "C:\Documents and Settings\Gil\Bureau\Carte_PACA\" & filetitle type "png" resolution "150" UnDim filetitle
Hors ligne
#6 Fri 05 September 2008 18:16
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
Re: rafraichir un mise ne page avec mapbasic
Bonjour,
Je corrige mon code, il semble que "run command" ne fonctione pas dans un .wor.
Utiliser plutôt "update window"
Code:
'rafraichissement (les variables wGraph et wLayout de ces 25 fenêtres sont initialisées dans le .wor complet du projet) Set Window wGraph front update window wGraph Set Window wLayout front update window wLayout
Comme ça ça fonctionne nickel
Hors ligne
#7 Fri 05 September 2008 19:12
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: rafraichir un mise ne page avec mapbasic
Merci du suivi
Normalement run menu command fonctionne dans un WOR ! Je suis surpris, à moins que le numéro ait évolué...
Hors ligne
#8 Fri 05 September 2008 20:01
- Delu
- Participant actif
- Lieu: Briançon
- Date d'inscription: 29 Apr 2008
- Messages: 76
Re: rafraichir un mise ne page avec mapbasic
j'ai regardé dans C:\Program Files\MapInfo\MapBasic\menu.def et j'ai bien ça
Define M_WINDOW_REDRAW 610
mais ça ne fonctionne que pour la mise à jour de la carte et pas pour le graph dans le layout. ???
Mais bon Window redraw fonctionne
Merci à vous pour le suivi.
Hors ligne