Page 1 of 1

4.10 Beta: DragDrop example with drag image

Posted: Fri Jun 01, 2007 1:02 am
by netmaestro

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 
And the MakeBalloon include:

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 

Posted: Fri Jun 01, 2007 1:24 am
by r_hyde
Where do the #PB_Drag_* and #PB_Drop_* constants come from? I don't seem to have those.

<edit> never mind. time to update (& to learn how to read:)</edit>

Posted: Fri Jun 01, 2007 1:28 am
by netmaestro
They should be available in 4.10 beta 1, I'm sorry I didn't specify that the example was for that version. I've edited the title now, but if you were trying it with the beta and the constants weren't there, that would mean there's a problem.

Posted: Fri Jun 01, 2007 1:36 am
by r_hyde
Nope, no beta. I was using 4.02. I always read the forums from top to bottom, so I had no idea that 4.10 was released, and for a moment I thought you were just making stuff up :lol:

Posted: Fri Jun 01, 2007 2:04 am
by ts-soft
nice example, very good :D

Posted: Fri Jun 01, 2007 2:21 am
by Dare
Nice example.
r_hyde wrote:and for a moment I thought you were just making stuff up :lol:
:lol:

You gotta watch the Maestro and his sleight of hand!



Edit: Let me change my opinion.

Very nice example.

Posted: Fri Jun 01, 2007 3:08 am
by rsts
Yeah - he's always making stuff up I've never heard of.

(but it always works)

:D

Posted: Fri Jun 01, 2007 8:46 am
by dige
:shock:

Netmaestro, you did it again!!!

Every new of your first class examples
is a big suprises ... well done again!!!