#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 filetitleHors 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 wLayoutComme ç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

