Problème de variables qui pointent sur un objet

pius1985 Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 15 juin 2004 - 27 mai 2004 à 15:37
pius1985 Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 15 juin 2004 - 28 mai 2004 à 08:00
Bonjour,
J'ai un petit problème de variables: J'ai un programme qui gère des frames dans une fenêtre, avec la possibilité de les déplacer (je le mettrai peut etre sur VbFrance, c'est sympa). Seulement apres le déplacement je dois récupérer les propriétés de la frame, car la frame n'est pas visible pdt le déplacement, mais seulement une autre avec juste un cadre (sinon c'est trop lent à afficher). Donc pendant le déplacement de ma frame j'affiche mon cadre avec les propriétés de ma frame puis une fois le bouton de la souris laché je réaffiche ma frame avec les nouvelles coordonnées.

J'ai donc un code qui ressemble à ceci :

Dim frame_a_déplacer as variant
...
Sub initDéplacement(frm as Frame)
frame_a_déplacer=frm
End sub

Sub déplace()
'On ajuste frm_cadre en fonction des coordonnées de la souris
End sub

Sub finDéplace()
'Ici on doit rafficher la frame initiale avec les coordonnées de frm_cadre
frame_a_deplacer.left=frm_cadre.left
frame_a_deplacer.top=frm_cadre.top
End sub

Seulement dans finDéplace() il ne veut pas affecter les valeurs pour .left... Connaissez vous une solution à ce problème? Sachant que je ne peux pas différencier chaque frame (si c'est frame1 alors on rétablit frame1...) car je risque d'en avoir beaucoup et je veux faire un truc assez universel.
Merci d'avance
Alexandre

8 réponses

cs_starfighter Messages postés 90 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 28 février 2005
27 mai 2004 à 16:16
et si tu utilisait un tableau de frame, ca donnerais cela :

Frame(0) à Frame(5) par exemple Frame(0) serais la frame qui se déplace

Dim IndexFrameSelected as long
...
Sub initDéplacement(Index as long)
IndexFrameSelected = Index
End sub

Sub déplace()
'On ajuste Frame(0) en fonction des coordonnées de la souris
End sub

Sub finDéplace()
'Ici on doit rafficher la frame initiale avec les coordonnées de Frame(0)
Frame(IndexFrameSelected).left=Frame(0).left
Frame(IndexFrameSelected).top=Frame(0).top
Refresh 'Vérifie si cette ligne peut être supprimer (Raffraichi la form)
End sub

Voila, dis moi si ca fonctionne
0
pinje Messages postés 129 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 24 août 2006
27 mai 2004 à 16:19
Essaye:

Private Sub finDéplace(frame_a_deplacer As Frame)
'Ici on doit rafficher la frame initiale avec les coordonnées de frm_cadre
frame_a_deplacer.Left = frm_cadre.Left
frame_a_deplacer.Top = frm_cadre.Top
End Sub

et ensuite dans ton prog, tu appelles ta sub comme ca:

call finDéplace(Nom de ta frame)
0
pius1985 Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 15 juin 2004
27 mai 2004 à 18:37
Ben non je peux pas avec vos solutions car je ne connais pas la frame en question au moment de l'appel de FinDéplace je la stocke juste dans la variable "frame_a_deplacer"

Merci qd meme c sympa de votre part ;-)

Alex
0
cs_starfighter Messages postés 90 Date d'inscription mardi 18 mars 2003 Statut Membre Dernière intervention 28 février 2005
27 mai 2004 à 19:56
Je ne comprend non plus ton resonement, quand tu utilise initDéplacement tu connais forcement la frame donc en utilisant un tableau de Frame sa doit fonctionner, en faites je n'ai pas changer ton algorithme mais simplement changer l'utilisation d'un objet (les frames) par un index d'objet
0

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

Posez votre question
pius1985 Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 15 juin 2004
27 mai 2004 à 20:44
Oui mais mon but c'est de faire un truc universel et modulable on doit pouvoir ajouter des frames sans pour autant changer de trop le code source donc dans initDéplacement je sauvegarde la frame en cours de déplacement et dans FinDéplacement je dois rétablir la frame sauvegardée sauf que ma variable n'accepte pas les .left ou .quoi que ce soit... Pourtant elle a l'air bien affectée puisque dans un test ds une messagebox ca l'affiche...
Merci de votre dévouement
Alex
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
27 mai 2004 à 22:01
Je vois deux soucis dans ton code ! Une amélioration possible et une erreur :
L'amélioration : Pourquoi déclarer la var Frame_a_deplacer en Variant, j'aurai mis "As Frane"
L'erreur : Tuas une erreur dans Init_déplacement ! Pour affecter une valeur à une variable de type objet, il faut mettre un Set devant : Donc "Set Frame_a_deplacer = frm". En y pensant, ton code devait fonctionner car Frame_a_deplacer etait Variant et non de type Frame.
soit dit en passant, Un variant n'a a priori pas de propriété Left, alors qu'un Frame, OUI ! Donc en remplacant le Variant par un Frame, cela devrait être OK

Christophe R.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
27 mai 2004 à 22:03
PS : Ormis ces deux points, ta méthode de travail est très bien vu ! C'est à mon avis le meilleur moyen de faire ce que tu veux faire. En plus en remplacant les As Frame par des As Control, ton code permettrait presque de déplacer n'importe quel controle sur une Form !! Ca c'est du code efficace

Christophe R.
0
pius1985 Messages postés 8 Date d'inscription mardi 13 avril 2004 Statut Membre Dernière intervention 15 juin 2004
28 mai 2004 à 08:00
Ok merci bien je vais essayer comme ca c'est vrai ca devrait marcher j'avais déja essayé avec un type frame mais j'avais pas mis de Set devant donc ca ne marchait pas lors de l'affectation en tous cas merci pour tes commentaires c sympa...

Alex
0
Rejoignez-nous