; ; Test für Drag`n`Drop: ; ; Das Programm braucht guienv.library in libs: ; ; Es öffnet einen eigenen Screen und Window, zeichnet die Drag&Drop-Areas, ; in diesem Fall ein Polygon. ; ; Sobald man mit der Mouse eine Dragarea anklickt, kann man sie über den ; Screen ziehen. Ein Drop wird nur im Polygon akzeptiert. {* Include sys:coder/preass/Options.p *} {* Include sys:coder/preass/Prozeduren.p *} {* String: Version="$VER: (C) CYBORG 1998-99"*} {* Array[Long]: Drags,357,232,388,262,00,357,262,388,292,1 357,292,388,322,02,0,0,0,0,0*} {* Array[Long]: Drops,035,435,155,455,0,357,114,388,144,1 357,144,388,174,2,357,174,388,204,3 388,114,420,144,4 0,0,0,0,0*} {* Array[Long]: Polygon,20,20,50,50,50,100,100,110,150,30,20,20,0,0*} Open_Window[Lokal,Lokal1]: Window=OpenGuiWindowA(000,000,640,480,Lokal1, #IDCMP_MOUSEMOVE!IDCMP_MOUSEBUTTONS!IDCMP_GADGETDOWN!IDCMP_GADGETUP!IDCMP_REFRESHWINDOW!IDCMP_MENUPICK!IDCMP_VANILLAKEY!IDCMP_RAWKEY!0, #WFLG_BACKDROP!WFLG_BORDERLESS!WFLG_REPORTMOUSE!0, Lokal,0) Checkf Window,Open_Windowende GUI=CreateGuiInfoA(Window,0) CreateGUIMenuEntryA(gui,001,"Projekt",0) CreateGUIMenuEntryA(gui,002,"Quit", >Menu001Tags:GEM_Shortcut,MenuShorCut001MSC="q"| Tag_Done,0) Open_Windowende: {* Return Window*} Close_Window[Lokal]: {* IncVar: Lokal*} CloseGuiWindow(Lokal) RTS Open_Screen[Screenmode,Lokal1]: {* IncVar: Screenmode,Lokal1,Lokal2,Lokal3*} Screen=OpenGuiScreenA(Screenmode,8,Lokal1, >ScreenTags:SA_Font,TopazAttr| SA_Left,0|SA_Top,0|SA_Behind,false| SA_Width,640|SA_Height,480| Tag_done,Null) .Ende: {* Return Screen*} even TopazAttr: dc.l TopazName dc.w 8 dc.b 0,0 Topazname: dc.b "topaz.font",0 blk.b 29,0 Close_Screen[Lokal]: CloseGuiScreen(Lokal) RTS Haupt[]: {* IncVar: TA_Result*} WaitGuiMsg(Gui) MsgClass=.l36(Gui) MsgGadNbr=.w52(Gui) MsgMenuNum=.w54(Gui) MsgItemNum=.w56(Gui) Imsg=.l32(Gui) Mx=.w32(Imsg) My=.w34(Imsg) dx==mx-mxa dy==my-mya mxa==mx mya==my If MsgClass=#IDCMP_MOUSEMOVE and Dragstatus=1 --> .Delta If MsgClass=#IDCMP_MOUSEBUTTONS --> .Dragdrop If MsgClass##IDCMP_MENUPICK --> Haupt RTS .DragDrop: If DragStatus=1 --> .Drop .Drag: If (TA_result=DND_TestArea(&Drags,mx,my))=0 --> Haupt .dragfound: Dragstatus==1 Drag=DND_OpenDrag(Rastport1,TA_Result,Screen1) bra Haupt .Delta: {* Flush *} DND_MoveDrag(Drag,dx,dy) bra Haupt .Drop: {* Flush *} Dragstatus==0 DND_CloseDrag(Drag) DND_FreeResult(TA_Result) Drag==0 If (TA_result=DND_TestPolygon(&Polygon,mx,my))=0 --> Haupt DND_FreeResult(Ta_result) .Dropfound: GuiRequestA(Gui,"Drop!",#GER_Okkind,0) bra Haupt Start: IH=Input() OH=Output() If (Screen1=Open_Screen(#$39024,"Screen1"))#0 { If (Window1=Open_Window(Screen1,"Window1"))#0 { Gui1==Gui Rastport1=.l50(Window1) DND_Draw(Rastport1,&Drags,1) DND_DrawPolygon(Rastport1,&polygon,1) DrawGuiA(Gui1,0) Haupt() Close_Window(Window1) } Close_Screen(Screen1) } RTS