4.10 Beta: DragDrop example with drag image
Posted: Fri Jun 01, 2007 1:02 am
Code: Select all
IncludeFile "MakeBalloon.pbi"
Global candrop=0, dragstatusthread=0, dragthread, droptext.s, arrow = LoadCursor_(0, #IDC_ARROW)
Procedure ShowDragStatus(parent)
dragstatusthread = 1
balloonrgn = MakeBalloon()
win = OpenWindow(#PB_Any,0,0,212,110,"",#PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible)
SetWindowLong_(WindowID(win),#GWL_EXSTYLE, GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|#WS_EX_LAYERED|#WS_EX_TOOLWINDOW)
SetLayeredWindowAttributes_(WindowID(win),0,230,#LWA_ALPHA)
CreateGadgetList(WindowID(win))
img = ImageGadget(#PB_Any,0,0,0,0,ImageID(#iBalloon))
title = TextGadget(#PB_Any, 70,10,80,18,"Dragging Text:")
txt = TextGadget(#PB_Any, 25,30,160,40,droptext,#PB_Text_Center)
inftxt = TextGadget(#PB_Any, 25,60,160,20,"",#PB_Text_Center)
SetGadgetColor(title, #PB_Gadget_FrontColor, #Blue)
SetGadgetColor(title, #PB_Gadget_BackColor, RGB(255,255,223))
SetGadgetColor(txt, #PB_Gadget_BackColor, RGB(255,255,223))
SetGadgetColor(inftxt, #PB_Gadget_BackColor, RGB(255,255,223))
DisableGadget(img, 1)
StickyWindow(win, 1)
DisableWindow(win, 1)
SetForegroundWindow_(parent)
GetCursorPos_(@cp.POINT)
ResizeWindow(win, cp\x-110, cp\y-120, #PB_Ignore, #PB_Ignore)
SetWindowRgn_(WindowID(win), balloonrgn, #True)
HideWindow(win, 0)
arrow = LoadCursor_(0, #IDC_ARROW)
Repeat:
ev=WaitWindowEvent(1)
If candrop
If GetGadgetText(inftxt) <> "(Can drop here)"
SetGadgetColor(inftxt, #PB_Gadget_FrontColor, RGB(0,140,0))
SetGadgetText(inftxt, "(Can drop here)")
EndIf
Else
If GetGadgetText(inftxt) <> "(Can not drop here)"
SetGadgetColor(inftxt, #PB_Gadget_FrontColor, #Red)
SetGadgetText(inftxt, "(Can not drop here)")
EndIf
EndIf
GetCursorPos_(@cp.POINT)
ResizeWindow(win, cp\x-112, cp\y-110, #PB_Ignore, #PB_Ignore)
Until dragstatusthread = 0 Or Not GetAsyncKeyState_(#VK_LBUTTON) & 32768
dragstatusthread = 0
droptext=""
CloseWindow(win)
FreeImage(#iBalloon)
EndProcedure
Procedure.l DragCallBack(Action)
If Action = #PB_Drag_None
candrop = 0
Else
candrop = 1
If Not IsThread(dragthread)
dragthread = CreateThread(@ShowDragStatus(),WindowID(0))
EndIf
EndIf
SetCursor_(arrow)
ProcedureReturn 0
EndProcedure
OpenWindow(0,0,0,480,400,"DragDrop Callback Demo",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ListIconGadget(0,20,20,200,300,"Gadget 0", 195, #PB_ListIcon_FullRowSelect)
ListIconGadget(1,250,20,200,300,"Gadget 1", 195, #PB_ListIcon_FullRowSelect)
AddGadgetItem(0, -1, "Arthur")
AddGadgetItem(0, -1, "Beryl")
AddGadgetItem(0, -1, "Charles")
AddGadgetItem(0, -1, "Daniel")
AddGadgetItem(0, -1, "Ernest")
AddGadgetItem(0, -1, "Francis")
AddGadgetItem(0, -1, "Gordon")
AddGadgetItem(0, -1, "Harold")
AddGadgetItem(0, -1, "Ian")
AddGadgetItem(0, -1, "John")
EnableGadgetDrop(0,#PB_Drop_Text, #PB_Drag_Copy|#PB_Drag_Move)
EnableGadgetDrop(1,#PB_Drop_Text, #PB_Drag_Copy|#PB_Drag_Move)
Repeat
ev = WaitWindowEvent()
Select ev
Case #PB_Event_GadgetDrop
dragstatusthread = 0
RemoveGadgetItem(draggadget, dragrow)
AddGadgetItem(EventGadget(), GetGadgetState(EventGadget()), EventDropText())
Case #PB_Event_Gadget
If EventType() = #PB_EventType_DragStart
dragrow = GetGadgetState(EventGadget())
dragtxt.s = GetGadgetItemText(EventGadget(), dragrow)
droptext = dragtxt
draggadget = EventGadget()
SetDragCallback(@DragCallBack())
DragText(dragtxt, #PB_Drag_Copy)
EndIf
EndSelect
Until ev = #PB_Event_CloseWindow
Code: Select all
; MakeBalloon.pbi
Procedure MakeBalloon()
#iBalloon = 100
*unpacked = AllocateMemory(67472)
UnpackMemory(?PicPak, *unpacked)
CatchImage(#iBalloon, *unpacked, 67472)
FreeMemory(*unpacked)
DataSection
PicPak:
Data.b $4A,$43,$90,$07,$01,$00,$74,$DC,$FF,$14,$B9,$A9,$D0,$20,$8A,$04,$3C,$08,$65,$04
Data.b $D8,$24,$B5,$12,$75,$09,$80,$11,$0B,$24,$0C,$04,$AD,$63,$04,$44,$16,$4A,$E8,$3F
Data.b $05,$D8,$42,$A2,$B9,$EE,$60,$25,$5D,$A3,$E4,$81,$92,$43,$E8,$B0,$7F,$5F,$B1,$04
Data.b $6F,$5A,$3F,$4B,$F2,$79,$20,$9D,$EB,$AF,$49,$CB,$93,$04,$67,$91,$C0,$77,$9C,$00
Data.b $06,$F2,$FB,$A2,$0D,$34,$8B,$43,$1E,$E9,$F9,$B3,$24,$E1,$4B,$92,$D2,$90,$D1,$86
Data.b $00,$80,$A1,$B4,$D6,$7D,$59,$12,$CB,$83,$9E,$DC,$00,$F2,$E6,$CF,$92,$A0,$A2,$0D
Data.b $01,$F4,$42,$B4,$F9,$FA,$B3,$24,$4B,$85,$5B,$6E,$00,$E6,$06,$0B,$4A,$56,$43,$00
Data.b $BA,$25,$7D,$AF,$BE,$68,$49,$42,$84,$90,$67,$61,$C0,$75,$E2,$1A,$33,$F5,$10,$C0
Data.b $6D,$49,$D4,$AB,$2F,$DA,$42,$BB,$33,$B4,$01,$2C,$3E,$4B,$25,$89,$BD,$B9,$24,$14
Data.b $C0,$9F,$AD,$FA,$E2,$B3,$E5,$4A,$00,$96,$9A,$CF,$92,$A4,$6E,$83,$6E,$00,$59,$40
Data.b $50,$49,$F0,$54,$7D,$FD,$3C,$6A,$24,$80,$96,$CF,$67,$49,$00,$56,$53,$7F,$F6,$77
Data.b $D1,$86,$E9,$B8,$A1,$96,$5B,$FD,$59,$12,$91,$24,$BD,$4B,$8B,$36,$04,$70,$0B,$E1
Data.b $E5,$BE,$CF,$92,$1C,$B6,$AB,$1B,$80,$8B,$FD,$59,$92,$E1,$B4,$77,$F6,$77,$92,$F0
Data.b $A4,$89,$3F,$CB,$8E,$CF,$4B,$18,$2A,$B4,$D1,$86,$00,$44,$21,$FE,$74,$77,$ED,$9F
Data.b $43,$03,$F6,$FB,$B3,$24,$1B,$4A,$8C,$B7,$00,$9F,$25,$0F,$BA,$BB,$68,$43,$15,$7F
Data.b $90,$56,$00,$35,$9F,$C5,$24,$C9,$61,$37,$00,$9C,$F9,$B3,$AB,$BB,$68,$43,$D6,$A7
Data.b $50,$69,$BC,$F9,$2C,$89,$61,$2E,$BB,$01,$96,$48,$84,$28,$A2,$0D,$01,$64,$41,$ED
Data.b $F9,$EB,$FC,$B9,$8B,$65,$B6,$FF,$B3,$24,$25,$4A,$9E,$D7,$BA,$8B,$24,$15,$1F,$01
Data.b $F0,$E4,$3F,$9F,$C5,$95,$26,$53,$7F,$16,$96,$EC,$8B,$00,$F8,$2C,$AB,$BB,$EB,$6E
Data.b $00,$AB,$18,$2B,$4A,$AA,$EB,$FA,$B3,$24,$6A,$C9,$BE,$BC,$64,$EB,$FE,$2C,$92,$7D
Data.b $11,$00,$03,$66,$75,$D7,$82,$BD,$37,$55,$2C,$D9,$88,$51,$B2,$2F,$02,$50,$C0,$AC
Data.b $EE,$5A,$BC,$0B,$A7,$6A,$D7,$F5,$67,$49,$FC,$92,$7D,$51,$55,$7C,$FD,$59,$B0,$D8
Data.b $B1,$E8,$DD,$B5,$64,$5F,$45,$D5,$80,$59,$21,$3B,$72,$CA,$45,$00,$84,$25,$53,$77
Data.b $3D,$DB,$94,$99,$00,$74,$50,$57,$E8,$2D,$B2,$AF,$A2,$99,$C0,$F8,$25,$FB,$C8,$1F
Data.b $A7,$6A,$AD,$F1,$67,$49,$59,$4C,$79,$3F,$19,$4D,$B9,$4C,$D9,$4D,$79,$4D,$3D,$D5
Data.b $05,$67,$42,$A5,$09,$40,$07,$85,$84,$A8,$51,$9E,$20,$51,$C4,$6C,$56,$49,$58,$02
Data.b $D9,$AF,$72,$27,$11,$ED,$57,$35,$60,$C8,$92,$9C,$57,$EE,$06,$A0,$9A,$CF,$D6,$78
Data.b $B0,$AA,$2C,$A6,$BC,$9F,$8C,$A6,$5C,$A6,$EC,$A6,$BC,$A6,$4C,$A7,$1C,$A7,$AC,$A7
Data.b $7C,$A7,$7C,$EF,$9F,$B3,$84,$32,$13,$00,$48,$50,$07,$F1,$7C,$C7,$8D,$7D,$C5,$A8
Data.b $17,$0F,$03,$E6,$35,$17,$8E,$53,$D6,$DD,$BE,$53,$A6,$53,$EE,$53,$D6,$53,$1E,$58
Data.b $06,$58,$39,$7D,$DB,$59,$41,$60,$09,$20,$03,$87,$00,$57,$5E,$C9,$72,$C7,$E5,$75
Data.b $3F,$60,$65,$80,$E5,$3E,$1F,$5D,$E5,$81,$00,$7A,$D3,$F5,$52,$24,$44,$95,$F9,$BC
Data.b $58,$72,$F9,$A7,$C3,$27,$96,$D7,$FD,$80,$96,$0D,$96,$07,$9F,$19,$96,$13,$BA,$DD
Data.b $11,$FA,$42,$6C,$09,$A0,$A8,$24,$2A,$4B,$AA,$E6,$2C,$E6,$8B,$1F,$30,$BA,$CB,$0F
Data.b $CB,$0C,$CB,$15,$CB,$12,$F8,$F5,$AE,$3C,$CC,$16,$15,$01,$BA,$92,$4C,$0E,$07,$8C
Data.b $2A,$48,$FC,$B0,$B8,$FF,$5C,$B1,$2C,$B1,$46,$FF,$8C,$B1,$28,$B9,$A3,$2B,$B9,$C4
Data.b $29,$51,$3B,$4B,$A2,$BE,$06,$8C,$FE,$2A,$C6,$72,$C5,$A2,$C7,$F2,$C6,$32,$B6,$3E
Data.b $CF,$B2,$41,$1D,$01,$7C,$7D,$0D,$F6,$21,$7C,$55,$0D,$18,$F6,$58,$DE,$58,$DB,$FD
Data.b $E0,$75,$E8,$8A,$00,$1A,$90,$A6,$3A,$A2,$E8,$BE,$CA,$B3,$2C,$EA,$C1,$EB,$2C,$93
Data.b $2C,$87,$99,$3E,$FB,$F2,$4B,$48,$7E,$04,$B3,$24,$DB,$81,$C0,$B8,$BF,$CA,$C9,$72
Data.b $C8,$62,$EB,$2E,$FC,$33,$99,$3E,$52,$2D,$2C,$9C,$E9,$03,$3F,$AA,$BA,$F2,$FC,$3D
Data.b $EF,$C2,$E2,$85,$3E,$AF,$79,$0F,$5F,$BE,$7F,$8F,$AB,$2E,$AA,$AC,$B2,$78,$60,$A7
Data.b $4F,$E0,$62,$B0,$20,$01,$FE,$5F,$F5,$4E,$FE,$0A,$E8,$E3,$30,$CB,$2D,$8B,$B8,$C7
Data.b $BD,$CB,$CF,$22,$C7,$AA,$01,$E3,$BA,$2B,$30,$CB,$2D,$8B,$03,$BB,$3C,$CB,$30,$5D
Data.b $25,$41,$75,$0D,$98,$75,$77,$86,$59,$5C,$C8,$6F,$B5,$68,$9B,$09,$2A,$02,$5D,$7C
Data.b $16,$D4,$9A,$AE,$37,$FF,$FB,$6C,$B3,$A8,$6D,$58,$1E,$99,$5D,$79,$96,$E4,$59,$0C
Data.b $18,$FF,$97,$E0,$75,$9E,$D4,$67,$F5,$9E,$0D,$98,$75,$49,$9E,$59,$D6,$5F,$7D,$E7
Data.b $ED,$7B,$95,$67,$11,$21,$C5,$80,$D1,$F5,$3E,$D5,$65,$9B,$9A,$00,$84,$BA,$9F,$25
Data.b $E9,$5D,$47,$CD,$DD,$17,$01,$FC,$94,$00,$75,$AD,$D6,$15,$D4,$75,$0D,$18,$CE,$59
Data.b $B6,$59,$00,$D4,$E6,$59,$49,$AE,$32,$25,$71,$F7,$95,$67,$E5,$9C,$C5,$80,$02,$78
Data.b $6B,$9E,$BE,$0B,$CA,$3A,$B8,$D1,$AC,$E3,$DA,$E9,$CC,$B3,$B8,$3A,$FF,$BE,$D2,$3C
Data.b $CB,$D5,$75,$DD,$04,$A0,$BF,$F8,$2C,$49,$2C,$E7,$2C,$AA,$11,$00,$46,$F3,$46,$37
Data.b $AD,$FF,$96,$F5,$57,$03,$A1,$79,$96,$73,$F8,$D2,$09,$E0,$7F,$F1,$59,$12,$87,$CE
Data.b $59,$54,$8A,$CF,$3A,$80,$00,$AC,$AE,$BE,$C5,$C0,$AF,$32,$00,$4E,$72,$FF,$5D,$57
Data.b $E9,$8E,$D2,$D2,$9D,$FF,$5D,$E6,$A1,$BC,$B9,$FF,$E2,$EF,$DE,$4B,$00,$72,$C5,$87
Data.b $92,$34,$9C,$43,$51,$FD,$F3,$5D,$E6,$A1,$0D,$30,$AE,$22,$E7,$50,$FC,$75,$48,$5D
Data.b $BC,$2B,$AF,$93,$54,$94,$C5,$DF,$17,$39,$8D,$BE,$72,$0E,$22,$F3,$5D,$64,$31,$E5
Data.b $3F,$BB,$E7,$50,$DC,$75,$CA,$7C,$00,$18,$25,$31,$9B,$15,$E2,$EE,$8B,$0F,$C6,$7D
Data.b $D9,$86,$12,$C0,$7C,$97,$F8,$24,$0C,$15,$14,$5F,$5F,$62,$65,$1B,$CA,$33,$DF,$AA
Data.b $73,$0E,$E2,$D7,$2D,$67,$D7,$17,$1F,$4A,$86,$F2,$0C,$45,$26,$C6,$75,$D9,$F6,$87
Data.b $23,$CA,$CA,$FF,$AE,$63,$F2,$0C,$65,$18,$4C,$C5,$93,$EB,$F9,$2E,$02,$38,$06,$18
Data.b $7F,$94,$61,$28,$FB,$AE,$3E,$E1,$7E,$97,$1D,$13,$40,$57,$E5,$A1,$24,$A2,$B7,$50
Data.b $D4,$77,$7C,$95,$61,$28,$80,$71,$3E,$14,$24,$09,$11,$12,$79,$AD,$A1,$EE,$A2,$FF
Data.b $6A,$80,$DC,$42,$59,$85,$7B,$77,$86,$A1,$92,$1F,$E9,$C5,$EC,$FB,$57,$12,$A8,$2E
Data.b $EB,$AE,$2A,$94,$5D,$1A,$D7,$E5,$16,$CA,$9E,$E4,$CA,$1D,$CF,$D7,$49,$5A,$D5,$00
Data.b $B3,$96,$32,$09,$C5,$DD,$C8,$75,$F9,$84,$00,$7B,$A9,$93,$92,$CC,$6C,$49,$57,$5D
Data.b $D8,$F9,$12,$CA,$21,$14,$EA,$F2,$09,$65,$02,$7B,$B7,$80,$F1,$A8,$91,$00,$2A,$A3
Data.b $7D,$25,$D9,$83,$F2,$FE,$26,$A1,$1C,$42,$BA,$07,$72,$5D,$B3,$44,$22,$44,$AF,$48
Data.b $E2,$1A,$94,$37,$28,$BA,$3F,$AE,$CB,$1E,$A9,$00,$C6,$5F,$82,$A2,$42,$BA,$BF,$3A
Data.b $81,$A9,$95,$1D,$4A,$32,$72,$05,$45,$DD,$BC,$41,$19,$83,$57,$F1,$E7,$FB,$B4,$08
Data.b $A0,$AE,$C4,$5B,$5F,$F4,$AD,$2F,$BF,$AB,$5C,$41,$D9,$EE,$D1,$5F,$C6,$A0,$79,$D3
Data.b $BF,$B4,$18,$6F,$2D,$F9,$5D,$65,$87,$92,$A0,$CC,$40,$F1,$CC,$D1,$5F,$7E,$04,$20
Data.b $9A,$FA,$BA,$31,$A0,$9C,$0E,$25,$D1,$3D,$80,$E2,$AE,$CA,$A0,$9C,$40,$D9,$D1,$5B
Data.b $7D,$66,$04,$E0,$DA,$AA,$8D,$18,$A1,$A2,$83,$92,$57,$92,$D5,$4F,$CC,$AA,$9A,$9B
Data.b $55,$67,$00,$65,$00,$CA,$40,$D9,$80,$F2,$5B,$B3,$EA,$9C,$09,$80,$3C,$77,$83,$42
Data.b $42,$81,$BF,$DC,$01,$9E,$27,$E1,$8C,$98,$AE,$9F,$29,$57,$24,$F9,$BC,$98,$EE,$37
Data.b $EB,$9B,$07,$28,$03,$50,$FF,$76,$D4,$9F,$2C,$F8,$BD,$A3,$41,$21,$09,$60,$AB,$4C
Data.b $31,$48,$49,$5D,$B3,$92,$80,$24,$B3,$61,$25,$C0,$51,$37,$55,$12,$E6,$B2,$B3,$FA
Data.b $06,$60,$CD,$DC,$E6,$6C,$8D,$91,$9B,$BF,$37,$AF,$9B,$D1,$60,$1D,$6F,$76,$1E,$2A
Data.b $4D,$00,$AF,$E8,$3F,$14,$42,$0D,$91,$F7,$C8,$2C,$A4,$18,$68,$26,$F4,$D3,$9B,$22
Data.b $D0,$49,$26,$74,$D2,$BF,$B3,$D0,$4F,$68,$D4,$90,$62,$23,$7F,$8D,$B3,$20,$00,$44
Data.b $22,$10,$00,$00,$00,$00
PicPakend:
EndDataSection
icon = LoadIcon_(0, #IDI_ASTERISK)
Protected width, height, image=#iBalloon
width = ImageWidth(image)
height = ImageHeight(image)
hRgn = CreateRectRgn_(0, 0, Width, Height)
hdc = StartDrawing(ImageOutput(image))
For y=0 To ImageHeight(image)
For x=0 To ImageWidth(image)
color = Point(x,y)
If color = #White
hTmpRgn = CreateRectRgn_(x,y,x+1,y+1)
CombineRgn_(hRgn, hRgn, hTmpRgn, #RGN_XOR)
DeleteObject_(hTmpRgn)
EndIf
Next
Next
DrawIconEx_(hdc, 40,10,icon,16,16,0,0,#DI_NORMAL|#DI_COMPAT)
StopDrawing()
ProcedureReturn hRgn
EndProcedure