Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/06/2007, 12h54   #1
Invité de passage
 
Inscription : juin 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1
Points : 0
Points : 0
Par défaut Dock comme Mac OSX sur un formulaire

Voici un module permettant de mettre un dock sur un formulaire. Le code est très commenté, il est donc accessible aux débutants.

Le problème principale de ce module est qu'il effectue beaucoup de calculs et de tests et est donc très lent lorsqu'il y a beaucoup de contrôles sur le formulaire.

Vous trouverez le code source ci-dessous et également en fichier joint.

N'hésitez pas à me faire part de vos commentaires et suggestions.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
 
'Développer par Cyril DAVID, étudiant à l'ISIMA, en collaboration avec David CHAPUT
'ISIMA : Institut Supérieur d'Informatique, de Modélisation et de leurs Applications
'Pour toute question sur ce code, il est possible de me contacter aux adresses suivantes :
'Cyril.David@tele2.fr
'rams085@hotmail.com
'rams085@hotmail.fr
'cyril.david@poste.isima.fr
 
'Certaines adresses sont amenées à disparaître donc n'hésitez pas à me contacter sur
'toute les adresses si je ne répond pas
 
 
'**************************************************************************************************
 
 
'ATTENTION :
'   - Il est nécessaire que tous les éléments du dock aient le même préfixe pour pouvoir les distingués
'     des autres contrôles. Ce préfixe doit être sauvegardé dans la constante "Cst_prefixe".
'   - Il est important que les éléments soit numérotées dans l'ordre que l'on souhaite qu'elles
'     apparaissent. La première devant obligatoirement commencer par "0".
 
 
 
'Si vous désirez modifier le nombre d'images, il vous suffit de :
'   - modifier la constante "Cst_nb_icones"
'   - réordonner les images
 
'Si le nombre d'image dépasse 10, il faut numéroter toutes les images sur 2 caractères et
'partout ou la fonction "right" est appelée, mettre "2" à la place de "1" (ex : Right(im.Name,2))
 
 
'**************************************************************************************************
 
 
Option Compare Database
 
'Constante représentant l'écart entre les icônes
Const Cst_ecart As Integer = 15
 
'Constante représentant la taille maximum lors du zoom
Const Cst_taille_max As Integer = 1500
 
'Constante représentant la taille intermédiaire
Const Cst_taille_intermediaire As Integer = 1000
 
'Constante représentant le déplacement vertical lors du zoom
Const Cst_dplct_vertical As Integer = 80
 
'Constante représentant le facteur de zoom
Const Cst_facteur_zoom As Double = 1.05
 
'Constante représentant le nombre d'icônes
Const Cst_nb_icones As Integer = 8
 
'Constante représentant le préfixe attribué à tout les élément du dock
'Il est déconseillé d'utiliser le préfixe "Image" puisque chaque objet
'image rajouté aura ce préfixe par défaut
Const Cst_prefixe As String = "Image_"
 
'Constante représentant la taille du préfixe en nombre de caractère
Const Cst_taille_prefixe As Integer = 6
 
'Variables de sauvegarde des dimensions des images
Dim Hauteur As Long
Dim Largeur As Long
 
'Variable de sauvegarde du nom de l'image de référence
Dim Nom_reference As String
 
'Variable de sauvegarde de la position de l'image de référence
Dim Position_verticale As Long
Dim Position_horizontale As Long
 
'Dans tous le module, la variable "formulaire" correspond au formulaire sur lequel on veut
'appliquer la fonction. Quand on fait appel aux fonctions dans un formulaire, il suffit
'de mettre "Me" en paramètre
 
 
'*****************************************************************************
'*       Procédure permettant le positionnement horizontal des images        *
'*        Le positionnement se fait par rapport à la première image.         *
'* Il suffit donc de placer correctement la première image sur le formulaire *
'*              pour que les autres se placent correctement.                  *
'*****************************************************************************
 
