thx
Code: Select all
Enumeration
#UP_FRAME
#BOTOM_FRAME
#LEFT_FRAME
#RIGHT_FRAME
#CAPTION_FRAME
EndEnumeration
#BORDER_SIZE = 10
#BORDER_COLOR = 15707194
#CAPTION_COLOR = #Black
#CAPTION_SIZE = 30
#BACKGROUND_COLOR = #White
#MINIMUM_WIDTH = 200
#MINIMUM_HEIGHT = 100
#CORNERS_SIZE = 8
Procedure DrawCanvas()
; Resize Borders
ResizeGadget(#UP_FRAME, #PB_Ignore, #PB_Ignore, WindowWidth(0), #PB_Ignore)
ResizeGadget(#RIGHT_FRAME, WindowWidth(0) - #BORDER_SIZE, #PB_Ignore, WindowWidth(0), WindowHeight(0) - #BORDER_SIZE * 2)
ResizeGadget(#BOTOM_FRAME, #PB_Ignore, WindowHeight(0) - #BORDER_SIZE, WindowWidth(0), #PB_Ignore)
ResizeGadget(#LEFT_FRAME, #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(0) - #BORDER_SIZE * 2)
; Resize Caption
ResizeGadget(#CAPTION_FRAME, #PB_Ignore, #PB_Ignore, WindowWidth(0) - #BORDER_SIZE * 2, #PB_Ignore)
StartDrawing(CanvasOutput(#UP_FRAME))
Box(0, 0, GadgetWidth(#UP_FRAME), GadgetHeight(#UP_FRAME), #BORDER_COLOR)
StopDrawing()
StartDrawing(CanvasOutput(#RIGHT_FRAME))
Box(0, 0, GadgetWidth(#RIGHT_FRAME), GadgetHeight(#RIGHT_FRAME), #BORDER_COLOR)
StopDrawing()
StartDrawing(CanvasOutput(#BOTOM_FRAME))
Box(0, 0, GadgetWidth(#BOTOM_FRAME), GadgetHeight(#BOTOM_FRAME), #BORDER_COLOR)
StopDrawing()
StartDrawing(CanvasOutput(#LEFT_FRAME))
Box(0, 0, GadgetWidth(#LEFT_FRAME), GadgetHeight(#LEFT_FRAME), #BORDER_COLOR)
StopDrawing()
StartDrawing(CanvasOutput(#CAPTION_FRAME))
Box(0, 0, GadgetWidth(#CAPTION_FRAME), GadgetHeight(#CAPTION_FRAME), #CAPTION_COLOR)
StopDrawing()
EndProcedure
Procedure CanvasCallback()
Protected event.i, gadget.i
Protected rect.RECT, flag.b = #False
Protected.i new_x = #PB_Ignore, new_y = #PB_Ignore, new_w = #PB_Ignore, new_h = #PB_Ignore
Protected tmp.i, canvas_x.i, canvas_y.i
Static.i desktop_x, desktop_y
event = EventType()
gadget = EventGadget()
Select EventType()
Case #PB_EventType_MouseEnter
Select gadget
Case #UP_FRAME
canvas_x = GetGadgetAttribute(gadget, #PB_Canvas_MouseX)
If canvas_x <= #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftUpRightDown)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
ElseIf canvas_x >= GadgetWidth(gadget) - #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftDownRightUp)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
Else
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_UpDown)
EndIf
Case #BOTOM_FRAME
canvas_x = GetGadgetAttribute(gadget, #PB_Canvas_MouseX)
If canvas_x <= #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftDownRightUp)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
ElseIf canvas_x >= GadgetWidth(gadget) - #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftUpRightDown)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
Else
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_UpDown)
EndIf
Case #LEFT_FRAME
canvas_y = GetGadgetAttribute(gadget, #PB_Canvas_MouseY)
If canvas_y <= #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftUpRightDown)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
ElseIf canvas_y >= GadgetHeight(gadget) - #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftDownRightUp)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
Else
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftRight)
EndIf
Case #RIGHT_FRAME
canvas_y = GetGadgetAttribute(gadget, #PB_Canvas_MouseY)
If canvas_y <= #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftDownRightUp)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
ElseIf canvas_y >= GadgetHeight(gadget) - #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftUpRightDown)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
Else
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftRight)
EndIf
EndSelect
;Case #PB_EventType_MouseLeave
;SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Default)
Case #PB_EventType_LeftButtonDown
If gadget = #CAPTION_FRAME
desktop_x = DesktopMouseX()
desktop_y = DesktopMouseY()
EndIf
Case #PB_EventType_MouseMove
If GetGadgetAttribute(gadget, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
rect\left = WindowX(0)
rect\top = WindowY(0)
rect\right = rect\left + WindowWidth(0)
rect\bottom = rect\top + WindowHeight(0)
Select gadget
Case #RIGHT_FRAME
If rect\right - rect\left > #MINIMUM_WIDTH Or (DesktopMouseX() > rect\right And rect\right - rect\left <= #MINIMUM_WIDTH)
new_w = DesktopMouseX() - rect\left
flag = #True
EndIf
Case #BOTOM_FRAME
If rect\bottom - rect\top > #MINIMUM_HEIGHT Or (DesktopMouseY() > rect\bottom And rect\bottom - rect\top <= #MINIMUM_HEIGHT)
new_h = DesktopMouseY() - rect\top
flag = #True
EndIf
Case #UP_FRAME
tmp = DesktopMouseY() - rect\top
new_y = DesktopMouseY()
If tmp >= 0
new_h = rect\bottom - rect\top - tmp
Else
new_h = rect\bottom - rect\top + Abs(tmp)
EndIf
If new_h > #MINIMUM_HEIGHT
flag = #True
EndIf
Case #LEFT_FRAME
tmp = DesktopMouseX() - rect\left
new_x = DesktopMouseX()
If tmp >= 0
new_w = rect\right - rect\left - tmp
Else
new_w = rect\right - rect\left + Abs(tmp)
EndIf
If new_w > #MINIMUM_WIDTH
flag = #True
EndIf
Case #CAPTION_FRAME
ResizeWindow(0, rect\left + DesktopMouseX() - desktop_x, rect\top + DesktopMouseY() - desktop_y, #PB_Ignore, #PB_Ignore)
desktop_x = DesktopMouseX()
desktop_y = DesktopMouseY()
EndSelect
If flag
ResizeWindow(0, new_x, new_y, new_w, new_h)
DrawCanvas()
EndIf
ElseIf GetGadgetAttribute(gadget, #PB_Canvas_Buttons) = #Null
Select gadget
Case #UP_FRAME
canvas_x = GetGadgetAttribute(gadget, #PB_Canvas_MouseX)
If canvas_x <= #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftUpRightDown)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
ElseIf canvas_x >= GadgetWidth(gadget) - #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftDownRightUp)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
Else
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_UpDown)
EndIf
Case #BOTOM_FRAME
canvas_x = GetGadgetAttribute(gadget, #PB_Canvas_MouseX)
If canvas_x <= #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftDownRightUp)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
ElseIf canvas_x >= GadgetWidth(gadget) - #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftUpRightDown)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
Else
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_UpDown)
EndIf
Case #LEFT_FRAME
canvas_y = GetGadgetAttribute(gadget, #PB_Canvas_MouseY)
If canvas_y <= #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftUpRightDown)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
ElseIf canvas_y >= GadgetHeight(gadget) - #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftDownRightUp)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
Else
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftRight)
EndIf
Case #RIGHT_FRAME
canvas_y = GetGadgetAttribute(gadget, #PB_Canvas_MouseY)
If canvas_y <= #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftDownRightUp)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
ElseIf canvas_y >= GadgetHeight(gadget) - #CORNERS_SIZE
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftUpRightDown)
CompilerElse
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_Cross)
CompilerEndIf
Else
SetGadgetAttribute(gadget, #PB_Canvas_Cursor, #PB_Cursor_LeftRight)
EndIf
EndSelect
EndIf
EndSelect
EndProcedure
If OpenWindow(0, 0, 0, 320, 240, "Test", #PB_Window_ScreenCentered | #PB_Window_BorderLess)
SetWindowColor(0, #BACKGROUND_COLOR)
ButtonGadget(100, 20, 50, 50, 20, "Exit")
ButtonGadget(200, 80, 50, 50, 20, "Min")
; Borders
CanvasGadget(#UP_FRAME, 0, 0, WindowWidth(0), #BORDER_SIZE)
CanvasGadget(#RIGHT_FRAME, WindowWidth(0) - #BORDER_SIZE, #BORDER_SIZE, #BORDER_SIZE, WindowHeight(0) - #BORDER_SIZE * 2)
CanvasGadget(#BOTOM_FRAME, 0, WindowHeight(0) - #BORDER_SIZE, WindowWidth(0), #BORDER_SIZE)
CanvasGadget(#LEFT_FRAME, 0, #BORDER_SIZE, #BORDER_SIZE, WindowHeight(0) - #BORDER_SIZE * 2)
; Caption
CanvasGadget(#CAPTION_FRAME, #BORDER_SIZE, #BORDER_SIZE, WindowWidth(0) - #BORDER_SIZE * 2, #CAPTION_SIZE)
DrawCanvas()
BindGadgetEvent(#UP_FRAME, @CanvasCallback())
BindGadgetEvent(#RIGHT_FRAME, @CanvasCallback())
BindGadgetEvent(#BOTOM_FRAME, @CanvasCallback())
BindGadgetEvent(#LEFT_FRAME, @CanvasCallback())
BindGadgetEvent(#CAPTION_FRAME, @CanvasCallback())
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case 100
Break
Case 200
SetWindowState(0, #PB_Window_Minimize)
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
EndIf