pius1985
Messages postés8Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention15 juin 2004
-
27 mai 2004 à 15:37
pius1985
Messages postés8Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention15 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
cs_starfighter
Messages postés90Date d'inscriptionmardi 18 mars 2003StatutMembreDernière intervention28 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
pinje
Messages postés129Date d'inscriptionvendredi 25 juillet 2003StatutMembreDernière intervention24 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:
pius1985
Messages postés8Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention15 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"
cs_starfighter
Messages postés90Date d'inscriptionmardi 18 mars 2003StatutMembreDernière intervention28 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
pius1985
Messages postés8Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention15 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
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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
pius1985
Messages postés8Date d'inscriptionmardi 13 avril 2004StatutMembreDernière intervention15 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...