thiosyiasar
Messages postés
186
Date d'inscription
lundi 11 mars 2002
Statut
Membre
Dernière intervention
30 novembre 2010
3
22 avril 2004 à 14:54
En fait mon exe attaque des controles ActiveX (MapAndGuide controls) a savoir le MGCMapSource et le MGCMapControl.
Je ne peut pas te les envoyer à cause de la licence mais je peux coller le code de l'unique Feuille du projet de test
Je pense peut être que les controles sont à l'origine du souci
Option Explicit
Option Base 0
Private Const STRADDR_ID As Long = 0
Private Const STRADDR_LNAME As Long = 1
Private Const STRADDR_FNAME As Long = 2
Private Const STRADDR_CONTRY As Long = 3
Private Const STRADDR_POSTCODE As Long = 4
Private Const STRADDR_TOWN As Long = 5
Private Const STRADDR_ADDRESS As Long = 6
Private Const STRADDR_XCOORD As Long = 7
Private Const STRADDR_YCOORD As Long = 8
Private Const STRADDR_COLIDMAX As Long = 8
Private Const GEOADDR_COUNTRY As Long = 0
Private Const GEOADDR_TOWN As Long = 1
Private Const GEOADDR_DISTRICT As Long = 2
Private Const GEOADDR_STREET As Long = 3
Private Const GEOADDR_XCOORD As Long = 4
Private Const GEOADDR_YCOORD As Long = 5
Private Const GEOADDR_IDHIGH As Long = 6
Private Const GEOADDR_IDLOW As Long = 7
Private Const GEOADDR_COLIDMAX As Long = 7
Private mvStrAddrs() As Variant '(colonne, ligne) Table des adresses littérales
Private mvGeoAddrs() As Variant '(colonne, ligne) Table des adresses géocodées
Private mpAddrs As Integer 'Pointeur d'adresse
Private miAddrsCount As Integer 'Nombre d'adresse en cours
Private msLayerName As String
Private Sub Form_Load()
Call start
Call addAddress("01 DB", "15 rue de Cadix", "75015", "Paris")
Call addAddress("12PLANET", "40 bis rue du Faubourg Poissonière", "75010", "Paris")
Call addAddress("3ATRED", "13 rue Vivienne", "75002", "Paris")
Call addAddress("3CIF", "41 Avenue Georges V", "75008", "Paris")
Call addAddress("Marvin", "7 rue mulhouse", "75002", "Paris")
Call refreshMap
End Sub
Private Sub Form_Resize()
Me.MapControl.Width = Me.Width - 150
Me.MapControl.Height = Me.Height - 420
End Sub
' ****************************************************************
' INITIALISATION DE L'INSTANCE
' ****************************************************************
Public Sub start(Optional ByVal size As Long = 16, _
Optional ByVal color As Long = vbBlue, _
Optional ByVal shape As Long = easCIRCLE)
msLayerName = "#TMP"
Set MapControl.MapSource = MapSource ' Type incompatible si exécuté dans le UserControl_Initialize()
Call MapControl.Map.AddressDB.SetTMPSymbol(easCIRCLE, color, size)
Call clearAddresses
End Sub
' ****************************************************************
' INTERFACE PUBLIQUE - GESTION DU CONTENU
' ****************************************************************
Public Sub clearAddresses()
mpAddrs = 0
miAddrsCount = 0
Erase mvStrAddrs
Erase mvGeoAddrs
Call MapControl.Map.AddressDB.RemoveAll(msLayerName)
End Sub
Public Sub addAddress(ByVal name As String, _
ByVal address As String, _
ByVal postCode As String, _
ByVal town As String, _
Optional ByVal contry As String = "F")
' Gestion des tables
If mpAddrs = 0 Then
ReDim mvStrAddrs(STRADDR_COLIDMAX, mpAddrs)
ReDim mvGeoAddrs(GEOADDR_COLIDMAX, mpAddrs)
Else
ReDim Preserve mvStrAddrs(STRADDR_COLIDMAX, mpAddrs)
ReDim Preserve mvGeoAddrs(GEOADDR_COLIDMAX, mpAddrs)
End If
' Ecriture des données de l'adresse
mvStrAddrs(STRADDR_LNAME, mpAddrs) = name
mvStrAddrs(STRADDR_ADDRESS, mpAddrs) = address
mvStrAddrs(STRADDR_POSTCODE, mpAddrs) = postCode
mvStrAddrs(STRADDR_TOWN, mpAddrs) = town
mvStrAddrs(STRADDR_CONTRY, mpAddrs) = contry
' Ecriture des données géographique
Call convGeoAddress(mpAddrs)
' Insertion dans la carte
Call insertAddress(mpAddrs)
' Mise à jour des compteurs
mpAddrs = mpAddrs + 1
miAddrsCount = miAddrsCount + 1
End Sub
Public Sub refreshMap()
Call MapControl.refreshMap
End Sub
' ****************************************************************
' PROCEDURES PRIVEES - GESTION DES ACTIONS SUR LA CARTE
' ****************************************************************
Private Sub convGeoAddress(ByVal index As Long)
On Error Resume Next
Dim vGeoResult As Variant
Dim iAddrMax As Integer
Dim pAddr As Integer
Dim idCol As Integer
'next line performs a geocoding and saves the result in GeoResult
Debug.Print "Convertion de : " & mvStrAddrs(STRADDR_ADDRESS, index) & " " _
& mvStrAddrs(STRADDR_POSTCODE, index) & " " _
& mvStrAddrs(STRADDR_TOWN, index) & " " _
& mvStrAddrs(STRADDR_CONTRY, index)
' Convertion de l'adresse
vGeoResult = MapControl.Map.Geocode(9, mvStrAddrs(STRADDR_CONTRY, index), _
mvStrAddrs(STRADDR_POSTCODE, index) & " " & mvStrAddrs(STRADDR_TOWN, index), _
mvStrAddrs(STRADDR_ADDRESS, index))
' Lecture du nombre de correspondances trouvées
iAddrMax = UBound(vGeoResult, 2)
For idCol = LBound(vGeoResult, 1) To UBound(vGeoResult, 1)
If Not IsEmpty(vGeoResult) Then
mvGeoAddrs(idCol, index) = vGeoResult(idCol, 0) 'copys the geocode data into the Result array
End If
Next
For pAddr = 0 To iAddrMax
Debug.Print " ------------> " & vGeoResult(GEOADDR_STREET, pAddr) & " " _
& vGeoResult(GEOADDR_TOWN, pAddr) & " " _
& vGeoResult(GEOADDR_COUNTRY, pAddr) & " "
Next pAddr
End Sub
Private Sub insertAddress(ByVal index As Long) 'this sub inserts the addresses of your table into the TMP layer and display the addresses in the map
Dim data(1, 2) 'variable to set the data of the TMP entry (ID,X,Y)
'miItemCount = miItemCount + 1
data(0, 0) = "ID" '[0,i]=description here:ID
data(1, 0) = index 'mvStrAddrs(STRADDR_LNAME, index) 'miItemCount '[1,i]=value
data(0, 1) = "X"
data(1, 1) = mvGeoAddrs(GEOADDR_XCOORD, index)
data(0, 2) = "Y"
data(1, 2) = mvGeoAddrs(GEOADDR_YCOORD, index)
Dim data1 As Variant
data1 = data() 'a variant is needed to use the AddressDB.Insert method, not an array
Call MapControl.Map.AddressDB.Insert(data1, msLayerName)
End Sub
Nico