Pages: 1
- Sujet précédent - Probleme de code pour la génération d'images et leur enregistrement - Sujet suivant
#1 Sat 14 February 2009 01:06
- Thibast
- Participant occasionnel
- Date d'inscription: 9 May 2007
- Messages: 15
Probleme de code pour la génération d'images et leur enregistrement
Bonsoir,
Cela fait une semaine que je copie des bouts de code, un peu partout pour générer un mbx capable d'enregistrer des images centrées sur les différents objets d'une table préalablement sélectionnée dans un menu déroulant.
Les paramétrages pour la génération d'image sont les suivants:
- l'échelle d'image
- sa définition en DPI
- sa taille en hauteur/largeur en mm
- son 1 ER et Dernier ID (Forcement un entier court)
- son chemin d'accès au dossier d'enregistrement cible avec comme format loc_Ma_tableNNNN.jpg
Les fenêtres de saisies semble correc tement fonctionner, mais la boucle permettant la génération des images me pose problème.
Monsieur Maurice Nadal (toujours lui, et qu'il soit ici encore remercié) m'avez transmis son script à l'époque pour réaliser cela dans une fenêtres map (je n'avais pas MapBasic V7.0 à l'époque et il fallait créer autant de bloc de texte qu'il y avait d'images à générer).
Mais là je cale....
En vous remerciant à nouveau pour votre aide
Thibast MI7.8 et MB 7.0
Code:
'****************************************************************
'* Nom de programme: Gen_image.MB
'*
'* Description: Générateur d'image de localisation avec nom ID
'*
'* Créer par: thibast
'* Date: 30/01/09
'* Date Revised: 30/01/09
'****************************************************************
'
'
'
'-----------------------------------------------------------------------------------------
'Fichiers de définition
'-----------------------------------------------------------------------------------------
Include "MENU.DEF"
Include "MAPBASIC.DEF"
'
'-----------------------------------------------------------------------------------------
'Déclaration des procédures
'-----------------------------------------------------------------------------------------
Declare Sub Main()
Declare Sub Fin_mbx
Declare Sub Apropos_Mbx
Declare Sub GI_InterfaceTablChps
Declare Sub GI_InterfaceParametre
Declare Sub GI_TabChps
Declare Sub GI_TestVal
Declare Sub GI_Bouclimage
'
'-----------------------------------------------------------------------------------------
'Déclaration des procédures et fonctions publiques
'-----------------------------------------------------------------------------------------
Declare Function IsTableOpen(ByVal sTabName As String) As Logical
'
'-----------------------------------------------------------------------------------------
'Déclaration des objets
'-----------------------------------------------------------------------------------------
DEFINE listTab 1
DEFINE ListCol 2
DEFINE SId_Prime 101
DEFINE SID_Der 102
DEFINE Sechelle 103
DEFINE SDPI 104
DEFINE SHaut 105
DEFINE Slarg 106
DEFINE Schem 107
DEFINE BtnApropos 200
Define BtnAppliquer 201
Define BtnAnnuler 202
'-----------------------------------------------------------------------------------------
'Déclaration des variables.
'----------------------------------------------
Global gsTable() As String
Global gsColumn()As String
Global gsAddCol As String
Global gnNumRecs, gnCurrRec As Integer
Global s_Tab() as string
Global Echelle as Smallint
Global DPI as Smallint
Global Haut_Image as Smallint
Global Larg_Image As Smallint
Global Chem_acces As String
Global ID_Prime, ID_Dernier as smallint
Global Sel_Table As String 'Selection de Table
Global Sel_Col As String ' Selection Du champs de table
'-----------------------------------------------------------------------------------------
'Sous routine : Main
'-----------------------------------------------------------------------------------------
Sub Main()
CLS
Create Menu "&Générateur d'images" As
"Lancer l'Outils" HelpMsg "Générateur d'image de localisation - Choisir la table." Calling GI_TestVal,
"(-",
"&A propos de l'outils" HelpMsg "Description d'Application." Calling Apropos_Mbx,
"(-",
"&Fermer Générateur d'images\tCtrl+M/W^M" HelpMsg "End Application." Calling Fin_mbx
Alter Menu Bar Add "Générateur d'images"
End Sub
'
-----------------------------------------------------------------------------------------
'Sous routine : Fin_Mbx
'-----------------------------------------------------------------------------------------
Sub Fin_mbx
Alter Menu Bar Remove "Générateur d'images"
Terminate Application "Gen_Image.mbx"
End Sub
'
'-----------------------------------------------------------------------------------------
'Sous routine : Apropos_Mbx
'-----------------------------------------------------------------------------------------
Sub Apropos_Mbx
Dim sAppName, sVerNum, sFirstDate As String
Dim iStrLen As SmallInt
sAppName = "Générateur d'image de localisation"
sVerNum = "1.00"
sFirstDate = "30/01/2009"
If Len(sAppName) < 30 Then
iStrLen = 156
Else
iStrLen = Len(sAppName) * 5
End If
Dialog Title "A Propos"
Control GroupBox Position 8,8 Width iStrLen Height 16
Control StaticText Position 12,14 Title sAppName + " Version " + sVerNum
Control StaticText Position 8,36 Title "Cet utilitaire permet la génération d'images de localisation"
Control StaticText Position 8,48 Title "Le nom de l'image est indicé par rapport à son identifiant"
Control StaticText Position 8,82 Title "Créé par Thibast le , " + sFirstDate + "."
Control OKButton
End Sub
'
-----------------------------------------------------------------------------------------
'Sous routine : GI_TestVal
'-----------------------------------------------------------------------------------------
Sub GI_TestVal
Dim i, i_NbTab as integer 'en plus
'==========================================
'Vérifie qu'au moins une table soit ouverte.
If NumTables() <1 then
Note "Ouvrez au minimum une table graphique avant de continuer"
Else
'==================================
'Compte le nombre de tables valides.
Redim s_Tab(NumTables())
For i = 1 to NumTables()
If TableInfo(i,TAB_INFO_MAPPABLE) = TRUE then
If TableInfo(i,TAB_INFO_TYPE) = TAB_TYPE_BASE or TableInfo(i,TAB_INFO_TYPE) = TAB_TYPE_RESULT then
i_NbTab = i_NbTab + 1
End if
End if
Next
'==================================================================================================
'Vérifie qu'il s'agisse de tables cartographiables de type normales, seamless ou issues de requêtes.
Redim s_Tab(i_NbTab)
i_NbTab = 0
For i = 1 to NumTables()
If TableInfo(i,TAB_INFO_MAPPABLE) = TRUE then
If TableInfo(i,TAB_INFO_TYPE) = TAB_TYPE_BASE or TableInfo(i,TAB_INFO_TYPE) = TAB_TYPE_RESULT then
i_NbTab = i_NbTab + 1
s_Tab(i_NbTab) = TableInfo(i,Tab_Info_Name)
End if
End if
Next
'============================================================
'Appelle l'interface d'étude au moins une table est concernée.
If i_NbTab > 0 then
Call GI_InterfaceTablChps
Else
Dim strMessage as string
i = i - 1
If i = 1 then
strMessage = "Le fichier ouvert n'est pas une table graphique"
Else
strMessage ="Aucun des " & i & " fichiers ouvertes est valide"
End if
Note strMessage & chr$(13) & "Ouvrez au minimum une table graphique n'appartenant pas aux types suivants :" & chr$(13) & " 1. Fichier image" & chr$(13) & " 2. Analyse thématique"
End if
End if
End Sub
'
-----------------------------------------------------------------------------------------
'Sous routine : GI_InterfaceTablChps
'-----------------------------------------------------------------------------------------
Sub GI_InterfaceTablChps
Dim i, iTable, iColumn As SmallInt
Echelle = 200
DPI = 200
Larg_image = 170
Haut_Image = 90
ID_Prime = 1
ID_Dernier = 100
ReDim gsTable(NumTables()) 'MàJ de la variable GSTABle en fct du nbre de tables dispo
For i = 1 to NumTables()
gsTable(i) = TableInfo(i, TAB_INFO_NAME)
Next
Dialog Title "Fenêtre de paramétrages"
width 260 Height 162 'taille de fen^tre
Control GroupBox
position 5,5
width 120 Height 70 ' taille longeur/hauteur
Title "&Table :"
Control ListBox ' Liste unique
position 10, 15
width 110 Height 55
ID ListTab
Title from Variable gsTable
Value ListTab Into iTable
Calling GI_TabChps
Control GroupBox
position 135,5
width 120 Height 70
Title "&Champs :"
Control ListBox
position 140, 15
width 110 Height 55
ID ListCol
Title from Variable gsTable
Value ListCol Into icolumn
Control Button
ID btnApropos
Title "A propos"
Position 63, 142
Width 52 Height 15
Calling Apropos_Mbx
Control OKButton
ID btnAppliquer
Title "OK"
Position 130, 142
Width 52 Height 15
Calling GI_InterfaceParametre
Enable
Control CancelButton
ID btnAnnuler
Title "Annuler"
Position 192, 142
Width 52 Height 15
Calling Fin_Mbx
End Sub
'-----------------------------------------------------------------------------------------
' Sous routine : GI_InterfaceParametre
'-----------------------------------------------------------------------------------------
Sub GI_InterfaceParametre
'Retourne les informations relatives à la table sélectionnée.
Dim i_sel_Table as integer
i_Sel_table = ReadControlValue (listTab)
Sel_Table = TableInfo(s_Tab(i_Sel_table),TAB_INFO_NAME)
'Retourne la colonne de la table choisie
Dim I_Sel_Col As integer '(num de colonne)
i_Sel_Col = ReadControlValue (listCol)
Sel_Col = ColumnInfo (Sel_Table,"Col" + Str$(i_Sel_Col),col_info_Name) 'nom de table num de colonne renvoi nom de colonne
Print Sel_Table
Print Sel_Col
'Vérifie que la colonne est un chiffre
If ColumnInfo (Sel_Table,"Col" + Str$(i_Sel_Col),col_type_integer) = true then
Note "La colonne selectionnée doit être de type nombre pour être incrémenter. Prière de relancer l'outils de selection"
call fin_Mbx
Else
End if
Select * From Sel_table Where Obj Into TempSel NoSelect
Dialog Title "Fenêtre de paramétrages"
width 260 Height 162
Control StaticText
position 5,81
Title "Id 1ere Image à générer"
Control EditText
position 100,80
width 25 height 12
ID SId_Prime Into ID_Prime Value ID_Prime
Control StaticText
position 135,81
Title "Id derniere image à générer"
Control EditText
position 228,80
width 25 height 12
ID SId_Der Into ID_Dernier Value TableInfo(Sel_table, TAB_INFO_NROWS)
Control StaticText
position 5,96
Title "&Echelle : 1/"
Control EditText
position 45,94
width 25 height 12
ID Sechelle Into Echelle Value Echelle
Control StaticText
position 100,95
Title "&Definition de l'image (en DPI)"
Control EditText
position 228,94
width 25 height 12
ID SDPI Into DPI Value DPI
Control StaticText
position 5,110
Title "&Hauteur Image (en mm)"
Control EditText
position 100,109
width 25 height 12
ID SHaut Into Haut_Image Value Haut_Image
Control StaticText
position 135,110
Title "&Largeur Image (en mm)"
Control EditText
position 228,109
width 25 height 12
ID Slarg Into Larg_image Value Larg_Image
Control StaticText
position 5,125
Title "&Dossier d'enregistrement"
Control EditText
position 100,124
width 155 height 12
ID SChem Into Chem_acces Value ApplicationDirectory$()
Control Button
ID btnApropos
Title "A propos"
Position 63, 142
Width 52 Height 15
Calling Apropos_Mbx
Control OKButton
ID btnAppliquer
Title "OK"
Position 130, 142
Width 52 Height 15
Calling GI_Bouclimage
Enable
Control CancelButton
ID btnAnnuler
Title "Annuler"
Position 192, 142
Width 52 Height 15
Calling Fin_Mbx
End Sub
'-----------------------------------------------------------------------------------------
'Sous routine : GI_Bouclimage
'-----------------------------------------------------------------------------------------
sub GI_Bouclimage
dim Num_image as smallint
'dim image_encours as smallint
dim cmd as string
dim Image_Sauv as string
Num_image=ID_Prime
if Num_image > ID_Dernier then run command fin_Mbx
else
'Select * from TempSEl where col_info(sel_col,col_info_name)=num_image into image_encours 'changer ID par SEl_Col
'set map redraw off
'Add Map Layer Numero_encours
'Set Map Scale 1 Units "cm" For Echelle Units "cm" 'Echelle d'impression'
'Set Map Layer 1 Label Position Above Right Font ("Arial",257,8,16711680,16777215) With sel_col Auto On
'Set map zoom entire layer image_encours
'set map redraw on
Image_Sauv=chr$(34)+Chem_acces+"\Loc_"+num_image+".jpg"+chr$(34)'Chem_acces de sauvegarde des localisation
cmd="save window frontwindow() as "+Image_Sauv+" type "+chr$(34)+"JPEG"+chr$(34)+" resolution 200" ' Définition de l'image'
run command cmd
End if
' je ne sais pas ;;;;Fetch next from TempSEl
End sub
'
'-----------------------------------------------------------------------------------------
'Sous routine : GI_TabChps 'Recherche des champs en fonction de la table selectionnée
'-----------------------------------------------------------------------------------------
Sub GI_TabChps
Dim i, iCols As SmallInt
Sel_Table = gsTable(ReadControlValue(1))
iCols = NumCols(Sel_Table)
ReDim gsColumn(iCols)
For i = 1 to iCols
gsColumn(i) = ColumnInfo(Sel_Table, "Col" + Str$(i), COL_INFO_NAME)
Next
Alter Control 2 Title From Variable gsColumn Value 1
End Sub
'
'--------------------------------------------------------------------------
'Test Si Des tables sont ouvertes
'--------------------------------------------------------------------------
Function IsTableOpen(ByVal sTabName as String) as Logical
Dim n As Integer
IsTableOpen = True
OnError Goto ERROR_SPOT
n = TableInfo(sTabName, TAB_INFO_NROWS)
Exit Function
ERROR_SPOT:
IsTableOpen = False
Exit Function
End FunctionHors ligne
#2 Sun 15 February 2009 22:57
- Thibast
- Participant occasionnel
- Date d'inscription: 9 May 2007
- Messages: 15
Re: Probleme de code pour la génération d'images et leur enregistrement
Bonsoir,
Je reviens vers vous pour préciser mes questions
1- (Question sans-doute très bête); Je ne parviens pas a renvoyer les valeurs saisies dans les boites de dialogue dans les variables définies :
Code:
Control StaticText
position 5,125
Title "&Dossier"
Control EditText
position 45,124
width 155 height 12
ID SChem Into Chem_acces Value ApplicationDirectory$()Schem correspond au dossier en cours mais Chem_acces est égal à rien !
2- Cette Sous Routine m'a "turlupinée" (Et je reste Poli !!) tout le WE, sans que je puisse obtenir le résultat recherché:
Code:
'-----------------------------------------------------------------------------------------
'Sous routine : GI_Bouclimage
'-----------------------------------------------------------------------------------------
sub GI_Bouclimage
dim Num_EnCours as Integer
dim cmd as string
dim Prefixe as String
dim Extension as string
dim nom as string
dim numChps as smallint
Num_EnCours =ID_prime
Nom="Loc_"
Extension=".jpg"
numchps=ColumnInfo(Sel_Table,Sel_Col,COL_INFO_Num) 'test
Print numchps 'retest ok le numéro est bon ...
SET COORDSYS TABLE TempSel 'pour renvoyer le systeme de coordonnées de la table en cours ??
if Num_EnCours > ID_Dernier then run command fin_Mbx
else
'Num_EnCours=Sel_Table.Sel_Col 'Commande Inconnue ????Sel_Table.COL(numchps) marche pas non plus
select * from sel_table where ID =Num_EnCours into Tempnum 'je ne sais pas renvoyer le nom de champs (dans le cas présent ID) par la variable Sel_Col ou le numero de olonne NumChps ...
Add Map Layer Tempnum
Set Map Scale 1 Units "cm" For Echelle Units "cm"
Set Map Layer 1 Label Position Above Right Font ("Arial",257,8,16711680,16777215) With sel_col Auto On
Set map zoom entire layer image_encours
set map redraw on
cmd="Save Window frontwindow() As "+chr$(34)+Chem_acces+chr$(34)+prefixe+chr$(34)+Num_EnCours+chr$(34)+Extension+chr$(34)+"Width"+chr$(34)+larg_image+chr$(34)+"Units "+chr$(34)+"mm"+chr$(34)+" Height"+chr$(34)+Haut_image+chr$(34)+"Units "+chr$(34)+"mm"+chr$(34)+" Resolution"+chr$(34)+dpi+chr$(34)
run command cmd
fetch next from Sel_Table
End if
End subNon seulement cela ne fonctionne pas mais en plus il me renvoi le message "Type de Base de données non Valide. Attention : Pas de Quôte en fin de chaîne" même si je réduit cmd
Au secours je craque !!!!
Hors ligne
#3 Mon 16 February 2009 23:22
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Probleme de code pour la génération d'images et leur enregistrement
Bonjour
Je ne fais qu'un court passage et je ne peux résoudre tout ce qui vous "turlupine"...
Deux pistes:
- pour bien comprendre comment fonctionnent dialogues et contrôles, en particulier comment ils renvoient des valeurs soit en cours de route par un "handler" soit à la clôture par le OK, lire ce document...
- pour la seconde question: quand on veut un JPG... il faut dire à MI: Extension=".JPEG" !! ![]()
Hors ligne
#4 Tue 17 February 2009 21:21
- Thibast
- Participant occasionnel
- Date d'inscription: 9 May 2007
- Messages: 15
Re: Probleme de code pour la génération d'images et leur enregistrement
Bonsoir,
Merci pour ces réponses;
La première, correspond plus à une véritable bible qu'a une simple piste. Je vais tacher de m'en inspirer dans l'avenir, je trouverais sans doute la (des) solution(s) à ma(mes) tracasserie(s) actuelle(s) et à venir.
Par contre, dans le seconde réponse, je pense avoir bien reporté le . de Jpg, puisqu'il est intégré au nom de la variable extension. ...
Je cherche encore ....
A bientôt.
Hors ligne
#5 Tue 17 February 2009 23:41
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Probleme de code pour la génération d'images et leur enregistrement
Par contre, dans le seconde réponse, je pense avoir bien reporté le . de Jpg, puisqu'il est intégré au nom de la variable extension. ...
Ne cherche plus et regarde attentivement: MI veut qu'on dise JPEG, en 4 lettres, avec le "E", quand on désire du JPG (en 3 lettres) !!
ps: j'ai fait sauter le code (pour la lisibilité, tu l'avais déjà donné)
Hors ligne
#6 Wed 18 February 2009 20:38
- Thibast
- Participant occasionnel
- Date d'inscription: 9 May 2007
- Messages: 15
Re: Probleme de code pour la génération d'images et leur enregistrement
Oui Effectivement !
"Mille fois tourne ta langue dans ta bouche avant de répondre"
Je teste cela dans la foulée. Je ne dois plus être trop maintenant de l'objectif que je me suis fixé ...
Merci encore
Hors ligne
Pages: 1
- Sujet précédent - Probleme de code pour la génération d'images et leur enregistrement - Sujet suivant


