Passage d'une collection en argument

cs_mb95 Messages postés 40 Date d'inscription lundi 1 décembre 2003 Statut Membre Dernière intervention 30 septembre 2012 - 6 sept. 2004 à 21:41
cs_mb95 Messages postés 40 Date d'inscription lundi 1 décembre 2003 Statut Membre Dernière intervention 30 septembre 2012 - 9 sept. 2004 à 23:01
bonsoir !

J'ai un probleme avec un passage d'arguments. Le programme
contient 3 collections de shape
shape1(index de 0 a 6).
shape2 (index de 0 a 6).
shape3 (index de 0 a 6).

une sous routine
private sub affichage(shp as collection, mastring as string)

et j'essaye (peniblement) dans le prog d'appeler

call affichage(shape1, "0101011")

ça marche pas, j'ai essayé aussi shp as shape mais
je suis obligé de donner la collection et un index

je pourrai faire differemment mais c'est pas la premiere fois
que je me heurte au pb.

merci à ceux qui auraient une idée !

10 réponses

cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
7 sept. 2004 à 07:56
Tu travail avec quel vb ? VB.NET ou VB6 ou autre ?
Si c un controle Shape alors c'est normal que ça ne
marche pas Shape n'est pas une collection

et que fait ta routine ?
a quel moment cela ne marche pas ?

@+

E.B.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
7 sept. 2004 à 09:09
Essaie ca plutot, car comme EBArtSoft te l a dit, dans ton exemple on ne doit pas parler de collection mais de matrice.

Si tu est en VB6:

Change :
private sub affichage(shp as collection, mastring as string)

Par

private sub affichage(shp() as Shape, mastring as string)

Si tout va bien ca devrait fonctionner

-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
cs_mb95 Messages postés 40 Date d'inscription lundi 1 décembre 2003 Statut Membre Dernière intervention 30 septembre 2012
7 sept. 2004 à 21:18
bonsoir!

merci de ton aide, je suis tellement dans pb que j'ai ete chiche sur les renseignements et comme je manque de carrure j'ai
peut etre rate un renseignement utile.
je suis sous vb6 et le code s'articule comme ça

Public Sub AfficheDes(Shp() As Shape, StrAffiche As String)

Dim BytPoint As Byte


For BytPoint = 1 To 7
If (Mid(StrAffiche, BytPoint, 1) = "1") Then
Shp(BytPoint - 1).Visible = True
Else
ShpPoint1(BytPoint - 1).Visible = False
End If
Next
DoEvents
End Sub

Private Sub Command1_Click()


Dim i As Byte

Randomize
LblTirage(i).Caption = CByte((Rnd * 5) + 1)

If LblTirage(1).Caption = "1" Then
Call AfficheDes(ShpPoint1(), "0001000")
ElseIf LblTirage(1).Caption = "2" Then
Call AfficheDes(ShpPoint1(), "1000001")
ElseIf LblTirage(1).Caption = "3" Then
Call AfficheDes(ShpPoint1(), "1001001")
ElseIf LblTirage(1).Caption = "4" Then
Call AfficheDes(ShpPoint1(), "1010101")
ElseIf LblTirage(1).Caption = "5" Then
Call AfficheDes(ShpPoint1(), "1011101")
ElseIf LblTirage(1).Caption = "6" Then
Call AfficheDes(ShpPoint1(), "1110111")
End If
End Sub

AffiheDes gere les points d'affichage d'une face de dé et
commande1_click gere le dé .

dans le cas du code au dessus vb bloque sur ShpPoint1()
avec le message
Incompatibilite de type, tableau ou type defini par l'utilisateur
attendu.

Si tu vois pourquoi ça coince !!

a++++
0
cs_mb95 Messages postés 40 Date d'inscription lundi 1 décembre 2003 Statut Membre Dernière intervention 30 septembre 2012
7 sept. 2004 à 21:28
Bonsoir jrivet !

merci pour ta proposition de solution!

j'ai essayé de la mettre en place dans la reponse que jai fait
à EBArtsoft et ça ne marche pas.
Peut etre l'ai je mal codé. Si ce bout de code te permet de voir
une solution

merci de ton aide

a++++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 sept. 2004 à 09:32
Salut et desole pour le retard ;)

y a deux truc que je comrend pas dans ce bout la :

Dim BytPoint As Byte

