4.10 Beta: DragDrop example with drag image

Share your advanced PureBasic knowledge/code with the community.
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

4.10 Beta: DragDrop example with drag image

Post 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 
Last edited by netmaestro on Fri Jun 01, 2007 1:26 am, edited 1 time in total.
BERESHEIT
r_hyde
Enthusiast
Enthusiast
Posts: 155
Joined: Wed Jul 05, 2006 12:40 am

Post 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>
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Post 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.
BERESHEIT
r_hyde
Enthusiast
Enthusiast
Posts: 155
Joined: Wed Jul 05, 2006 12:40 am

Post 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:
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Post by ts-soft »

nice example, very good :D
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
Dare
Addict
Addict
Posts: 1965
Joined: Mon May 29, 2006 1:01 am
Location: Outback

Post 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.
Dare2 cut down to size
rsts
Addict
Addict
Posts: 2736
Joined: Wed Aug 24, 2005 8:39 am
Location: Southwest OH - USA

Post by rsts »

Yeah - he's always making stuff up I've never heard of.

(but it always works)

:D
dige
Addict
Addict
Posts: 1412
Joined: Wed Apr 30, 2003 8:15 am
Location: Germany
Contact:

Post by dige »

:shock:

Netmaestro, you did it again!!!

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