Private Sub Position_X(formulaire As Form)
    Dim im As Control
    Dim cpt As Integer
    Dim i As Integer
    Dim position(Cst_nb_icones) As Long
 
    'Sauvegarde dans un tableau interne à la fonction des tailles des images.
    'Ceci permet de pouvoir positionner dynamiquement les images.
    'En effet, à chaque fois que l'on appel cette fonction, la tailles des images peut
    'avoir changer, suivant si elles sont zoomées ou non.
    For Each im In formulaire.Controls
 
        'Vérification pour savoir s'il s'agit bien d'un élément du dock
        If Left(im.Name, Cst_taille_prefixe) = Cst_prefixe Then
            position(Right(im.Name, 1)) = im.Width
        End If
    Next
 
    'Calcul de leur position et positionnement
    'Formule de calcul :
    '   position = nombre d'image précédente * écart entre les images
    '              + position de la première image
    '              + somme des largeurs des images précédentes
    For Each im In formulaire.Controls
 
        'Vérification pour savoir s'il s'agit bien d'un élément du dock
        If Left(im.Name, Cst_taille_prefixe) = Cst_prefixe Then
            If im.Name <> Nom_reference Then
                cpt = Right(im.Name, 1)
                im.Left = cpt * Cst_ecart + Position_horizontale
                For i = 0 To cpt - 1
                    im.Left = im.Left + position(i)
                Next i
            End If
            im.SizeMode = acOLESizeZoom
        End If
    Next
End Sub
 
'************************************************
'*     Positionnement verticale des images,     *
'* se base sur la position de la première image *
'************************************************
 
Private Sub Position_Y(formulaire As Form)
    Dim im As Control
    For Each im In formulaire.Controls
 
        'Vérification pour savoir s'il s'agit bien d'un élément du dock
        If Left(im.Name, Cst_taille_prefixe) = Cst_prefixe Then
            im.Top = Position_verticale
        End If
    Next
End Sub
 
'****************************************
'*          Dézoom des images           *
'****************************************
 
Private Sub Dezoom(im As Control)
    With im
        .Width = .Width / Cst_facteur_zoom
        .Height = .Height / Cst_facteur_zoom
        .Top = .Top + Cst_dplct_vertical
    End With
End Sub
 
'*************************************
'*          Zoom des images          *
'*************************************
 
Private Sub Zoom(im As Control)
    With im
        .Width = .Width * Cst_facteur_zoom
        .Height = .Height * Cst_facteur_zoom
        .Top = .Top - Cst_dplct_vertical
    End With
End Sub
 
'**************************************************************
'* Réinitialisation des images sauf les deux qui sont zoomées *
'*            (1 grand zoom + 1 zoom intermédiaire)           *
'*      Sert uniquement pour les images des extrémités        *
'**************************************************************
 
Private Sub Init_Sauf_2(im1 As String, im2 As String, formulaire As Form)
    Dim im As Control
    For Each im In formulaire.Controls
 
        'Vérification pour savoir s'il s'agit bien d'un élément du dock
        If Left(im.Name, Cst_taille_prefixe) = Cst_prefixe Then
            If im.Name <> im1 And im.Name <> im2 Then
                If im.Width > Largeur Then
                    Call Dezoom(im)
                End If
            End If
        End If
    Next
End Sub
 
'***************************************************************
'* Réinitialisation des images sauf les trois qui sont zoomées *
'*            (1 grand zoom + 2 zoom intermédiaire)            *
'*          Sert uniquement pour les images du milieu          *
'***************************************************************
 
Private Sub Init_Sauf_3(im1 As String, im2 As String, im3 As String, formulaire As Form)
    Dim im As Control
    For Each im In formulaire.Controls
 
        'Vérification pour savoir s'il s'agit bien d'un élément du dock
        If Left(im.Name, Cst_taille_prefixe) = Cst_prefixe Then
            If im.Name <> im1 And im.Name <> im2 And im.Name <> im3 Then
                If im.Width > Largeur Then
                    Call Dezoom(im)
                End If
            End If
        End If
    Next
End Sub
 
'*****************************************************************************
'*              Procédure à appeler au chargement du formulaire              *
'* Sert au sauvegarde des paramètre initiaux et au positionnement des images *
'*****************************************************************************
 
'Explication des variables de paramètre :
'   - DL : Dimension Largeur de l'image de référence (.Width)
'   - DH : Dimension Hauteur de l'image de référence (.Height)
'   - PV : Position Verticale de l'image de référence (.Top)
'   - PH : Position Horizontale de l'image de référence (.Left)
'   - Nom_reference : nom de l'image de référence (.Name)
 
Public Sub Form_(DL As Integer, DH As Integer, PV As Long, PH As Long, n As String, formulaire As Form)
    Dim im As Control
    Dim cpt As Integer
 
    'Sauvegarde des informations de l'image de référence
    Largeur = DL
    Hauteur = DH
    Position_verticale = PV
    Position_horizontale = PH
    Nom_reference = n
 
    'Positionnement des images (par rapport à la première image)
    Call Position_Y(formulaire)
    Call Position_X(formulaire)
 
