OVH Cloud OVH Cloud

Drag And Drop et Boite à Outils

3 réponses
Avatar
West972
Bonjours tt le monde,j'ai un probleme d'ou je ne vois pas la fin....
j'aimerais realiser une boite à outil comme sur VB mais je n'arrive pas à
gerer le Drag And Drop entre 2 feuilles.Quelqu'un a t'il déjà eu ce probleme
et trouvé une solution,car je seche la dessus
D'avance merci.

3 réponses

Avatar
Thierry Bertrand
A priori il n'y a pas de possibilité de drag and drop entre deux feuilles.
VB ne le fait pas.
J'ai fait ce genre de truc: Une feuille d'outils et une feuille de design:
La feuille d'outil permet de sélectionner l'outil. Il n'y a pas de drag and
drop dans la feuille de design. Par contre ensuite je dessine dans la
feuille de design un rectangle dimentionnable qui se transforme en objet une
fois le bouton de souris relaché. Cet objet peut ensuite être draggé droppé
dans la fenêtre de design.
VB fait la même chose ...
Avatar
West972
Merci d'avoir pris le temps de me répondre :)


peux tu poster un exemple de code réalisant ce que tu as décri.
Merci
Avatar
Thierry Bertrand
Comme je ne vais pas t'nevoyer le source complet d'un logiciel, je vais
essayer de t'envoyer des morceaux compréhensibles:

L'appli gère 3 fenêtres MDI:
frmCMD qui contient les outils sous forme indexées (pictures box)
frmProperty qui contient des boites de saisies et des combo qui permettent
de définir les propriétés de l'occurence de l'outil qu'on utilise
frmDefine qui est la fenêtre de design. Elle contient des objets types
indexés (depuis 0) tels que boite de siaisie, image, etc...

Le principe:
On sélectionne un outil en cliquant sur l'image correspondant dans la
fenêtre frmCMD.
on dessine un rectangle dans la fenêtre de design pour délimiter les
coordonnées et la taille pris par l'occurence d'outil qu'on utilise à l'aide
de la souris (enfoncer bouton gauche, déplacement, relachement bouton)
La fenêtre est entièrement remplie par un objet image de nom pctPict
Une fois l'objet positionné, la fenetre de propriété devient visible pour
indiquer les caratéristiques spécifiques de l'objet.
La variable gbAction définie le type d'outil qu'on est en train d'utiliser

=============== Choix de l'outil ============ Private Sub cmd_Click(Index As Integer)
gbAction = Index
cmd(OldCmd).Appearance = 0
cmd(OldCmd).BorderStyle = 0
cmd(OldCmd).BackColor = &H80000004
cmd(Index).Appearance = 1
cmd(Index).BorderStyle = 1
OldCmd = Index
Select Case Index
Case 0: frmDefine.MousePointer = vbArrow
Case 1, 2, 3, 4, 5, 6: frmDefine.MousePointer = vbCrosshair
Case Else: frmDefine.MousePointer = vbDefault
End Select
frmProperty.Hide
End Sub
========================================
=============== dessin de l'obet en cours de design ===================== Private Sub pctPict_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim I As Integer

If gbAction = ActionSelect Then
For I = 1 To PictShape.UBound
If (X > PictShape(I).Left And _
X < PictShape(I).Left + PictShape(I).Width And _
Y > PictShape(I).Top And _
Y < PictShape(I).Top + PictShape(I).Height And _
PictShape(I).Visible) Then
PictShape_MouseDown I, Button, Shift, X -
PictShape(I).Left, Y - PictShape(I).Top
Exit Sub
End If
Next I
End If
If gbAction <> ActionSelect Then
gbFrm_X = X
gbFrm_Y = Y
gbFrm_OldX = X
gbFrm_OldY = Y
gbFrm_DefineZone = True
Exit Sub
End If
gbAction = ActionSelect
ValideSaisie
End Sub

Private Sub pctpict_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Container_MouseMove pctPict, Button, Shift, X, Y
End Sub

Private Sub pctpict_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim I As Integer

If gbAction = ActionSelect Then
For I = 1 To PictShape.UBound
If (X > PictShape(I).Left And _
X < PictShape(I).Left + PictShape(I).Width And _
Y > PictShape(I).Top And _
Y < PictShape(I).Top + PictShape(I).Height) Then
PictShape_MouseUp I, Button, Shift, X - PictShape(I).Left,
Y - PictShape(I).Top
Exit Sub
End If
Next I
End If
Container_MouseUp pctPict, lblDatas, Button, Shift, X, Y
End Sub



Private Sub Container_MouseMove(Obj As Object, Button As Integer, Shift As
Integer, X As Single, Y As Single)
If gbFrm_DefineZone Then
Obj.Line (gbFrm_X, gbFrm_Y)-(gbFrm_OldX, gbFrm_OldY), Obj.BackColor,
B
Obj.Line (gbFrm_X, gbFrm_Y)-(X, Y), , B
gbFrm_OldX = X
gbFrm_OldY = Y
End If
End Sub

Private Sub Container_MouseUp(Parent As Object, Obj As Object, Button As
Integer, Shift As Integer, X As Single, Y As Single)
Dim Left As Single
Dim Top As Single
Dim Width As Single
Dim Height As Single
Dim LFichier As String

If gbFrm_DefineZone Then
Parent.Line (gbFrm_X, gbFrm_Y)-(X, Y), Parent.BackColor, B
gbFrm_DefineZone = False
If X > gbFrm_X Then
Left = gbFrm_X
Else
Left = X
End If
If Y > gbFrm_Y Then
Top = gbFrm_Y
Else
Top = Y
End If
Width = Abs(X - gbFrm_X)
Height = Abs(Y - gbFrm_Y)
If gbAction = ActionAddStatic _
Or gbAction = ActionAddText Then
' ajout d'un objet de type label ou text
End If
If gbAction = ActionAddTableau Then
' ajout d'un objet de type tableau
End If
If gbAction = ActionAddImage Then
' ajort d'un objet image
End If
If gbAction = ActionAddShape Then
AddShape Left, Top, Width, Height, 0, 0, 1, 1, 0
End If
' etc ...
End If
ValideSaisie
End Sub

la proc valide saisie permet ensuite d'indiquer les propriétés particulière
de l'occurence d'objet

==============================================
Bon cougare