Gambas France BETA


Pas de compte ? Incription

Drag and Drop FileChooser

À propos de ce code

Bonjour

Voici un exemple de 'Drag and Drop' entre un FileChooser et un ToolButton.
Il démontre l'utilisation de la classe 'Observer' sans laquelle cet exemple ne pourrait pas fonctionner.
Merci à jornmo pour cette information.
J'ai ajouté mes commentaires dans les procédures pour plus de clarté.

Bonne journée.

Code source

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
' Gambas class file

PRIVATE $hFileViewObs AS Observer
PRIVATE $hDirViewObs AS Observer
PRIVATE $hFileView AS FileView
PRIVATE $hDirView AS DirView


PUBLIC SUB HFVObs_MouseDrag()
'Cette procédure indique uniquement une image lors du déplacement.
IF Mouse.Left THEN
Drag.Icon = Picture["icon:/32/file"]
FileChooser1.Drag(FileChooser1.SelectedPath)
ENDIF

END

PUBLIC SUB HDVObs_MouseDrag()
'Cette procédure indique uniquement une image lors du déplacement.
IF Mouse.Left THEN
Drag.Icon = Picture["icon:/32/directory"]
FileChooser1.Drag(FileChooser1.SelectedPath)
ENDIF

END

PUBLIC SUB ToolButton1_Drop()
'Cette procédure indique que quelque chose a été déposé sur l'objet
ToolButton1.Picture = Drag.Icon
PRINT "Quelque chose a été déposé sur le ToolButton 1"
END

PUBLIC SUB ToolButton1_DragMove()

Drag.Show(ToolButton1)

END

PUBLIC SUB ToolButton1_MouseDrag()

IF Mouse.Left THEN
Drag.Icon = LAST.Picture
LAST.Drag(LAST.Picture.Image)
ENDIF

END

PUBLIC SUB FileChooser1_DragMove()

Drag.Show(FileChooser1)

END

PUBLIC SUB FileChooser1_Drop()
'Cette procédure indique que quelqque chose a été déposé sur l'objet
PRINT "Quelque chose a été déposé sur le FileChooser1"
END

PRIVATE SUB GetFileView()
'Cette procedure est le rouage central de l'exemple
'Elle permet de retourner les éléments constitutif du FileChooser1...

' Dim h As Control
' Dim g1 As DirView
' Dim g2 As TreeView
' Dim g3 As TextBox
' Dim g4 As ComboBox
' Dim h2 As Form
' Dim h3 As Container
' Dim h4 As HSplit
' Dim h5 As FileView
' Dim h6 As IconView
' Dim h7 As ScrollArea

' h2 = FileChooser1.Children[0]
' g1 = h2.Children[1]
' Print h2.Name 'Form
' g2 = h2.Children[2]
' Print g2.Name
' g3 = g2.Children[0]
' Print g3.Name
' g4 = g3.Children[0]
' Print g4.Name
' g1 = FileChooser1.DirView
' Print g1.Name
' g2 = g1.Children[0]
' Print g2.Name
'
' h2 = FileChooser1.Children[0]
' h3 = h2.Children[0]
' Print h2.Name 'Form
' h3 = h3.Children[0]
' Print h3.Name 'Container
' h4 = h3.Children[2]
' Print h4.Name 'HSplit
' h3 = h4.Children[1]
' Print h3.Name 'Container
' h5 = h3.Children[0]
' Print h5.Name 'FileView
' h6 = h5.Children[0]
' Print h6.Name ' IconView
' h7 = h6.Children[0]
' Print h7.Name 'ScrollArea

'Comme la classe 'observer' intercepte les évènements AVANT l'observateur de l'objet
'il suffit de rediriger les composants interne du FileChooser
'Un FileChooser est composé (entre autre) d'un DirView et d'un FileView.
'décommenter les lignes ci dessus pour voir une partie des composants...

'On indique que $hDirView est en réalité le DirView du FileChooser1
$hDirView = FileChooser1.DirView
' Print $hDirView.Name 'affichage console

'On indique que $hFileView est en réalité le FileView du FileChooser1
$hFileView = FileChooser1.FileView
' Print $hFileView.Name 'affichage console

'on indique un nouvel 'observateur' sur l'objet $hDirView et on créé HDVObs (pour la partie répertoires)
$hDirViewObs = NEW Observer($hDirView) AS "HDVObs"
'on indique un nouvel 'observateur' sur l'objet $hFileView et on créé HFVObs (pour la partie fichiers)
$hFileViewObs = NEW Observer($hFileView) AS "HFVObs"

END

PUBLIC SUB Form_Open()

GetFileView()

END

Commentaires