banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oubliĂ© ?

#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é smile

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 smile

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 smile
Merci Ă  vous pour le suivi.

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo