Utilisation de module

Sinsitrus Messages postés 849 Date d'inscription samedi 11 juin 2005 Statut Membre Dernière intervention 21 août 2015 - 17 juin 2008 à 23:52
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 18 juin 2008 à 10:04
Salut !

Excusez moi j'aurai besoin d'une aide... bizarre ^o)
Etant donné que je suis obligé de mettre un certain nombre de code dans chacune de mes form et pour cela, mes logiciels sont long (voir 30 forms), j'ai besoin de créer un module comprenant ces codes-ci :

Private Declare Function InitCommonControls Lib "comctl32.dll" () As Long







Private Sub Form_Initialize()

InitCommonControls

End Sub







Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
I_Close2.Visible = False
End Sub

Private Sub I_Close1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
I_Close2.Visible = True
End Sub

Private Sub I_Close2_Click()
Unload Me
End Sub



Et les appeler automatiquement dans mes forms
Pouvez vous m'aider svp a créer le module et m'indiquer comment l'appeler ?

Merci beaucoup !

----------
OS        : Windows XP SP2
Platforme : VB 6.0 + SP6

Ok VB6.0 c'est pas net !

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 juin 2008 à 01:19
Salut
Un module ne permet pas de coder des évènements attachés à des objets externes à lui-même.
Donc, le code que tu as montré ne peut aller que dans une forme puisqu'on trouve dans tes Sub la structure "Form_" qui doit être une forme (fortiche, hein) et "I_Close1_" et 2 qui doivent être, je ne sais pas quoi, des boutons peut-être.

Soit tu colles ce code dans tes 30 formes, soit tu nous dis ce que tu veux faire exactement avec ce code et ce que tu en attends.

"Etant donné que je suis obligé de mettre un certain nombre de code dans chacune de mes form" : Oui, c'est le but de la programmation, en général
"mes logiciels sont long (voir 30 forms)" : Ce n'est pas raisonnable, mais pourquoi pas
"j'ai besoin de créer un module comprenant ces codes-ci" Et là, je ne vois pas le lien ...

Si tu dois avoir 30 formes identiques, le plus simple est d'en fabriquer une, puis d'utiliser un tableau d'objet :
   Dim mesFormes(30) As maFormeOriginale
   Load mesFormes(1)
   mesFormes(1).Caption = "Ma forme 1"

   Load mesFormes(2)
   mesFormes(2).Caption = "Ma forme 2"
   Load mesFormes(3)
   mesFormes(3).Caption = "Ma forme 3"

Sinon, explique clairement ce que tu veux faire

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 juin 2008 à 10:04
salut,

comme le dit Jack ta démarche n'est pas logique.

je vais partir de la supposition suivante :
ton appli, contenant pas mal de forms, est très longue... et tu veux enlever ces 5*30 lignes

c'est clair que çà va tout changer ^^
bref

dans un 1er temps voici comment çà serait possible, et pourquoi çà serait inutile
dans un 2e, proposition pour "comment faire"

1)
tu peux créer une classe qui aura un objet form et image(s) (à supposer ton I_Close2 un contrôle image pour fermer la fenêtre)

dans l'idée çà va donner....

LA CLASSE :

Option Explicit
Private Declare Function InitCommonControls Lib "comctl32.dll" () As Long

Public WithEvents mForm As Form
Public WithEvents mImage1 As Image
Public WithEvents mImage2 As Image
'
'
Private Sub mForm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    mImage2.Visible = False
End Sub
Private Sub mImage1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    mImage2.Visible = True
End Sub
Private Sub mImage2_Click()
    Unload mForm
End Sub
'
'
Private Sub Class_Initialize()
    InitCommonControls
End Sub
Private Sub Class_Terminate()
    Set mImage1 = Nothing
    Set mImage2 = Nothing
    Set mForm = Nothing
End Sub

ensuite tu vas devoir créer une instance de ta classe par form, forcément...

donc dans CHAQUE FORM

Option Explicit
Dim cFrm As New Class1

Private Sub Form_Initialize()
    Set cFrm.mImage1 = I_Close1
    Set cFrm.mImage2 = I_Close2
    Set cFrm.mForm = Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set cFrm = Nothing
End Sub

donc tout çà pour gagner ne gagner aucune ligne et en plus tu auras créé 30 nouveaux objets....
je doute que tes 30 forms soient chargées en même temps mais ici donc le gain est inexistant!

voyons le code en lui-même pour comprendre l'inutilité (en plus du nombre de lignes)

dans le Init tu appelles une API qui n'a besoin d'être appelée qu'une fois en tout, pas par form...

donc il te faut juste un module standard, sub Main, tu gagnes 2 lignes

il reste tes MOVE....
admettons....

2)
pourquoi ne pas faire simplement un usercontrol container qui gèrera seul l'apparence de tes images ?
tu n'auras plus aucune (de ces) ligne de code dans tes form

le move géré par le container, le click par l'image adéquate qu'il contient
et éventuellement le initcommon aussi dans le usercontrol si tu ne veux pas de Main

à peser...
++
0
Rejoignez-nous