am Mauscursor und kann hin und her geschoben werden.
Danach wieder auf den TestButton zum Aktivieren der Möglichk.... s-o-
Code: Alles auswählen
DeclareModule GadgetTransformation
Enumeration 1
#ButtonTest_Position
#ButtonTest_Horizontally
#ButtonTest_Vertically
EndEnumeration
#ButtonTest_Size = #ButtonTest_Horizontally|#ButtonTest_Vertically
#ButtonTest_All = #ButtonTest_Position|#ButtonTest_Horizontally|#ButtonTest_Vertically
Declare DisableGadgetTransformation(Gadget.i)
Declare EnableGadgetTransformation(Gadget.i, Flags.i=#ButtonTest_All, Grid.i=1)
EndDeclareModule
Module GadgetTransformation
EnableExplicit
#HandelSize = 5
Structure GadgetTransformation
Gadget.i
Handle.i[10]
Grid.i
EndStructure
Structure DataBuffer
Handle.i[10]
EndStructure
Global NewList GadgetTransformation.GadgetTransformation()
Procedure.i GridMatch(Value.i, Grid.i, Max.i=$7FFFFFFF)
Value = Round(Value/Grid, #PB_Round_Nearest)*Grid
If Value > Max
ProcedureReturn Max
Else
ProcedureReturn Value
EndIf
EndProcedure
Procedure GadgetTransformation_Callback()
Static Selected.i, X.i, Y.i, OffsetX.i, OffsetY.i, GadgetX0.i, GadgetX1.i, GadgetY0.i, GadgetY1.i
Protected *GadgetTransformation.GadgetTransformation = GetGadgetData(EventGadget())
With *GadgetTransformation
Select EventType()
Case #PB_EventType_LeftButtonDown
Selected = #True
OffsetX = GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseX)
OffsetY = GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseY)
GadgetX0 = GadgetX(\Gadget)
GadgetX1 = GadgetX0 + GadgetWidth(\Gadget)
GadgetY0 = GadgetY(\Gadget)
GadgetY1 = GadgetY0 + GadgetHeight(\Gadget)
Case #PB_EventType_LeftButtonUp
Selected = #False
Case #PB_EventType_MouseMove
If Selected
X = WindowMouseX(GetActiveWindow())-OffsetX
Y = WindowMouseY(GetActiveWindow())-OffsetY
Select EventGadget()
Case \Handle[1]
ResizeGadget(\Gadget, GridMatch(X+#HandelSize, \Grid, GadgetX1), #PB_Ignore, GadgetX1-GridMatch(X+#HandelSize, \Grid, GadgetX1), GridMatch(Y, \Grid)-GadgetY0)
Case \Handle[2]
ResizeGadget(\Gadget, #PB_Ignore, #PB_Ignore, #PB_Ignore, GridMatch(Y, \Grid)-GadgetY0)
Case \Handle[3]
ResizeGadget(\Gadget, #PB_Ignore, #PB_Ignore, GridMatch(X, \Grid)-GadgetX0, GridMatch(Y, \Grid)-GadgetY0)
Case \Handle[4]
ResizeGadget(\Gadget, GridMatch(X+#HandelSize, \Grid, GadgetX1), #PB_Ignore, GadgetX1-GridMatch(X+#HandelSize, \Grid, GadgetX1), #PB_Ignore)
Case \Handle[5]
ResizeGadget(\Gadget, GridMatch(X-#HandelSize, \Grid), GridMatch(Y+#HandelSize, \Grid), #PB_Ignore, #PB_Ignore)
Case \Handle[6]
ResizeGadget(\Gadget, #PB_Ignore, #PB_Ignore, GridMatch(X, \Grid)-GadgetX0, #PB_Ignore)
Case \Handle[7]
ResizeGadget(\Gadget, GridMatch(X+#HandelSize, \Grid, GadgetX1), GridMatch(Y+#HandelSize, \Grid, GadgetY1), GadgetX1-GridMatch(X+#HandelSize, \Grid, GadgetX1), GadgetY1-GridMatch(Y+#HandelSize, \Grid, GadgetY1))
Case \Handle[8]
ResizeGadget(\Gadget, #PB_Ignore, GridMatch(Y+#HandelSize, \Grid, GadgetY1), #PB_Ignore, GadgetY1-GridMatch(Y+#HandelSize, \Grid, GadgetY1))
Case \Handle[9]
ResizeGadget(\Gadget, #PB_Ignore, GridMatch(Y+#HandelSize, \Grid, GadgetY1), GridMatch(X, \Grid)-GadgetX0, GadgetY1-GridMatch(Y+#HandelSize, \Grid, GadgetY1))
EndSelect
If \Handle[1]
ResizeGadget(\Handle[1], GadgetX(\Gadget)-#HandelSize, GadgetY(\Gadget)+GadgetHeight(\Gadget), #PB_Ignore, #PB_Ignore)
EndIf
If \Handle[2]
ResizeGadget(\Handle[2], GadgetX(\Gadget)+(GadgetWidth(\Gadget)-#HandelSize)/2, GadgetY(\Gadget)+GadgetHeight(\Gadget), #PB_Ignore, #PB_Ignore)
EndIf
If \Handle[3]
ResizeGadget(\Handle[3], GadgetX(\Gadget)+GadgetWidth(\Gadget), GadgetY(\Gadget)+GadgetHeight(\Gadget), #PB_Ignore, #PB_Ignore)
EndIf
If \Handle[4]
ResizeGadget(\Handle[4], GadgetX(\Gadget)-#HandelSize, GadgetY(\Gadget)+(GadgetHeight(\Gadget)-#HandelSize)/2, #PB_Ignore, #PB_Ignore)
EndIf
If \Handle[5]
ResizeGadget(\Handle[5], GadgetX(\Gadget)+#HandelSize, GadgetY(\Gadget)-#HandelSize, #PB_Ignore, #PB_Ignore)
EndIf
If \Handle[6]
ResizeGadget(\Handle[6], GadgetX(\Gadget)+GadgetWidth(\Gadget), GadgetY(\Gadget)+(GadgetHeight(\Gadget)-#HandelSize)/2, #PB_Ignore, #PB_Ignore)
EndIf
If \Handle[7]
ResizeGadget(\Handle[7], GadgetX(\Gadget)-#HandelSize, GadgetY(\Gadget)-#HandelSize, #PB_Ignore, #PB_Ignore)
EndIf
If \Handle[8]
ResizeGadget(\Handle[8], GadgetX(\Gadget)+(GadgetWidth(\Gadget)-#HandelSize)/2, GadgetY(\Gadget)-#HandelSize, #PB_Ignore, #PB_Ignore)
EndIf
If \Handle[9]
ResizeGadget(\Handle[9], GadgetX(\Gadget)+GadgetWidth(\Gadget), GadgetY(\Gadget)-#HandelSize, #PB_Ignore, #PB_Ignore)
EndIf
EndIf
EndSelect
EndWith
EndProcedure
Procedure DisableGadgetTransformation(Gadget.i)
Protected I.i, *GadgetTransformation.GadgetTransformation
ForEach GadgetTransformation()
If GadgetTransformation()\Gadget = Gadget
For I = 1 To 9
If GadgetTransformation()\Handle[I]
FreeGadget(GadgetTransformation()\Handle[I])
EndIf
Next
DeleteElement(GadgetTransformation())
EndIf
Next
EndProcedure
Procedure EnableGadgetTransformation(Gadget.i, Flags.i=#ButtonTest_All, Grid.i=1)
Protected Handle.i, I.i
Protected *GadgetTransformation.GadgetTransformation
Protected *Cursors.DataBuffer = ?Cursors
Protected *Flags.DataBuffer = ?Flags
ForEach GadgetTransformation()
If GadgetTransformation()\Gadget = Gadget
For I = 1 To 9
If GadgetTransformation()\Handle[I]
FreeGadget(GadgetTransformation()\Handle[I])
EndIf
Next
DeleteElement(GadgetTransformation())
EndIf
Next
*GadgetTransformation = AddElement(GadgetTransformation())
*GadgetTransformation\Gadget = Gadget
*GadgetTransformation\Grid = Grid
For I = 1 To 9
If Flags & *Flags\Handle[I] = *Flags\Handle[I]
Select I
Case 1
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)-#HandelSize, GadgetY(Gadget)+GadgetHeight(Gadget), #HandelSize, #HandelSize)
Case 2
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)+(GadgetWidth(Gadget)-#HandelSize)/2, GadgetY(Gadget)+GadgetHeight(Gadget), #HandelSize, #HandelSize)
Case 3
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)+GadgetWidth(Gadget), GadgetY(Gadget)+GadgetHeight(Gadget), #HandelSize, #HandelSize)
Case 4
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)-#HandelSize, GadgetY(Gadget)+(GadgetHeight(Gadget)-#HandelSize)/2, #HandelSize, #HandelSize)
Case 5
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)+#HandelSize, GadgetY(Gadget)-#HandelSize, 2*#HandelSize, #HandelSize)
Case 6
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)+GadgetWidth(Gadget), GadgetY(Gadget)+(GadgetHeight(Gadget)-#HandelSize)/2, #HandelSize, #HandelSize)
Case 7
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)-#HandelSize, GadgetY(Gadget)-#HandelSize, #HandelSize, #HandelSize)
Case 8
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)+(GadgetWidth(Gadget)-#HandelSize)/2, GadgetY(Gadget)-#HandelSize, #HandelSize, #HandelSize)
Case 9
Handle = CanvasGadget(#PB_Any, GadgetX(Gadget)+GadgetWidth(Gadget), GadgetY(Gadget)-#HandelSize, #HandelSize, #HandelSize)
EndSelect
*GadgetTransformation\Handle[I] = Handle
SetGadgetData(Handle, *GadgetTransformation)
SetGadgetAttribute(Handle, #PB_Canvas_Cursor, *Cursors\Handle[I])
; OHNE BOX
; If StartDrawing(CanvasOutput(Handle))
; Box(0, 0, OutputWidth(), OutputHeight(), $000000)
; Box(1, 1, OutputWidth()-2, OutputHeight()-2, $FFFFFF)
; StopDrawing()
; EndIf
BindGadgetEvent(Handle, @GadgetTransformation_Callback())
EndIf
Next
DataSection
Cursors:
Data.i 0, #PB_Cursor_LeftDownRightUp, #PB_Cursor_UpDown, #PB_Cursor_LeftUpRightDown, #PB_Cursor_LeftRight
Data.i #PB_Cursor_Arrows, #PB_Cursor_LeftRight, #PB_Cursor_LeftUpRightDown, #PB_Cursor_UpDown, #PB_Cursor_LeftDownRightUp
Flags:
Data.i 0, #ButtonTest_Size, #ButtonTest_Vertically, #ButtonTest_Size, #ButtonTest_Horizontally
Data.i #ButtonTest_Position, #ButtonTest_Horizontally, #ButtonTest_Size, #ButtonTest_Vertically, #ButtonTest_Size
EndDataSection
EndProcedure
EndModule
UseModule GadgetTransformation
Enumeration
#Window
#ButtonTest
#ListGadget
EndEnumeration
OpenWindow(#Window, 0, 0, 600, 400, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ListIconGadget(#ListGadget, 50, 100, 200, 100, "Column 1", 100, #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#ListGadget, 1, "Column 2", 100)
For b = 0 To 20
AddGadgetItem(#ListGadget, b, "Item 1"+Chr(10)+"Item 2")
Next
ButtonGadget(#ButtonTest, 20, 20, 150, 25, "Kick in to resize Listicongadget", #PB_Button_Toggle)
AddKeyboardShortcut(#Window,#PB_Shortcut_Space,1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Menu
Select EventMenu()
Case 1
DisableGadgetTransformation(#ListGadget)
Debug "Das Listicon hängt mittig an der Maus"
ResizeGadget(#ListGadget,WindowMouseX(#window)-GadgetWidth(#ListGadget)/2,WindowMouseY(#window)-GadgetHeight(#ListGadget)/2,#PB_Ignore,#PB_Ignore)
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #ButtonTest
EnableGadgetTransformation(#ListGadget, #ButtonTest_All, 10)
Debug "Test"
GadgetX = GadgetX(#ListGadget)
GadgetY = GadgetY(#ListGadget)
GadgetdY = GadgetWidth(#ListGadget)
GadgetdX = GadgetHeight(#ListGadget)
Debug "X/Y: "+Str(GadgetX)+"/"+Str(GadgetY)+ " dX/dY: "+Str(GadgetdX)+"/"+Str(GadgetdY)
EndSelect
EndSelect
ForEver