Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015
-
17 juin 2008 à 23:52
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDerniè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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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