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é ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

Powered by FluxBB