lispo
Messages postés49Date d'inscriptiondimanche 2 octobre 2005StatutMembreDernière intervention 1 septembre 2008
-
6 juil. 2006 à 19:37
lispo
Messages postés49Date d'inscriptiondimanche 2 octobre 2005StatutMembreDernière intervention 1 septembre 2008
-
8 juil. 2006 à 18:38
Bonjour a tous,
J 'ai crée une classe cercle(Vba AutoCad)
mais je voudrais lui attribuer un evenement(ex: apparition d'un msgbox)
voila comment j'ai fait ma classe
''' Dans mon module Class
Public Event RayonChanger()
Private C_Rayon As Double
Private C_Air As Double
Private C_Centre As Variant
Public Objcercle As AcadCircle
Private Sub Class_Initialize()
C_Rayon = 1
End Sub
Public Property Let Rayon(Valeur As Double)
C_Rayon = Valeur
RaiseEvent RayonChanger
End Property
Public Property Get Rayon() As Double
Rayon = C_Rayon
End Property
Public Property Let Centre(Valeur As Variant)
C_Centre = Valeur
End Property
Public Property Get Centre() As Variant
Centre = C_Centre
End Property
Public Property Get Air() As Double
Air = 2 * 3.14159265358979 * C_Rayon
End Property
Public Property Get Circonference() As Double
Circonference = 3.14159265358979 * (C_Rayon * 2)
End Property
Public Property Get Pos_Centre() As Variant
Pos_Centre = Centre(0) & " / " & Centre(1) & " / " & Centre(2)
End Property
Public Property Get Diametre() As Double
Diametre = 2 * C_Rayon
End Property
Function Draw_Cercle() As Object
Set Objcercle = ThisDrawing.ModelSpace.AddCircle(Centre, Rayon)
Objcercle.Update
End Function
Private Sub cercle1_RayonChanger()
MsgBox "Rayon a changer " & Rayon
End Sub
'Dans un module normale
Private Sub Button1_Click()
Dim cercle1 As New cercle
Me.Hide
With ThisDrawing.Utility
cercle1.Centre = .GetPoint(, " Centre !")
cercle1.Rayon = 50
End With
cercle1.Draw_Cercl
End Sub
-------------------
--------------------
'' Puis j'ai rajouter tout ce qui est en bleu pour mon evenement
mais quand je change de Rayon rien n'apparait.
Si quelqu'un pourrais m'aider ca serais kool
Merci d'avance
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 8 juil. 2006 à 17:53
c'est bien ce que je dis, tu as mal regardé le code...
comment veux-tu recevoir un évènement d'un objet qui n'est pas instancié pour toute la durée de vie de la Form.....
il faut :
Set Cercle1 = New
Cercle
dans le Form_Load ou UserForm_Load (je te rapelle que je n'utile pas VBA...)
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 juil. 2006 à 19:47
Salut
En supopoisant que ta classe s'appelle clsCercle (évite les noms qui pourraient ressembler à des mots clé) :
Dans ton module, il faut créer une instance de cette classe au niveau de la déclaration, pas dans une procédure.
De plus, comme ta classe génère des Events, il faut le spécifier dans la déclaration :
Private WithEvents Cercle1 As ClsCercle
Pour info, un Event peut envoyer aussi des paramètres :
Public Event RayonChanger(ByVal Valeur As Double)
Et dans l'évènement Private Sub cercle1_RayonChanger(ByVal Valeur As Double)
tu pourras utiliser directement la valeur fournie par le RaiseEvent RayonChanger(C_Rayon) dans ton
MsgBox "Rayon a changer " & CStr(Valeur)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 juil. 2006 à 03:15
Re
Un petit peu de reflexion et tu devrais trouver seul ...
Bien sûr, la déclaration de ta classe génératrice d'évènement va dans la partie déclaration de ta forme.
Bien sûr la déclaration de l'évènement est celle qui existe déjà dans ta classe, je n'ai fait que rajouter un paramètre qui sera transmis avec le RaiseEvent.
Le MsgBox, lui, va dans l'évènement ChangerRayon, là où tu l'avais déjà mis. La seule différence, c'est qu'il affichera une donnée qui lui ait fournie par l'évènement (donc qui vient de ta classe) et pas la valeur 'Rayon' qui n'existe que dans ta forme.
Si tu ne comprends pas, laisse tomber. Contente toi de mettre la déclaration de ton instance de classe dans la partie déclaration de ta forme, ça suffira pour faire délencher l'évènement par le RaiseEvent.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
Vous n’avez pas trouvé la réponse que vous recherchez ?
lispo
Messages postés49Date d'inscriptiondimanche 2 octobre 2005StatutMembreDernière intervention 1 septembre 2008 7 juil. 2006 à 10:29
Re-bonjour,
Je suis désoler de te faire perdre ton temps(Jack), mais ce qui parait a toi chose facile, parait a moi etre un gouffre
voila j'ai fais les modification mais toujour pas d'evenement,il ne bloque pas, mais pas de msgbox quand je change le rayon du cercle!
ça serais vraiment genial si tu pouvais m'aider
merci encore.
''Donc dans mon module de clase
Public Event RayonChanger(ByVal Valeur As Double)
Private C_Rayon As Double
Private C_Air As Double
Private C_Centre As Variant
Public Objcercle As AcadCircle
Private Sub Class_Initialize()
C_Rayon = 1
End Sub
Public Property Let Rayon(Valeur As Double)
C_Rayon = Valeur
RaiseEvent RayonChanger(C_Rayon)
End Property
Public Property Get Rayon() As Double
Rayon = C_Rayon
End Property
Public Property Let Centre(Valeur As Variant)
C_Centre = Valeur
End Property
Public Property Get Centre() As Variant
Centre = C_Centre
End Property
Public Property Get Air() As Double
Air = 2 * 3.14159265358979 * C_Rayon
End Property
Public Property Get Circonference() As Double
Circonference = 3.14159265358979 * (C_Rayon * 2)
End Property
Public Property Get Pos_Centre() As Variant
Pos_Centre = Centre(0) & " / " & Centre(1) & " / " & Centre(2)
End Property
Public Property Get Diametre() As Double
Diametre = 2 * C_Rayon
End Property
Function Draw_Cercle() As Object
Set Objcercle = ThisDrawing.ModelSpace.AddCircle(Centre, Rayon)
Objcercle.Update
End Function
Private Sub cercle1_RayonChanger()
MsgBox "Rayon a changer " & CStr(Valeur)
End Sub
'---------------------------------------------------------
' et dans ma Form
Private WithEvents Cercle1 As cercle
Private Sub UserForm_Click()
Dim Cercle1 As New cercle
Me.Hide
With ThisDrawing.Utility
Cercle1.Centre = .GetPoint(, " Centre !")
Cercle1.Rayon = 50
End With
Cercle1.Draw_Cercle
End Sub
PCPT
Messages postés13280Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 7 juil. 2006 à 12:15
salut,
' dans le module de classe (nommé ici "Class1")
'
Private C_Rayon As Double
Private C_Air As Double
Private C_Centre As Variant
Public Objcercle As New AcadCircle
Public Event RayonChanger(ByVal Valeur As Double)
Private Sub Class_Initialize()
C_Rayon = 1
End Sub
Private Sub Class_Terminate()
Set Objcercle = Nothing
End Sub
Public Property Let Rayon(Valeur As Double)
C_Rayon = Valeur
RaiseEvent RayonChanger(C_Rayon)
End Property
Public Property Get Rayon() As Double
Rayon = C_Rayon
End Property
Public Property Let Centre(Valeur As Variant)
C_Centre = Valeur
End Property
Public Property Get Centre() As Variant
Centre = C_Centre
End Property
Public Property Get Air() As Double
Air = 2 * 3.14159265358979 * C_Rayon
End Property
Public Property Get Circonference() As Double
Circonference = 3.14159265358979 * (C_Rayon * 2)
End Property
Public Property Get Pos_Centre() As Variant
Pos_Centre = Centre(0) & " / " & Centre(1) & " / " & Centre(2)
End Property
Public Property Get Diametre() As Double
Diametre = 2 * C_Rayon
End Property
Function Draw_Cercle() As Object
Set Objcercle = ThisDrawing.ModelSpace.AddCircle(Centre, Rayon)
Objcercle.Update
End Function
' dans la form (nommée Form1, exemple en VB6, pas VBA....)
'
Private WithEvents Cercle1 As Class1
Private Sub Form_Click()
Me.Hide
With ThisDrawing.Utility
Cercle1.Centre = .GetPoint(, " Centre !")
Cercle1.Rayon = 50
End With
Cercle1.Draw_Cercle
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Cercle1 = Nothing
End Sub
Private Sub cercle1_RayonChanger(ByVal Valeur As Double)
MsgBox "Rayon a changer " & CStr (Valeur)
End Sub
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 juil. 2006 à 12:53
Re
PCT a été plus rapide et plus complet dans la réponse.
"Module" : Comme c'est sous VBA, des fois les termes changent par rapport à VB6, c'est pourquoi je n'avait pas relevé ce détail.
Lispo : Tes corrections sont correctes.
Il faut en effet juste vérifier que :
La déclaration Private WithEvents Cercle1 As Class1
soit bien dans une Forme
ET que la déclaration Private Sub cercle1_RayonChanger(ByVal Valeur As Double)
soit elle aussi dans la Forme
ET que sa syntaxe reflète bien la déclaration (avec le/les paramètres)
Si le terme Module en VBA est le même que sous VB6, tu ne peux pas générer d'evènement à partir d'un module mais uniquement à partir d'un Objet
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
lispo
Messages postés49Date d'inscriptiondimanche 2 octobre 2005StatutMembreDernière intervention 1 septembre 2008 7 juil. 2006 à 15:38
Re-Bonjour,
Aujourd 'hui je suis accrocheur,j'ai refait toutes les modifications .
mais!( il y a toujour un mais) il beug
il beug sur ma Form le msg d'erreur dit run-time error 91 - Object Variable or With block variable not set
Voila le contenu de ma Form
Private WithEvents Cercle1 as cercle
Private Sub UserForm_Click()
Me.Hide
With ThisDrawing.Utility
Cercle1.Centre = .GetPoint(, " Centre !")
Cercle1.Rayon = 50
End With
Cercle1.Draw_Cercle
End Sub
Private Sub cercle1_RayonChanger(ByVal Valeur As Double)
''MsgBox "rayon a changer " & CStr(Valeur)
End Sub
lispo
Messages postés49Date d'inscriptiondimanche 2 octobre 2005StatutMembreDernière intervention 1 septembre 2008 8 juil. 2006 à 17:37
Salut,
Le probleme est que si je ne met pas le (Dim Cercle1 As New Cercle ) il beug et quand je le met il y a rien qui se fasse "il dessine le cercle mais pas de msgbox"
Private WithEvents Cercle1 As
Cercle
Private Sub Form_Click()
Me.Hide
Dim Cercle1 As New Cercle
With ThisDrawing.Utility
Cercle1.Centre = .GetPoint(, " Centre !")
Cercle1.Rayon = 50
End With
Cercle1.Draw_Cercle
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Cercle1 = Nothing
End Sub
Private Sub cercle1_RayonChanger(ByVal Valeur As Double)