For BytPoint = 1 To 7
If (Mid(StrAffiche, BytPoint, 1) = "1") Then
Shp(BytPoint - 1).Visible = True
Else
ShpPoint1(BytPoint - 1).Visible = False
End If
Next
DoEvents
End Sub

'Pourquoi utilises tu un tipe Byte et non pas integer
car dans la ligne: Shp(BytPoint - 1).Visible = True

j suis pas sur que ca marche

encuite si dans une ligne tu as

Shp(BytPoint - 1).Visible = True

dans la suivante ou tu met .visible = false
tu devrais avoir le meme nom de shape a savoir Shp et ShpPoint1

Voila,

ces deux trucs la me tracasse, essaie de les change, et sinon renvoie un message ;)

@+

Julien
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
cs_mb95 Messages postés 40 Date d'inscription lundi 1 décembre 2003 Statut Membre Dernière intervention 30 septembre 2012
8 sept. 2004 à 23:12
bonsoir !

Pour les deux points bizarres
Jai utilisé byte (alors que l'example que j'ai lu donnait integer)
car candidement n'utilisant que 0 à 7 byte me semblait suffisant
j'essaye toujours de coder le moins lourd possible et c'est la valeur qui stocke sur le moins d'octets. J' ai retesté ça marche correctement (jusqu'a maintenant).Je pensais pas faire une erreur( tant qu'il n y a pas de depacement de variable )
en quoi integer est il preferable ?

Pour Shp(BytPoint - 1).Visible = True et
ShpPoint1(BytPoint - 1).Visible = False
Tu as entierement raison c'etait un copier /coller raté
c'est Shp(BytPoint - 1). que je voulais mettre.

cependant le prog plante dès
Call AfficheDes(ShpPoint1(), "0001000") en surlignant
(ShpPoint1() avec" incompatibilité de type"
j'ai contourné le probleme de façon satisfaisante donc je ne suis pas coincé, c'est plus le manque de comprehension de vb6 qui
m'irrite (mais je progresse alors je m'accroche, c'est si bon quand ça marche)

tant que tu as le temps de m'aider

merci

a++
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
9 sept. 2004 à 09:31
Salut,

ShpPoint1() est elle bien une Matrice de Shape

attend j vais essayer ton prog sur mon PC

-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
9 sept. 2004 à 10:07
A y est j ai trouve...

En fait il faut que tu te construise ta propre matrice de shape en y mettant chaque shape du form (c est de la merde de faire ca je te l accorde mais ca marche).

J ai essaye en changeant le type Shp() as shape en Shp() as Object mais ca plante pareil si on lui passe direectement en parametre la matrice creee par VB.

En fait il faut faire comme suis:

Private Sub Command1_Click()

Dim i As Byte '
Dim index As Integer
Dim shapeAux(0 To 6) As Shape
For index = 0 To 6
Set shapeAux(index) = ShpPoint1(index)
Next
'Me.ShpPoint1
'Randomized
Lbltirage.Caption = CByte((Rnd * 5) + 1)

If Lbltirage.Caption = "1" Then
Call AfficheDes(shapeAux, "0001000")
ElseIf Lbltirage.Caption = "2" Then
Call AfficheDes(shapeAux, "1000001")
ElseIf Lbltirage.Caption = "3" Then
Call AfficheDes(shapeAux, "1001001")
ElseIf Lbltirage.Caption = "4" Then
Call AfficheDes(shapeAux, "1010101")
ElseIf Lbltirage.Caption = "5" Then
Call AfficheDes(shapeAux, "1011101")
ElseIf Lbltirage.Caption = "6" Then
Call AfficheDes(shapeAux, "1110111")
End If
End Sub

Voila,

j espere que ca a pu t aider

@+
Julien
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
9 sept. 2004 à 10:08
Re.. j allais oublie..

Le Randomized il sert a coi?

Moi il me fait planter le prog alors je l ai commenter
-------------------------------------------------
Essai ca sinon on trouvera autre chose
-------------------------------------------------

:big)
0
cs_mb95 Messages postés 40 Date d'inscription lundi 1 décembre 2003 Statut Membre Dernière intervention 30 septembre 2012
9 sept. 2004 à 23:01
Bonsoir !

Alors la........... nickel !
c'est la premiere fois que je code ma propre matrice shape
dans un prog ,mais ça decoiffe !
c'est exactement ce qu'il me fallait.

merci pour tout

Desolé pour la faute de frappe c'est randomize et non
randomized!!!!!

a+
0
Rejoignez-nous