a.k.k. Avoid troubles with Drag and Drop with a Canvas
This is a simple HowTo.
Fire Xojo,
New Project (with the name you want, ContainerControl Example, if you like it)
a. Add a ContainerControl
(CC) and name it CC_Img
,
b. Add a Canvas
to that CC_Img
and name it C_Image
,
c. Open CC_Img
, then Open Controls,
d. Click in C_Image
to add events and code to it.
e. In CC_Img
, add a Property:
Logo_Pict As Picture
Add a File Type Set
, name it FT_Imgs
and put there some image file types (png, jpg, tif),
C_Image
: Add an Open Event
and put the code:
// C_Image accept defined images drops only
Me.AcceptFileDrop FT_Imgs.All
C_Image
: Add a Paint Event
and put the code:
[code]// Draw the dropped picture
//
#PRAGMA Unused areas
If Logo_Pict <> Nil Then
Dim X As Double
Dim Y As Double
// Compute the X, Y values (so the image will be centered
)
X = (C_Image.Width - Logo_Pict.Width) / 2
Y = (C_Image.Height - Logo_Pict.Height) / 2
// Draw the image, centered
g.DrawPicture Logo_Pict, X,Y
End If[/code]
C_Image
: Add a DropObject Event
and put the code:
[code]// Deals with Picture file drop
//
#PRAGMA Unused action
Dim LogoFI As FolderItem
Dim Drop_Pict As Picture
// a. Get a local FolderITem reference
If Not Obj.FolderItemAvailable Then
// Stop here
Return
End If
// Work with a local variable
LogoFI = Obj.FolderItem
// b. Load the image in a local reference
Drop_Pict = Picture.Open(LogoFI)
If Drop_Pict = Nil Then
// Stop here
Return
End If
// c. Ask the Canvas to Refresh
C_Image.Refresh[/code]
Move CC_Img
into Window1
(it will be renamed CC_Img1
).
Save the project.
Run, drop an image whose file type is implemented in the File Type Set
and enjoy.
Not, drop another file (or a folder) into your window (in the Canvas on that window) and enjoy: it will be rejected.
No need to make any filtering in the DropObject Event
.