Controles creation dynamique d'une form à l'autre [Résolu]

Signaler
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
-
Bonjour à tous

Je suis arrivé à faire une copie dynamique de boutons, grace à MPI et son génial code.

Private Sub BoutonInstruction_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)



 CurX = X
 CurY = Y
 PositionDepartX = BoutonInstruction(Index).Left
 PositionDepartY = BoutonInstruction(Index).Top
 
End Sub



Private Sub BoutonInstruction_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)



 If Button = 1 Then
 
  BoutonInstruction(Index).Move BoutonInstruction(Index).Left + (X - CurX), BoutonInstruction(Index).Top + (Y - CurY)
 
  If Int(BoutonInstruction(Index).Left + (X - CurX) - BoutonInstruction(Index).Top + (Y - CurY)) > 1000 Then
 
  End If
 
 End If
 
End Sub



Private Sub BoutonInstruction_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)



 Load Programme.BoutonInstruction(BoutonInstruction.Count)
 
 With BoutonInstruction(BoutonInstruction.Count - 1)
  .Left = BoutonInstruction(Index).Left
  .Top = BoutonInstruction(Index).Top
  .Width = BoutonInstruction(Index).Width
  .Height = BoutonInstruction(Index).Height
  .Caption = BoutonInstruction(Index).Caption
  .BackColor = BoutonInstruction(Index).BackColor
  .Visible = True
 End With
 
 BoutonInstruction(Index).Left = PositionDepartX
 BoutonInstruction(Index).Top = PositionDepartY
   
End Sub



Je voudrais en faire de meme pour un TextBox, un comboBox, un label et un listBox

Ma premiere question est :

Suis-je obligé de recopier ce code pour CHACUN des controles ou y a t'il une combine pour passer les controles en variablex et utiliser le meme code, puisque c'est la meme chose que je veux faire avec chaque controle ?

Ma seconde question est :

Peut on faire glisser ces controles d'une form à une autre ?

Je vous remercie de votre aide
Bonne journée

13 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Tu pourrais éventuellement te créer un UserControl avec le Combobox dessus. Et tu lui ajoute les événements manquants... du plaisir en perspective ...

MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Tu peux toujours te créer une Sub de création de contrôles dans laquelle tu passes en paramètre ce que dont tu auras besoin... Nom de la Form, type de contrôle, positions éventuellement, texte, couleur,.... tout ce dont tu auras besoin. Si dans certains cas, certaines options (paramètres) ne sont pas nécessaires, tu les mets à la fin de la liste des paramètres avec le mot-clé "Optional", ce qui permet de ne pas en tenir compte s'il est vide.

ex:
Sub MaSub(Nom As String, LeType As String, Optional Gauche As Single)
Dès qu'il y a le mot Optional pour un paramètre, tous les autres paramètres à droite de celui-ci doivent être Optional.

Par contre, si tu crées des boutons uniquement, tu sauras aisément où tu dois les afficher par rapport aux autres. Si ta Sub permet de créer différents types de contrôles, tu auras peut-être plus de difficultés à définir où placer tel ou tel type de contrôle et comment le configurer... Mais bon, c'est toi qui fais ce programme et toi seul, pour l'instant, sais ce qui doit y être fait.

MPi
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Mais le probleme c'est que l'appel MouseDown se fait selon le controle sur lequel on a cliqué.
Pour pouvoir appeler une procedure avec variables, il faudrait faire un hook, souris pour recuperer l'evenement MouseDown ou que ce soit que l'on clique et gérer l'evenement selon le controle sur lequel on a cliqué, non ????
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Si tu utilises la méthode LOAD pour créer de nouveaux contrôles, c'est donc dire que tu as préalablement créé au moins UN contrôle de chaque type avec un Index à 0. Donc, les événements MouseUp, MouseDown,... sont déjà existants ... s'ils les possèdent, bien sûr.

Je ne vois donc pas le problème. Ou je ne saisis pas bien ta question (?)

