Des types perso dans une collection [Résolu]

Signaler
Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
-
Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
-
C'est encore moi avec mes points

je veux gerer des points allors j'ai defini un type Point avec un atribut X et un Y.

Je voulais les ranger dans une collection, apres tout on peut bien y
metre de tout dans une collection, comme des objets bien plus
compliques que mes points.

Et bien non, VB me le refuse sans me dire carrement que c'est pas possible.

est-ce que quelqu'un a deja fait ce genre de manip et quelle sont les condition (en francais) pour que ca marche?

D'avance merci

8 réponses

Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
Non mauvaise methode ....

Crée un module de classe et ajoute ceci :

'ClsPoint.cls
Option Explicit
Public X As long
Public Y As Long

'la tu peux ajouter dans uen collection

Dim Col as New Collection
Dim P as new ClsPoint
P.X = 100
P.Y = 200
Col.Add P

@+


E.B.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
3
Ok, je vais me renseigner sur les modules de classe, je n'en avait pas entendu parler avant.

merci
Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
On fait plein de chose avec les modules de classe

; )

@+


E.B.
Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
3
Ca y est, j'y suis arrive.

juste un petit detail, si tu as 2 minutes.

J'esperait faire des comparaisons directement entre points

comme if P1 = P2 then...

mais seul marche

if P1.X P2.X and P1.Y P2.Y then
c'est que je ne m'y suis toujours pas pris tout a fait comme il faut ou ce n'est vraiment pas possible?
Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
3
Ca a l'air vraiment prometeur ce genre de truc ;o)



Je me suis amuse a ajouter dans le module de classe, juste pour voir :



Public Function z() As Integer

z = X + Y

End Function


et miracle, il me rajoute un argument z qui vaut la somme de x et y.

Je vais aller me coucher moins bete ce soir!



J'imagine qu'il y d'autres possibilites, as tu un tutorial a recomander?



J'ai aussi essaye de remplacer le type RECT dans une API qui renvoie la
zone ecran par une classe RECT pour calculer directement la hauteur en
fonction du haut et du bas mais ca m'a plante VB. je suis peut-etre
encore entrains de rever, il faut que trouve plus d'infos


il faut aussi que j'essaie une sub...
Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
Non tu ne peux pas comparer P1 et P2 comme ceci car si tu fait cela tu compare l'adresse memoire de deux objet et pas leurs valeur de propriete...

If P1.X = P2.X c'est la bonne methode, c'est plus long a ecrire mais c'est la meilleur facon de proceder en plus elle est naturel ce qui facilite la relecture du code

Oui il ne faut pas confondre TYPE et CLASS et surtout ne pas intervertir les deux dans une api sinon c'est le crash assuré tu peux par exemple utiliser un tableau de TYPE

Dim Points(255) As POINTAPI (la c'est un tableau de 256 point)
ou transformer une classe en point

Dim P as POINTAPI
Dim C as New ClsPoint
C.x = 100
C.y = 100

puis quand tu as besoin de l'utiliser dans une api tu converti

P.x = C.x
P.y = C.y

le traitement en vb est plus simple avec les collection donc n'hesite pas a tester effacer recommencer tu te fera ta propre idée sur le systeme et la meilleur faon de l'utiliser

@+


E.B.
Messages postés
261
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
18 mai 2009
3
Comme je suis feneant et tetu et que je veut pouvoir comparer mes points, j'ai ajoute le suivant dans le modul de classe



Public Function equiv(point As ClsPoint) As Boolean

equiv (X point.X And Y = point.Y)

End Function



et



if P1.equiv(P2) then...



remplace le



if P1 = P2 then...

que je voulait.



J'ai l'impression d'etre a la place de l'explorateur qui a decouvert le sommet de la grande pyramide enfouie dans le sable...
Messages postés
4525
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
9
Oui tu as tout a fait raison de develloper des petites fonctions qui te rende la programmation plus simple, ça sert a ça ;-)

@+


E.B.