Here is a code that could be useful for those who would like to use anchoring points to enlarge or move everything inside the box.
Here is a photo that shows the source in execution:
I hope this gona be useful to someone. Here is the code:
Code: Select all
Global.l WndFlags
Global.i BorderID, WndIndex
Enumeration ; ANCHOR ID (Position Index)
;>>
;
#ANCHOR_MiddleLF = 1
#ANCHOR_MiddleTP
#ANCHOR_MiddleRT
#ANCHOR_MiddleBM
#ANCHOR_CornerTL
#ANCHOR_CornerTR
#ANCHOR_CornerBR
#ANCHOR_CornerBL
;
;<<
EndEnumeration
Structure ANCHOR_STRUCT
;>>
;
ChildGad.i ;
GadIndex.i[9] ;
;
DrwIndex.i ; Canvas Index
ImgIndex.i ; Image To Be Draw In Canvas
;
;<<
EndStructure
;
Global NewList ANCHOR_ItemList.ANCHOR_STRUCT()
Procedure MoveAnchorGadgets( *AnchorID.ANCHOR_STRUCT )
;>>
;
Protected.l BorderBM, BorderLF, BorderRT, BorderTP
Protected.l ExternRT, MiddlePX, MiddlePY
Protected.i ChildGad
;
;
ChildGad = BorderID;*AnchorID\ChildGad
;
BorderLF = GadgetX(ChildGad) : PxlSizeX = GadgetWidth( ChildGad)
BorderTP = GadgetY(ChildGad) : PxlSizeY = GadgetHeight(ChildGad)
;
MiddlePX = BorderLF + (PxlSizeX - 8) >> 1
ExternRT = BorderLF + PxlSizeX - 8
BorderRT = ExternRT - 8
;
MiddlePY = BorderTP + (PxlSizeY - 8) >> 1
BorderBM = BorderTP + PxlSizeY - 8
;
SetWindowPos_(GadgetID(*AnchorID\GadIndex[#ANCHOR_MiddleLF]),#Null,BorderLF,MiddlePY,#Null,#Null,#SWP_NOSIZE | #SWP_FRAMECHANGED)
SetWindowPos_(GadgetID(*AnchorID\GadIndex[#ANCHOR_MiddleTP]),#Null,MiddlePX,BorderTP,#Null,#Null,#SWP_NOSIZE | #SWP_FRAMECHANGED)
SetWindowPos_(GadgetID(*AnchorID\GadIndex[#ANCHOR_MiddleRT]),#Null,ExternRT,MiddlePY,#Null,#Null,#SWP_NOSIZE | #SWP_FRAMECHANGED)
SetWindowPos_(GadgetID(*AnchorID\GadIndex[#ANCHOR_MiddleBM]),#Null,MiddlePX,BorderBM,#Null,#Null,#SWP_NOSIZE | #SWP_FRAMECHANGED)
SetWindowPos_(GadgetID(*AnchorID\GadIndex[#ANCHOR_CornerTL]),#Null,BorderLF + 8,BorderTP,#Null,#Null,#SWP_NOSIZE | #SWP_FRAMECHANGED)
SetWindowPos_(GadgetID(*AnchorID\GadIndex[#ANCHOR_CornerTR]),#Null,BorderRT,BorderTP,#Null,#Null,#SWP_NOSIZE | #SWP_FRAMECHANGED)
SetWindowPos_(GadgetID(*AnchorID\GadIndex[#ANCHOR_CornerBR]),#Null,BorderRT,BorderBM,#Null,#Null,#SWP_NOSIZE | #SWP_FRAMECHANGED)
SetWindowPos_(GadgetID(*AnchorID\GadIndex[#ANCHOR_CornerBL]),#Null,BorderLF + 8,BorderBM,#Null,#Null,#SWP_NOSIZE | #SWP_FRAMECHANGED)
;
;<<
EndProcedure
;
Procedure DispatchAnchorBL()
;>>
;
Protected.ANCHOR_STRUCT *AnchorID
Protected.i ChildGad, GadIndex
Protected.l CoordOnX, CoordOnY
Protected.l HalfDimX, HalfDimY
;
Static.l GadgetPX, GadgetPY, OffsetPX, OffsetPY, Selected, ScreenPX, ScreenPY
;
;
GadIndex = EventGadget()
*AnchorID = GetGadgetData(GadIndex)
;
ChildGad = *AnchorID\ChildGad
;
Select EventType()
Case #PB_EventType_MouseMove
If Selected
CoordOnX = GadgetPX + (DesktopMouseX() - ScreenPX) - OffsetPX
CoordOnY = GadgetPY + (DesktopMouseY() - ScreenPY) - OffsetPY
;
LockWindowUpdate_(GadgetID(BorderID))
ResizeGadget(BorderID,CoordOnX - 8,CoordOnY - GadgetHeight(ChildGad) - 8,#PB_Ignore,#PB_Ignore)
LockWindowUpdate_(0)
;
LockWindowUpdate_(GadgetID(ChildGad))
ResizeGadget(ChildGad,CoordOnX,CoordOnY - GadgetHeight(ChildGad),#PB_Ignore,#PB_Ignore)
LockWindowUpdate_(0)
;
MoveAnchorGadgets(*AnchorID)
EndIf
;
Case #PB_EventType_LeftButtonDown
OffsetPX = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseX)
OffsetPY = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseY)
;
ScreenPX = GadgetX(GadIndex,#PB_Gadget_ScreenCoordinate)
GadgetPX = GadgetX(GadIndex,#PB_Gadget_ContainerCoordinate)
ScreenPY = GadgetY(GadIndex,#PB_Gadget_ScreenCoordinate)
GadgetPY = GadgetY(GadIndex,#PB_Gadget_ContainerCoordinate)
;
Selected = #True
;
Case #PB_EventType_LeftButtonUp
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_Hand)
;
Selected = #False
;
Case #PB_EventType_MouseEnter
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_Hand)
;
Selected = #False
EndSelect
;
;<<
EndProcedure
Procedure DispatchAnchorBR()
;>>
;
Protected.ANCHOR_STRUCT *AnchorID
Protected.i ChildGad, GadIndex
Protected.l CoordOnX, CoordOnY
Protected.l HalfDimX, HalfDimY
;
Static.l GadgetPX, GadgetPY, OffsetPX, OffsetPY, Selected, ScreenPX, ScreenPY
;
;
GadIndex = EventGadget()
*AnchorID = GetGadgetData(GadIndex)
;
ChildGad = *AnchorID\ChildGad
;
Select EventType()
Case #PB_EventType_MouseMove
If Selected
CoordOnX = GadgetPX + (DesktopMouseX() - ScreenPX) - OffsetPX
CoordOnY = GadgetPY + (DesktopMouseY() - ScreenPY) - OffsetPY
;
LockWindowUpdate_(GadgetID(BorderID))
ResizeGadget(BorderID,CoordOnX - GadgetWidth(ChildGad),CoordOnY - GadgetHeight(ChildGad) - 8,#PB_Ignore,#PB_Ignore)
LockWindowUpdate_(0)
;
LockWindowUpdate_(GadgetID(ChildGad))
ResizeGadget(ChildGad,CoordOnX - GadgetWidth(ChildGad) + 8,CoordOnY - GadgetHeight(ChildGad),#PB_Ignore,#PB_Ignore)
LockWindowUpdate_(0)
;
MoveAnchorGadgets(*AnchorID)
EndIf
;
Case #PB_EventType_LeftButtonDown
OffsetPX = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseX)
OffsetPY = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseY)
;
ScreenPX = GadgetX(GadIndex,#PB_Gadget_ScreenCoordinate)
GadgetPX = GadgetX(GadIndex,#PB_Gadget_ContainerCoordinate)
ScreenPY = GadgetY(GadIndex,#PB_Gadget_ScreenCoordinate)
GadgetPY = GadgetY(GadIndex,#PB_Gadget_ContainerCoordinate)
;
Selected = #True
;
Case #PB_EventType_LeftButtonUp
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_Hand)
;
Selected = #False
;
Case #PB_EventType_MouseEnter
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_Hand)
;
Selected = #False
EndSelect
;
;<<
EndProcedure
Procedure DispatchAnchorMB()
;>>
;
Protected.ANCHOR_STRUCT *AnchorID
Protected.i ChildGad, GadIndex, HandleID
Protected.l CoordOnY, PxlSizeY
;
Static.l StartAtY, GadgetPY, OffsetPY, Selected, ScreenPY
;
Protected.RECT AreaRect
;
GadIndex = EventGadget()
*AnchorID = GetGadgetData(GadIndex)
;
ChildGad = *AnchorID\ChildGad
;
Select EventType()
Case #PB_EventType_MouseMove
If Selected
CoordOnY = StartAtY + OffsetPY - (DesktopMouseY() - ScreenPY)
PxlSizeY = GadgetPY - CoordOnY
;
GadPosiX = GadgetX(ChildGad)
GadSizeX = GadgetWidth(ChildGad)
;
Select GadgetType(ChildGad)
Case #PB_GadgetType_ComboBox
If PxlSizeY < 20 : PxlSizeY = 20 : EndIf
If PxlSizeY > 260 : PxlSizeY = 260 : EndIf
;
Case #PB_GadgetType_Text
If PxlSizeY < 14 : PxlSizeY = 14 : EndIf
;
EndSelect
;
LockWindowUpdate_(GadgetID(BorderID))
ResizeGadget(BorderID,#PB_Ignore,#PB_Ignore,GadSizeX + 16,PxlSizeY + 16)
LockWindowUpdate_(0)
;
LockWindowUpdate_(GadgetID(ChildGad))
ResizeGadget(ChildGad,GadPosiX,StartAtY,GadSizeX,PxlSizeY)
LockWindowUpdate_(0)
;
MoveAnchorGadgets(*AnchorID)
EndIf
;
Case #PB_EventType_LeftButtonDown
GadgetPY = GadgetY(GadIndex,#PB_Gadget_ContainerCoordinate)
OffsetPY = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseY)
ScreenPY = GadgetY(GadIndex,#PB_Gadget_ScreenCoordinate)
;
StartAtY = GadgetPY + OffsetPY - (DesktopMouseY() - ScreenPY) - GadgetHeight(ChildGad)
Selected = #True
;
Case #PB_EventType_LeftButtonUp
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_UpDown)
;
Selected = #False
;
Case #PB_EventType_MouseEnter
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_UpDown)
;
WndStyle = GetWindowLongPtr_(GadgetID(ChildGad),#GWL_STYLE)
;
Selected = #False
EndSelect
;
;<<
EndProcedure
Procedure DispatchAnchorML()
;>>
;
Protected.ANCHOR_STRUCT *AnchorID
Protected.i ChildGad, GadIndex
Protected.l CoordOnX, PxlSizeX
;
Static.l CloseAtX, GadgetPX, OffsetPX, Selected, ScreenPX
;
;
GadIndex = EventGadget()
*AnchorID = GetGadgetData(GadIndex)
;
ChildGad = *AnchorID\ChildGad
;
Select EventType()
Case #PB_EventType_MouseMove
If Selected
CoordOnX = GadgetPX + OffsetPX + (DesktopMouseX() - ScreenPX)
PxlSizeX = CloseAtX - CoordOnX + 8
;
LockWindowUpdate_(GadgetID(BorderID))
ResizeGadget(BorderID,CoordOnX - 8,#PB_Ignore,PxlSizeX + 16,#PB_Ignore)
LockWindowUpdate_(0)
;
LockWindowUpdate_(GadgetID(ChildGad))
ResizeGadget(ChildGad,CoordOnX,#PB_Ignore,PxlSizeX,#PB_Ignore)
LockWindowUpdate_(0)
;
MoveAnchorGadgets(*AnchorID)
EndIf
;
Case #PB_EventType_LeftButtonDown
GadgetPX = GadgetX(GadIndex,#PB_Gadget_ContainerCoordinate)
OffsetPX = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseX)
ScreenPX = GadgetX(GadIndex,#PB_Gadget_ScreenCoordinate)
;
CloseAtX = GadgetPX + (DesktopMouseX() - ScreenPX) - OffsetPX + GadgetWidth(ChildGad)
;
Selected = #True
;
Case #PB_EventType_LeftButtonUp
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_LeftRight)
;
Selected = #False
;
Case #PB_EventType_MouseEnter
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_LeftRight)
;
Selected = #False
EndSelect
;
;<<
EndProcedure
Procedure DispatchAnchorMR()
;>>
;
Protected.ANCHOR_STRUCT *AnchorID
Protected.i ChildGad, GadIndex
Protected.l CoordOnX, PxlSizeX
;
Static.l StartAtX, GadgetPX, OffsetPX, Selected, ScreenPX
;
;
GadIndex = EventGadget()
*AnchorID = GetGadgetData(GadIndex)
;
ChildGad = *AnchorID\ChildGad
;
Select EventType()
Case #PB_EventType_MouseMove
If Selected
CoordOnX = StartAtX + OffsetPX - (DesktopMouseX() - ScreenPX)
PxlSizeX = GadgetPX - CoordOnX
;
LockWindowUpdate_(GadgetID(BorderID))
ResizeGadget(BorderID,#PB_Ignore,#PB_Ignore,PxlSizeX + 16,#PB_Ignore)
LockWindowUpdate_(0)
;
LockWindowUpdate_(GadgetID(ChildGad))
ResizeGadget(ChildGad,StartAtX,#PB_Ignore,PxlSizeX,#PB_Ignore)
LockWindowUpdate_(0)
;
MoveAnchorGadgets(*AnchorID)
EndIf
;
Case #PB_EventType_LeftButtonDown
GadgetPX = GadgetX(GadIndex,#PB_Gadget_ContainerCoordinate)
OffsetPX = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseX)
ScreenPX = GadgetX(GadIndex,#PB_Gadget_ScreenCoordinate)
;
StartAtX = GadgetPX + OffsetPX - (DesktopMouseX() - ScreenPX) - GadgetWidth(ChildGad)
Selected = #True
;
Case #PB_EventType_LeftButtonUp
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_LeftRight)
;
Selected = #False
;
Case #PB_EventType_MouseEnter
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_LeftRight)
;
Selected = #False
EndSelect
;
;<<
EndProcedure
Procedure DispatchAnchorMT()
;>>
;
Protected.ANCHOR_STRUCT *AnchorID
Protected.i ChildGad, GadIndex
Protected.l CoordOnY, PxlSizeY
;
Static.l CloseAtY, GadgetPY, OffsetPY, Selected, ScreenPY
;
;
GadIndex = EventGadget()
*AnchorID = GetGadgetData(GadIndex)
;
ChildGad = *AnchorID\ChildGad
;
Select EventType()
Case #PB_EventType_MouseMove
If Selected
CoordOnY = GadgetPY + OffsetPY + (DesktopMouseY() - ScreenPY)
PxlSizeY = CloseAtY - CoordOnY + 8
;
Select GadgetType(ChildGad)
Case #PB_GadgetType_ComboBox
If PxlSizeY < 20 : PxlSizeY = 20 : CoordOnY = GadgetY(*AnchorID\GadIndex[#ANCHOR_MiddleBM]) - PxlSizeY : EndIf
If PxlSizeY > 260 : PxlSizeY = 260 : CoordOnY = GadgetY(*AnchorID\GadIndex[#ANCHOR_MiddleBM]) - PxlSizeY : EndIf
;
Case #PB_GadgetType_Text
If PxlSizeY < 14 : PxlSizeY = 14 : CoordOnY = GadgetY(*AnchorID\GadIndex[#ANCHOR_MiddleBM]) - PxlSizeY : EndIf
EndSelect
;
LockWindowUpdate_(GadgetID(BorderID))
ResizeGadget(BorderID,#PB_Ignore,CoordOnY - 8, #PB_Ignore,PxlSizeY + 16)
LockWindowUpdate_(0)
;
LockWindowUpdate_(GadgetID(ChildGad))
ResizeGadget(ChildGad,#PB_Ignore,CoordOnY,#PB_Ignore,PxlSizeY)
LockWindowUpdate_(0)
;
MoveAnchorGadgets(*AnchorID)
EndIf
;
Case #PB_EventType_LeftButtonDown
GadgetPY = GadgetY(GadIndex,#PB_Gadget_ContainerCoordinate)
OffsetPY = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseY)
ScreenPY = GadgetY(GadIndex,#PB_Gadget_ScreenCoordinate)
;
CloseAtY = GadgetPY + (DesktopMouseY() - ScreenPY) - OffsetPY + GadgetHeight(ChildGad)
;
Selected = #True
;
Case #PB_EventType_LeftButtonUp
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_UpDown)
;
Selected = #False
;
Case #PB_EventType_MouseEnter
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_UpDown)
;
Selected = #False
EndSelect
;
;<<
EndProcedure
Procedure DispatchAnchorTL()
;>>
;
Protected.ANCHOR_STRUCT *AnchorID
Protected.i ChildGad, GadIndex
Protected.l CoordOnX, CoordOnY
Protected.l HalfDimX, HalfDimY
;
Static.l GadgetPX, GadgetPY, OffsetPX, OffsetPY, Selected, ScreenPX, ScreenPY
;
;
GadIndex = EventGadget()
*AnchorID = GetGadgetData(GadIndex)
;
ChildGad = *AnchorID\ChildGad
;
Select EventType()
Case #PB_EventType_MouseMove
If Selected
CoordOnX = GadgetPX + (DesktopMouseX() - ScreenPX) - OffsetPX
CoordOnY = GadgetPY + (DesktopMouseY() - ScreenPY) - OffsetPY
;
LockWindowUpdate_(GadgetID(BorderID))
ResizeGadget(BorderID,CoordOnX - 8,CoordOnY,#PB_Ignore,#PB_Ignore)
LockWindowUpdate_(0)
;
LockWindowUpdate_(GadgetID(ChildGad))
ResizeGadget(ChildGad,CoordOnX,CoordOnY + 8,#PB_Ignore,#PB_Ignore)
LockWindowUpdate_(0)
;
MoveAnchorGadgets(*AnchorID)
EndIf
;
Case #PB_EventType_LeftButtonDown
OffsetPX = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseX)
OffsetPY = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseY)
;
ScreenPX = GadgetX(GadIndex,#PB_Gadget_ScreenCoordinate)
GadgetPX = GadgetX(GadIndex,#PB_Gadget_ContainerCoordinate)
ScreenPY = GadgetY(GadIndex,#PB_Gadget_ScreenCoordinate)
GadgetPY = GadgetY(GadIndex,#PB_Gadget_ContainerCoordinate)
;
Selected = #True
;
Case #PB_EventType_LeftButtonUp
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_Hand)
;
Selected = #False
;
Case #PB_EventType_MouseEnter
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_Hand)
;
Selected = #False
EndSelect
;
;<<
EndProcedure
Procedure DispatchAnchorTR()
;>>
;
Protected.ANCHOR_STRUCT *AnchorID
Protected.i ChildGad, GadIndex
Protected.l CoordOnX, CoordOnY
Protected.l HalfDimX, HalfDimY
;
Static.l GadgetPX, GadgetPY, OffsetPX, OffsetPY, Selected, ScreenPX, ScreenPY
;
;
GadIndex = EventGadget()
*AnchorID = GetGadgetData(GadIndex)
;
ChildGad = *AnchorID\ChildGad
;
Select EventType()
Case #PB_EventType_MouseMove
If Selected
CoordOnX = GadgetPX + (DesktopMouseX() - ScreenPX) - OffsetPX
CoordOnY = GadgetPY + (DesktopMouseY() - ScreenPY) - OffsetPY
;
LockWindowUpdate_(GadgetID(BorderID))
ResizeGadget(BorderID,CoordOnX - GadgetWidth(ChildGad),CoordOnY,#PB_Ignore,#PB_Ignore)
LockWindowUpdate_(0)
;
LockWindowUpdate_(GadgetID(ChildGad))
ResizeGadget(ChildGad,CoordOnX - GadgetWidth(ChildGad) + 8,CoordOnY + 8,#PB_Ignore,#PB_Ignore)
LockWindowUpdate_(0)
;
MoveAnchorGadgets(*AnchorID)
EndIf
;
Case #PB_EventType_LeftButtonDown
OffsetPX = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseX)
OffsetPY = GetGadgetAttribute(GadIndex,#PB_Canvas_MouseY)
;
ScreenPX = GadgetX(GadIndex,#PB_Gadget_ScreenCoordinate)
GadgetPX = GadgetX(GadIndex,#PB_Gadget_ContainerCoordinate)
ScreenPY = GadgetY(GadIndex,#PB_Gadget_ScreenCoordinate)
GadgetPY = GadgetY(GadIndex,#PB_Gadget_ContainerCoordinate)
;
Selected = #True
;
Case #PB_EventType_LeftButtonUp
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_Hand)
;
Selected = #False
;
Case #PB_EventType_MouseEnter
SetGadgetAttribute(GadIndex,#PB_Canvas_Cursor,#PB_Cursor_Hand)
;
Selected = #False
EndSelect
;
;<<
EndProcedure
;
Procedure InitGadgetAnchorBorder( *StructID.ANCHOR_STRUCT, AnchorID.i, ParentID.i, StyleVal.l )
;>>
;
SetGadgetData(AnchorID,*StructID)
;
StartDrawing(CanvasOutput(AnchorID))
DrawingMode(#PB_2DDrawing_Outlined)
Box(#Null,#Null,OutputWidth(),OutputHeight(),#Black)
StopDrawing()
;
SetParent_(GadgetID(AnchorID),ParentID)
;
Select StyleVal
Case 8 : *StructID\GadIndex[#ANCHOR_CornerBL] = AnchorID : BindGadgetEvent(AnchorID,@DispatchAnchorBL())
Case 7 : *StructID\GadIndex[#ANCHOR_CornerBR] = AnchorID : BindGadgetEvent(AnchorID,@DispatchAnchorBR())
Case 6 : *StructID\GadIndex[#ANCHOR_CornerTR] = AnchorID : BindGadgetEvent(AnchorID,@DispatchAnchorTR())
Case 5 : *StructID\GadIndex[#ANCHOR_CornerTL] = AnchorID : BindGadgetEvent(AnchorID,@DispatchAnchorTL())
Case 4 : *StructID\GadIndex[#ANCHOR_MiddleBM] = AnchorID : BindGadgetEvent(AnchorID,@DispatchAnchorMB())
Case 3 : *StructID\GadIndex[#ANCHOR_MiddleRT] = AnchorID : BindGadgetEvent(AnchorID,@DispatchAnchorMR())
Case 2 : *StructID\GadIndex[#ANCHOR_MiddleTP] = AnchorID : BindGadgetEvent(AnchorID,@DispatchAnchorMT())
Case 1 : *StructID\GadIndex[#ANCHOR_MiddleLF] = AnchorID : BindGadgetEvent(AnchorID,@DispatchAnchorML())
Default : *StructID\GadIndex[0] = AnchorID
EndSelect
;
;<<
EndProcedure
;
Procedure.l DispatchGadgets( WindowID.l, WMessage.l, WParamID.l, LParamID.l )
;>>
;
Protected.RECT ClientRC
Protected.PAINTSTRUCT PStruct
;
;
;If WMessage = #WM_ERASEBKGND : ProcedureReturn #True : EndIf
;
ProcedureReturn CallWindowProc_(GetWindowLongPtr_(WindowID,#GWLP_USERDATA),WindowID,WMessage,WParamID,LParamID)
;
;<<
EndProcedure
Procedure.i CreateGadgetAnchors( GadIndex.i )
;>>
;
Protected.ANCHOR_STRUCT *StructID
Protected.i CornerBL, CornerBR, CornerTL, CornerTR, MiddleBM, MiddleLF, MiddleRT, MiddleTP
Protected.i DrwIndex, HandleID, ParentID
Protected.l CenterPX, CenterPY, CloseAtX, CloseAtY, CoordOnX, CoordOnY
Protected.l OriginX1, OriginX2, PxlSizeX, PxlSizeY, StartAtX, StartAtY
;
;
If IsGadget(GadIndex)
HandleID = GadgetID(GadIndex) ;: SetWindowLongPtr_(HandleID,#GWLP_USERDATA,GetWindowLongPtr_(HandleID,#GWLP_WNDPROC)) : SetWindowLongPtr_(HandleID,#GWLP_WNDPROC,@DispatchGadgets())
ParentID = GetParent_(HandleID) : SetWindowLongPtr_(ParentID,#GWL_STYLE,GetWindowLongPtr_(ParentID,#GWL_STYLE) | #WS_CLIPCHILDREN | #WS_CLIPSIBLINGS)
;
CoordOnX = GadgetX(GadIndex) : CoordOnY = GadgetY(GadIndex)
PxlSizeX = GadgetWidth(GadIndex) : PxlSizeY = GadgetHeight(GadIndex)
;
CenterPX = CoordOnX + (PxlSizeX >> 1) - 4 : CenterPY = CoordOnY + (PxlSizeY >> 1) - 4
CloseAtX = CoordOnX + PxlSizeX : CloseAtY = CoordOnY + PxlSizeY
StartAtX = CoordOnX - 8 : StartAtY = CoordOnY - 8
;
OriginX1 = CoordOnX
OriginX2 = CloseAtX - 8
;
BorderID = ContainerGadget(#PB_Any,StartAtX,StartAtY,PxlSizeX + 16,PxlSizeY + 16,#PB_Container_BorderLess)
SetWindowLongPtr_(GadgetID(BorderID),#GWL_STYLE,GetWindowLongPtr_(GadgetID(BorderID),#GWL_STYLE) | #WS_CLIPCHILDREN | #WS_CLIPSIBLINGS)
;
MiddleLF = CanvasGadget(#PB_Any,StartAtX,CenterPY, 8, 8)
;
If MiddleLF
MiddleTP = CanvasGadget(#PB_Any,CenterPX,StartAtY, 8, 8)
;
If MiddleTP
MiddleRT = CanvasGadget(#PB_Any,CloseAtX,CenterPY, 8, 8)
;
If MiddleRT
MiddleBM = CanvasGadget(#PB_Any,CenterPX,CloseAtY, 8, 8)
;
If MiddleBM
CornerTL = CanvasGadget(#PB_Any,Originx1,StartAtY, 8, 8)
;
If CornerTL
CornerTR = CanvasGadget(#PB_Any,OriginX2,StartAtY, 8, 8)
;
If CornerTR
CornerBR = CanvasGadget(#PB_Any,OriginX2,CloseAtY, 8, 8)
;
If CornerBR
CornerBL = CanvasGadget(#PB_Any,OriginX1,CloseAtY, 8, 8)
;
If CornerBL
*StructID = AddElement(ANCHOR_ItemList())
;
If *StructID
*StructID\ChildGad = GadIndex
;
InitGadgetAnchorBorder(*StructID,CornerBL,ParentID,8)
InitGadgetAnchorBorder(*StructID,CornerBR,ParentID,7)
InitGadgetAnchorBorder(*StructID,CornerTR,ParentID,6)
InitGadgetAnchorBorder(*StructID,CornerTL,ParentID,5)
InitGadgetAnchorBorder(*StructID,MiddleBM,ParentID,4)
InitGadgetAnchorBorder(*StructID,MiddleRT,ParentID,3)
InitGadgetAnchorBorder(*StructID,MiddleTP,ParentID,2)
InitGadgetAnchorBorder(*StructID,MiddleLF,ParentID,1)
;
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
;
CloseGadgetList()
EndIf
;
;<<
EndProcedure
WndFlags = #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget
WndIndex = OpenWindow(#PB_Any, 0, 0,600,340,"Resize The Window To Have More Space",WndFlags)
;
If WndIndex
ButtonGadget(101, 60, 60,200,60,"Move Or Resize The Gadget")
;
CreateGadgetAnchors(101)
;
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
;
End
Roger Beausoleil Quebec - Canada