MPi
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Ce que je veux dire c'est que code de déplacement et creation des controles que j'ai mis en bleu au debut du POST, je suis obligé de le réécrire par exemple pour l'evenement sur le label

Private Sub LabelTitre_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

Puis pour le combo , le textbox etc ....

Car quand je clic sur le label, ou les autre controles qui ne sont pas de meme type, evidement il n'y a pas de reaction dans l'evenement BoutonInstruction que ce soit mousedown, mouseup, ou mousemove


Donc il faudrais créer 3 procedures comme tu me l'a conseillé au dessus et leur passer le type d'objet qui a été cliqué, ai-je bien compris


Un peu du style :



Private Sub BoutonInstruction_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  MonMouseDown(Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub BoutonInstruction_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 
  MonMouseMove(Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub BoutonInstruction_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 
 MonMouseUp (Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub Label_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  MonMouseDown(Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub Label_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 
  MonMouseMove(Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub Label_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 
 MonMouseUp (Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub ComboBox_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  MonMouseDown(Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub ComboBox_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 
  MonMouseMove(Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub ComboBox_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 
 MonMouseUp (Nom As String, LeType As String, Optional Gauche As Single)
End Sub 

Private Sub  MonMouseDown(Nom As String, LeType As String, Optional Gauche As Single)

 'Code de ce qui concerne le MouseDown pour n'importe quel controle

End Sub




Private Sub  MonMouseMove(Nom As String, LeType As String, Optional Gauche As Single)
 'Code de ce qui concerne le MouseMove pour n'importe quel controle
End Sub

Private Sub  MonMouseUp(Nom As String, LeType As String, Optional Gauche As Single)
 'Code de ce qui concerne le MouseUp pour n'importe quel controle
End Sub


J'espere que tu m'a compris car je reconnais que c'est vraiment pas facile à expliquer
Merci de ta patience
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
C'est bien comme ça que je vois la chose... en y ajoutant tous les paramètres nécessaires, dont le contrôle et son Index, ainsi que tous les paramètres déjà existant dans MouseDown et les autres, soient les X et Y, le Button,... et autres au besoin

Donc, plutôt que Nom As String, ce pourrait être Ctl As Control

MPi
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Impecable, je te remercie bien de tous tes precieux conseils.
J'ai fait tout comme tu m'a dit et ça fonctionne nickel


Et pour passer d'une form a une autre, c'est possible ???




 
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Je pense qu'en spécifiant le nom de la Form sur lequel est le contrôle, ça devrait fonctionner. Ce serait donc un autre paramètre à rajouter à tes fonctions...
...(Frm As Form....)

MPi
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Merci j'essaierais, je voulais savoir si j'avais une chance que ça marche .....avec deux forms

J'ai encore une question, avec une seule form ça marche pour tous les controles sauf pour le combo
Quand je clic dessus, il prend le focus, le curseur se met dedans mais j'arrive pas à le déplacer ....

T'aurais pas une idée dans ta hotte de magicien....
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Je viens de m'appercevoir que l'evenement mousemove n'existe pas pour un combo ...
Aie aie aie comment je vais faire pour le déplacer ce bourrin ....
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Merci de ta reponse
Apparement ça n'a pas l'air tres simple a voir comme tu me le dit

Tu va rire (enfin j'suis pas sur) mais je ne sais meme pas ce que c'est qu'un usercontrol.

Je vais chercher dans le forum.

Encore merci de ta patience et de ta gentille aide
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Dans le menu Projet de VB, tu fais "Ajouter un UserControl" qui est une base sur laquelle tu peux insérer des contrôles. C'est un conteneur, un peu comme une feuille.

Dans le menu "Add-Ins" (qui doit être en français Composants ou Ajout de Composants) tu as un utilitaire pour créer des UserControls (ou contrôles ActiveX) que tu peux activer. Il te tient par la main jusqu'à ce que tu aies terminé. Tu peux donc ajouter ou enlever des propriétés ou méthodes par simples clicks. Une fois terminé, tu n'as qu'à faire le ménage du superflu.

MPi
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Merci  bien de ton aide, je vais regardé ça