End Sub
 
'*********************************************************************************
'* Procédure à appeler sur "souris déplacer" dans la partie détail du formulaire *
'*           Elle sert à réinitialiser les images (zoom et position)             *
'*********************************************************************************
 
Public Sub Detail(formulaire As Form)
    Dim im As Control
 
    'On dézoom chaque image jusqu'à atteindre sa taille initiale
    For Each im In formulaire.Controls
 
        'Vérification pour savoir s'il s'agit bien d'un élément du dock
        If Left(im.Name, Cst_taille_prefixe) = Cst_prefixe Then
            If im.Width > Largeur Then
                Call Dezoom(im)
            End If
        End If
    Next
 
    'On repositionne les images
    Call Position_X(formulaire)
End Sub
 
'********************************************
'*        Initialisation des images         *
'* A mettre sur "perte focus" du formulaire *
'********************************************
 
Public Sub Focus(formulaire As Form)
    Dim im As Control
 
    'On réinitialise les images à leur taille et positions de départ
    For Each im In formulaire.Controls
 
        'Vérification pour savoir s'il s'agit bien d'un élément du dock
        If Left(im.Name, Cst_taille_prefixe) = Cst_prefixe Then
            im.Width = Largeur
            im.Height = Hauteur
        End If
    Next
    Call Position_Y(formulaire)
    Call Position_X(formulaire)
End Sub
 
 
'***********************************************************************
'*           Procédure effetuant les zooms sur les images.             *
'* A appeler sur "souris déplacée" pour les images de chaque extrémité *
'***********************************************************************
 
'Définition des variables de paramètre :
'   - im1 : image sur laquelle pointe la souris (sur laquelle on appel la procédure)
'   - im2 : image voisine de la précédente (2ème image si on est sur la 1ère,
'           avant dernière image s'il on est sur la dernière
 
Public Sub Image_df(im1 As Control, im2 As Control, formulaire As Form)
    If im1.Width <= Cst_taille_max Then
 
        'Zoom de l'image sur laquelle la souris pointe
        Call Zoom(im1)
 
        'Si l'image voisine est plus petite que la taille intermédiaire on la zoom
        If im2.Width < Cst_taille_intermediaire Then
            Call Zoom(im2)
 
        'Sinon on la dézoom
        Else
            Call Dezoom(im2)
        End If
 
        'On initialise les autres images
        Call Init_Sauf_2(im1.Name, im2.Name, formulaire)
 
        'Repositionnement horizontal des images
        Call Position_X(formulaire)
    End If
    DoEvents
End Sub
 
'*************************************************************
'*       Procédure effetuant les zooms sur les images.       *
'* A appeler sur "souris déplacée" pour les images du milieu *
'*************************************************************
 
'Explication des variables de paramètre :
'   - im1 : image sur laquelle la souris pointe (sur laquelle on appel la procédure)
'   - im2 : image précédent im1
'   - im3 : image suivant im1
 
'Rq : Inverser im2 et im3 et sans importance, je conseil cependant de garder toujours le
'     même ordre pour éviter de se mélanger
 
Public Sub Image_(im1 As Control, im2 As Control, im3 As Control, formulaire As Form)
    If im1.Width <= Cst_taille_max Then
 
        'Zoom de l'image sur laquelle la souris pointe
        Call Zoom(im1)
 
        'Si l'image précédente est plus petite que la taille intermédiaire on la zoom
        If im2.Width < Cst_taille_intermediaire Then
            Call Zoom(im2)
 
        'Sinon on la dézoom
        Else
            Call Dezoom(im2)
        End If
 
        'Si l'image suivante est plus petite que la taille intermédiaire on la zoom
        If im3.Width < Cst_taille_intermediaire Then
            Call Zoom(im3)
 
        'Sinon on la dézoom
        Else
            Call Dezoom(im3)
        End If
 
        'Réinitialisation des autres images
        Call Init_Sauf_3(im2.Name, im1.Name, im3.Name, formulaire)
 
        'Repositionnement horizontal des images
        Call Position_X(formulaire)
    End If
    DoEvents
End Sub
Fichiers attachés
Type de fichier : zip Dock.zip (156,0 Ko, 81 affichages)
rams085 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2007, 13h01   #2
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 924
Points : 30 924
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour,

Je n'ai pas encore éplucher le code, mais graphiquement c'est

Starec
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h36.


 
 
 
 
Partenaires

Hébergement Web