Resize Gadgets & Restore Window Size/Position

Share your advanced PureBasic knowledge/code with the community.
User avatar
Thorsten1867
Addict
Addict
Posts: 1366
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Resize Gadgets & Restore Window Size/Position

Post by Thorsten1867 »

Module for PureBasic V5.2x/V5.3x
Automatically resizing of gadgets if the window size changes.
- resizing of a selected ListIcon column possible
- proportional resizing of two or more gadgets
Save and restore Window size and position
- saving and restoring column width of ListIcons possible

ResizeWindowModule.pbi

Code: Select all

;/ === ResizeWindowModule.pbi ===  [ PureBasic V5.2x/V5.3x ]
;/ Resize window and gadgets (based on RS_ResizeGadget by USCode)
;/ Restore last window position and size  
;/ 
;/ August 2014 by Thorsten1867 (optimized by TS-Soft)

DeclareModule ResizeWindow
  Enumeration 1
    #LEFT    = 1
    #TOP     = 1 << 1
    #RIGHT   = 1 << 2
    #BOTTOM  = 1 << 3
    #HCENTER = 1 << 4
    #VCENTER = 1 << 5
    #HFLOAT  = 1 << 6
    #VFLOAT  = 1 << 7
  EndEnumeration
  Declare AddGadget(WindowID.i, GadgetID.i, Flags.l)
  Declare SetResizeColumn(GadgetID.i, Column.i)
  Declare SetProportionalResize(GadgetID.i, HFactor.i, VFactor.i, Flags.l=#False)
  Declare RemoveGadget(GadgetID.i)
  Declare RemoveWindow(WindowID.i)
  Declare LoadResizeData(AppName.s, File.s="ResizeWindow.reg", Publisher.s="")
  Declare FreeResizeData()
  Declare SaveWindow(WindowsID.i)
  Declare SaveListColums(WindowsID.i, GadgetID.i, Columns.i)
  Declare RestoreWindow(WindowsID.i, IgnorePosition.i=#False, State.i=#False)
  Declare DeleteWindow(WindowsID.i, ListsOnly.i=#False)
EndDeclareModule

Module ResizeWindow

  EnableExplicit
  
  Structure WindowResizeStructure
    ID.i
    X.i
    Y.i
    Width.i
    Height.i
  EndStructure
  Global NewMap Window.WindowResizeStructure()
  
  Structure GadgetResizeStructure
    ID.i
    HND.i
    WinID.i
    Left.i
    Top.i
    Right.i
    Bottom.i
    X.i
    Y.i
    Width.i
    Height.i
    Lock_Left.i
    Lock_Top.i
    Lock_Right.i
    Lock_Bottom.i
    HCenter.i
    VCenter.i
    Typ.i
    Column.i
    HFactor.i
    VFactor.i
    Flags.i
  EndStructure
  Global NewMap Gadget.GadgetResizeStructure()
  
  Structure XMLStructure
    ID.i
    File.s
  EndStructure
  Global XML.XMLStructure
  
  ;- Event-Handler
  
  Procedure ResizeWindowHandler() ; === #PB_Event_SizeWindow ===
    Protected WindowID = EventWindow() ; WindowID of the current window
    Protected.s WinID = Str(WindowID)  ; WindowID as string for MapKey
    Protected.i X, Y, Width, Height, ColWidth, WinWidth, WinHeight, VOffSet, HOffSet
    WinWidth  = WindowWidth(WindowID)
    WinHeight = WindowHeight(WindowID)
    If GetWindowState(WindowID) = #PB_Window_Normal
      Window(WinID)\Width  = WinWidth
      Window(WinID)\Height = WinHeight
    EndIf
    If MapSize(Gadget())
      ForEach Gadget()
        If Gadget()\WinID = WindowID   ; only Gadget from the current window
          If IsGadget(Gadget()\ID)
            X = GadgetX(Gadget()\ID)
            Y = GadgetY(Gadget()\ID)
            Width  = #PB_Ignore
            Height = #PB_Ignore
            If Gadget()\Lock_Left   = #False : X = WinWidth  - Gadget()\Left : EndIf
            If Gadget()\Lock_Top    = #False : Y = WinHeight - Gadget()\Top  : EndIf       
            If Gadget()\Lock_Right  = #True  : Width  = WinWidth  - X - Gadget()\Right  : EndIf
            If Gadget()\Lock_Bottom = #True  : Height = WinHeight - Y - Gadget()\Bottom : EndIf
            If Gadget()\HCenter : X = (WinWidth   - GadgetWidth(Gadget()\ID))  / 2 : EndIf
            If Gadget()\VCenter : Y = (WinHeight  - GadgetHeight(Gadget()\ID)) / 2 : EndIf
            If Gadget()\VFactor ;{ Vertical resize/move by factor 
              If Gadget()\Lock_Top And Gadget()\Lock_Bottom  ; Resize Height by Factor
                Height = Gadget()\Height + ((Height - Gadget()\Height) / Gadget()\VFactor)
              ElseIf Gadget()\Lock_Bottom ; Move and/or Resize by Factor
                VOffSet = (Y - Gadget()\Y) / Gadget()\VFactor
                If Gadget()\Flags & #VFLOAT             
                  Height = Gadget()\Height + VOffSet
                EndIf 
                Y = Gadget()\Y + VOffSet
              EndIf
            EndIf ;}
            If Gadget()\HFactor ;{ horizontal resize/move by factor 
              If Gadget()\Lock_Left And Gadget()\Lock_Right ; Resize Width by Factor
                Width = Gadget()\Width + ((Width - Gadget()\Width) / Gadget()\HFactor)
              ElseIf Gadget()\Lock_Right
                HOffSet = (X - Gadget()\X) / Gadget()\HFactor
                If Gadget()\Flags & #HFLOAT ; Move and/or Resize by Factor
                  Width = Gadget()\Width + HOffSet
                EndIf
                X = Gadget()\X + HOffSet
              EndIf
            EndIf ;}
            Select Gadget()\Typ
              Case #PB_GadgetType_ListIcon     ;{ ListIconGadget
                If Width <> #PB_Ignore
                  ColWidth = GetGadgetItemAttribute(Gadget()\ID, #Null, #PB_ListIcon_ColumnWidth, Gadget()\Column) + (Width - GadgetWidth(Gadget()\ID))
                  SetGadgetItemAttribute(Gadget()\ID, #Null, #PB_ListIcon_ColumnWidth, ColWidth, Gadget()\Column)
                EndIf ;}
              Case #PB_GadgetType_ExplorerList ;{ ExplorerListGadget
                If Width <> #PB_Ignore
                  ColWidth = GetGadgetItemAttribute(Gadget()\ID, #Null, #PB_Explorer_ColumnWidth, Gadget()\Column) + (Width - GadgetWidth(Gadget()\ID))
                  SetGadgetItemAttribute(Gadget()\ID, #Null, #PB_Explorer_ColumnWidth, ColWidth, Gadget()\Column)
                EndIf ;}
            EndSelect
            ResizeGadget(Gadget()\ID, X, Y, Width, Height)
            CompilerIf #PB_Compiler_OS = #PB_OS_Windows
              CompilerIf #PB_Compiler_Version >= 530
              InvalidateRect_(WindowID(WindowID),0,0)
              While WindowEvent() : Wend
              CompilerEndIf
            CompilerEndIf
          EndIf
        EndIf
      Next
    EndIf
  EndProcedure
  
  Procedure MoveWindowHandler()   ; === #PB_Event_MoveWindow ===
    Protected WindowID = EventWindow() ; WindowID of the current window
    Protected.s WinID = Str(WindowID)  ; WindowID as string for MapKey
    If GetWindowState(WindowID) = #PB_Window_Normal
      Window(WinID)\X = WindowX(WindowID)
      Window(WinID)\Y = WindowY(WindowID)
    EndIf
  EndProcedure
  
  ;- Resize Gadgets
  
  Procedure AddGadget(WindowID.i, GadgetID.i, Flags.l) ; Add gadget to resize
    Protected.i WinWidth, WinHeight, X, Y
    Protected.s GID = Str(GadgetID)
    If IsWindow(WindowID)
      WinWidth  = WindowWidth(WindowID)
      WinHeight = WindowHeight(WindowID)
      If IsGadget(GadgetID)
        Gadget(GID)\WinID = WindowID
        Gadget(GID)\ID    = GadgetID
        If Flags & #LEFT   : Gadget(GID)\Lock_Left    = #True : EndIf
        If Flags & #TOP    : Gadget(GID)\Lock_Top     = #True : EndIf
        If Flags & #RIGHT  : Gadget(GID)\Lock_Right   = #True : EndIf
        If Flags & #BOTTOM : Gadget(GID)\Lock_Bottom  = #True : EndIf
        Gadget(GID)\X = GadgetX(GadgetID)
        Gadget(GID)\Y = GadgetY(GadgetID)
        Gadget(GID)\Width  = GadgetWidth(GadgetID)
        Gadget(GID)\Height = GadgetHeight(GadgetID)
        If Flags & #HCENTER ;{ Center
          X = (WinWidth - Gadget(GID)\Width) / 2
          Gadget(GID)\HCenter = #True
        Else
          X = Gadget(GID)\X
        EndIf
        If Flags & #VCENTER
          Y = (WinHeight - Gadget(GID)\Height) / 2
          Gadget(GID)\VCenter = #True
        Else
          Y = Gadget(GID)\Y
        EndIf ;}
        If Gadget(GID)\Lock_Left   = #False : Gadget(GID)\Left   = WinWidth  - X : EndIf
        If Gadget(GID)\Lock_Top    = #False : Gadget(GID)\Top    = WinHeight - Y : EndIf
        If Gadget(GID)\Lock_Right  = #True  : Gadget(GID)\Right  = WinWidth  - (X + Gadget(GID)\Width)  : EndIf
        If Gadget(GID)\Lock_Bottom = #True  : Gadget(GID)\Bottom = WinHeight - (Y + Gadget(GID)\Height) : EndIf
        If Flags & #HCENTER Or Flags & #VCENTER
          ResizeGadget(GadgetID, X, Y, #PB_Ignore, #PB_Ignore)
        EndIf
      EndIf
    EndIf
  EndProcedure
  
  Procedure SetResizeColumn(GadgetID.i, Column.i)      ; Set column to resize (ListIcon/ExplorerList)
    Protected.s GID  = Str(GadgetID)
    If IsGadget(GadgetID)
      Gadget(GID)\Typ = GadgetType(GadgetID)
      Gadget(GID)\Column = Column
    EndIf
  EndProcedure
  
  Procedure SetProportionalResize(GadgetID.i, HFactor.i, VFactor.i, Flags.l=#False)
    Protected.s GID  = Str(GadgetID)
    Gadget(GID)\HFactor = HFactor
    Gadget(GID)\VFactor = VFactor
    Gadget(GID)\Flags   = Flags
  EndProcedure
  
  Procedure RemoveGadget(GadgetID.i)                   ; Stop resizing gadget
    DeleteMapElement(Gadget(), Str(GadgetID))
  EndProcedure
  
  Procedure RemoveWindow(WindowID.i)                   ; Remove all resize data for this window (-> CloseWindow)
    DeleteMapElement(Window(), Str(WindowID))
    ForEach Gadget()
      If Gadget()\WinID = WindowID
        DeleteMapElement(Gadget(), MapKey(Gadget()))
      EndIf
    Next
  EndProcedure
  
  ;- Restore Window
  
  Procedure.i GetGadgetNode(*Window, GadgetID.i)
    Protected *Gadget
    If *Window
      *Gadget = XMLNodeFromPath(*Window, "Gadget")
      While *Gadget
        If GetXMLAttribute(*Gadget, "GID") = Str(GadgetID)
          ProcedureReturn *Gadget
        EndIf
        *Gadget = NextXMLNode(*Gadget)
      Wend
    EndIf
  EndProcedure
  
  Procedure.s GetDefaultPath(AppName.s, Publisher.s="")
    Protected Path.s, Slash.s
    CompilerSelect #PB_Compiler_OS
      CompilerCase #PB_OS_Windows
        Slash = "\"
        Path = GetEnvironmentVariable("APPDATA") + "\"
      CompilerCase #PB_OS_MacOS
        Slash = "/"
        Path = GetHomeDirectory() + "Library/Application Support/"
      CompilerCase #PB_OS_Linux
        Slash = "/"
        Path = GetHomeDirectory() + "."   
    CompilerEndSelect
    If Publisher
      Path + Publisher + Slash
      If Not FileSize(Path) = - 2
        CreateDirectory(Path)
      EndIf
    EndIf
    Path + AppName + Slash
    If Not FileSize(Path) = - 2
      CreateDirectory(Path)
    EndIf
    If FileSize(Path) = -2
      ProcedureReturn Path
    EndIf
  EndProcedure
  
  Procedure LoadResizeData(AppName.s, File.s="ResizeWindow.reg", Publisher.s="")  ; Open or create registry
    Protected *MainNode, *Node
    If GetPathPart(File) = ""
      File = GetDefaultPath(AppName, Publisher) + File
    EndIf
    ;{ Load XML-File
    XML\ID = LoadXML(#PB_Any, File, #PB_UTF8)
    If XML\ID And XMLStatus(XML\ID) = #PB_XML_Success
      XML\File = File
      ProcedureReturn #True
    EndIf ;}
    ;{ Create new XML
    XML\ID = CreateXML(#PB_Any, #PB_UTF8)
    If XML\ID
      CompilerIf #PB_Compiler_Version >= 530
        *MainNode = CreateXMLNode(RootXMLNode(XML\ID), "Registry")
        If *MainNode
          XML\File = File
          ProcedureReturn #True
        EndIf
      CompilerElse
        *MainNode = CreateXMLNode(RootXMLNode(XML\ID))
        If *MainNode
          SetXMLNodeName(*MainNode, "Registry")
          XML\File = File
          ProcedureReturn #True
        EndIf
      CompilerEndIf
    EndIf ;}
    XML\File = ""
    ProcedureReturn #False
  EndProcedure
  
  Procedure FreeResizeData()
    If IsXML(XML\ID)
      FreeXML(XML\ID)
    EndIf
  EndProcedure
  
  
  Procedure SaveWindow(WindowsID.i)                    ; save position and size of window
    Protected *WinID, *MainNode
    Protected.i WinX, WinY, WinWidth, WinHeight, WinState = GetWindowState(WindowsID)
    If IsWindow(WindowsID) 
      If WinState = #PB_Window_Normal ;{ Get position and size
        WinX      = WindowX(WindowsID)
        WinY      = WindowY(WindowsID)
        WinWidth  = WindowWidth(WindowsID)
        WinHeight = WindowHeight(WindowsID)
      Else
        If FindMapElement(Window(), Str(WindowsID))
          WinX      = Window()\X
          WinY      = Window()\Y
          WinWidth  = Window()\Width
          WinHeight = Window()\Height
        Else
          ProcedureReturn #False
        EndIf
      EndIf ;}
      If IsXML(XML\ID)
        *WinID = XMLNodeFromID(XML\ID, Str(WindowsID))
        If *WinID
          SetXMLAttribute(*WinID, "X", Str(WinX))
          SetXMLAttribute(*WinID, "Y", Str(WinY))
          SetXMLAttribute(*WinID, "Width", Str(WinWidth))
          SetXMLAttribute(*WinID, "Hight", Str(WinHeight))
          SetXMLAttribute(*WinID, "State", Str(WinState))
        Else
          *MainNode = MainXMLNode(XML\ID)
          If *MainNode
            CompilerIf #PB_Compiler_Version >= 530
              *WinID = CreateXMLNode(*MainNode, "Window", -1)
              If *WinID
                SetXMLAttribute(*WinID, "ID", Str(WindowsID))
                SetXMLAttribute(*WinID, "X",  Str(WinX))
                SetXMLAttribute(*WinID, "Y",  Str(WinY))
                SetXMLAttribute(*WinID, "Width", Str(WinWidth))
                SetXMLAttribute(*WinID, "Hight", Str(WinHeight))
                SetXMLAttribute(*WinID, "State", Str(WinState))
              EndIf
            CompilerElse
              *WinID = CreateXMLNode(*MainNode, -1)
              If *WinID
                SetXMLNodeName(*WinID, "Window")
                SetXMLAttribute(*WinID, "ID", Str(WindowsID))
                SetXMLAttribute(*WinID, "X",  Str(WinX))
                SetXMLAttribute(*WinID, "Y",  Str(WinY))
                SetXMLAttribute(*WinID, "Width", Str(WinWidth))
                SetXMLAttribute(*WinID, "Hight", Str(WinHeight))
                SetXMLAttribute(*WinID, "State", Str(WinState))
              EndIf
            CompilerEndIf
          EndIf
        EndIf
        SaveXML(XML\ID, XML\File)
      EndIf
    EndIf
  EndProcedure
  
  Procedure SaveListColums(WindowsID.i, GadgetID.i, Columns.i)
    Protected *WinID, *Gadget, *Column, col.i
    If IsGadget(GadgetID)
      If IsXML(XML\ID)
        *WinID = XMLNodeFromID(XML\ID, Str(WindowsID))
        If *WinID
          *Gadget = GetGadgetNode(*WinID, GadgetID)
          If *Gadget ;{ Update GadgetNode
            For col = 0 To Columns-1
              *Column = ChildXMLNode(*Gadget, col+1)
              If *Column
                Select GadgetType(GadgetID)
                  Case #PB_GadgetType_ListIcon
                    SetXMLAttribute(*Column, "pos", Str(col))
                    SetXMLAttribute(*Column, "width", Str(GetGadgetItemAttribute(GadgetID, #Null, #PB_ListIcon_ColumnWidth, col)))
                  Case #PB_GadgetType_ExplorerList
                    SetXMLAttribute(*Column, "pos", Str(col))
                    SetXMLAttribute(*Column, "width", Str(GetGadgetItemAttribute(GadgetID, #Null, #PB_Explorer_ColumnWidth, col)))
                EndSelect  
              EndIf
            Next ;}
          Else       ;{ Create new GadgetNode
            CompilerIf #PB_Compiler_Version >= 530
              *Gadget = CreateXMLNode(*WinID, "Gadget", -1)
              If *Gadget
                SetXMLAttribute(*Gadget, "GID", Str(GadgetID))
                For col = 0 To Columns-1
                  *Column = CreateXMLNode(*Gadget, "Column", -1)
                  If *Column
                    Select GadgetType(GadgetID)
                      Case #PB_GadgetType_ListIcon
                        SetXMLAttribute(*Column, "pos", Str(col))
                        SetXMLAttribute(*Column, "width", Str(GetGadgetItemAttribute(GadgetID, #Null, #PB_ListIcon_ColumnWidth, col)))
                      Case #PB_GadgetType_ExplorerList
                        SetXMLAttribute(*Column, "pos", Str(col))
                        SetXMLAttribute(*Column, "width", Str(GetGadgetItemAttribute(GadgetID, #Null, #PB_Explorer_ColumnWidth, col)))
                    EndSelect  
                  EndIf
                Next
              EndIf
            CompilerElse
              *Gadget = CreateXMLNode(*WinID, -1)
              If *Gadget
                SetXMLNodeName(*Gadget, "Gadget")
                SetXMLAttribute(*Gadget, "GID", Str(GadgetID))
                For col = 0 To Columns-1
                  *Column = CreateXMLNode(*Gadget, -1)
                  If *Column
                    Select GadgetType(GadgetID)
                      Case #PB_GadgetType_ListIcon
                        SetXMLNodeName(*Column, "Column")
                        SetXMLAttribute(*Column, "pos", Str(col))
                        SetXMLAttribute(*Column, "width", Str(GetGadgetItemAttribute(GadgetID, #Null, #PB_ListIcon_ColumnWidth, col)))
                      Case #PB_GadgetType_ExplorerList
                        SetXMLNodeName(*Column, "Column")
                        SetXMLAttribute(*Column, "pos", Str(col))
                        SetXMLAttribute(*Column, "width", Str(GetGadgetItemAttribute(GadgetID, #Null, #PB_Explorer_ColumnWidth, col)))
                    EndSelect  
                  EndIf
                Next
              EndIf
            CompilerEndIf ;}
          EndIf
        EndIf
        SaveXML(XML\ID, XML\File)
      EndIf
    EndIf
  EndProcedure
  

  Procedure RestoreWindow(WindowsID.i, IgnorePosition.i=#False, State.i=#False) ; restore position and size of window
    Protected *WinID, *Gadget, *ChildNode
    Protected.i WinX, WinY, WinWidth, WinHeight, WinState, GadgetID
    If IsXML(XML\ID)
      *WinID = XMLNodeFromID(XML\ID, Str(WindowsID))
      If *WinID
        WinX      = Val(GetXMLAttribute(*WinID, "X"))
        WinY      = Val(GetXMLAttribute(*WinID, "Y"))
        WinWidth  = Val(GetXMLAttribute(*WinID, "Width"))
        WinHeight = Val(GetXMLAttribute(*WinID, "Hight"))
        WinState  = Val(GetXMLAttribute(*WinID, "State"))
        If IsWindow(WindowsID)
          If IgnorePosition
            ResizeWindow(WindowsID, #PB_Ignore, #PB_Ignore, WinWidth, WinHeight)
          Else
            ResizeWindow(WindowsID, WinX, WinY, WinWidth, WinHeight)
          EndIf
          If State : SetWindowState(WindowsID, WinState) : EndIf
          If XMLChildCount(*WinID) ;{ Restore Columns
            *Gadget = XMLNodeFromPath(*WinID, "Gadget")
            While *Gadget
              GadgetID = Val(GetXMLAttribute(*Gadget, "GID"))
              If IsGadget(GadgetID)
                *ChildNode = ChildXMLNode(*Gadget)
                While *ChildNode
                  Select GadgetType(GadgetID)
                    Case #PB_GadgetType_ListIcon
                      SetGadgetItemAttribute(GadgetID, #Null, #PB_ListIcon_ColumnWidth, Val(GetXMLAttribute(*ChildNode, "width")), Val(GetXMLAttribute(*ChildNode, "pos")))
                    Case #PB_GadgetType_ExplorerList
                      SetGadgetItemAttribute(GadgetID, #Null, #PB_Explorer_ColumnWidth, Val(GetXMLAttribute(*ChildNode, "width")), Val(GetXMLAttribute(*ChildNode, "pos")))
                  EndSelect  
                  *ChildNode = NextXMLNode(*ChildNode)
                Wend
              EndIf
              *Gadget = NextXMLNode(*Gadget)
            Wend
          EndIf ;}
        EndIf
      EndIf
    EndIf
  EndProcedure
  
  
  Procedure DeleteWindow(WindowsID.i, ListsOnly.i=#False)
    Protected *WinID, *Gadget
    If IsXML(XML\ID)
      *WinID = XMLNodeFromID(XML\ID, Str(WindowsID))
      If *WinID
        If ListsOnly
          *Gadget = XMLNodeFromPath(*WinID, "Gadget")
          While *Gadget
            DeleteXMLNode(*Gadget)
            *Gadget = NextXMLNode(*Gadget)
          Wend
        Else
            DeleteXMLNode(*WinID)
        EndIf
      EndIf
      SaveXML(XML\ID, XML\File)
    EndIf
  EndProcedure
  
  
  ;- Bind Events to Event Handler
  
  BindEvent(#PB_Event_SizeWindow, @ResizeWindowHandler())
  BindEvent(#PB_Event_MoveWindow, @MoveWindowHandler())
  
  EndModule
  
  
CompilerIf #PB_Compiler_IsMainFile
  
  #Window = 0
  #StatusBar = 1
  Enumeration
    #Button_0
    #Button_1
    #Button_2
    #Button_3
    #Button_4
    #List
    #Editor1
    #Editor2
  EndEnumeration
  
  ResizeWindow::LoadResizeData("MyProg") ; Load at program start
  
  If OpenWindow(#Window, 358, 178, 300, 275, " Test ResizeWindow (Module)",  #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    
    WindowBounds(#Window, 250, 200, #PB_Ignore, #PB_Ignore)
    
    ButtonGadget(#Button_0, 5, 5, 50, 25, "Resize -")
    ButtonGadget(#Button_1, 245, 5, 50, 25, "Resize +")
    ButtonGadget(#Button_2, 5, 240, 50, 25, "Reset")
    ButtonGadget(#Button_3, 250, 125, 45, 20, "Button")
    ListIconGadget(#List, 55, 30, 190, 210, "Column 0", 56, #PB_ListIcon_GridLines)
    AddGadgetColumn(#List, 1, "Column 1", 130)
    ButtonGadget(#Button_4, 5, 245, 80, 25, "Center")
    EditorGadget(#Editor1, 250, 35, 45, 85)
    EditorGadget(#Editor2, 250, 150, 45, 90)
    
    ResizeWindow::AddGadget(#Window, #Button_0, ResizeWindow::#LEFT | ResizeWindow::#TOP)
    ResizeWindow::AddGadget(#Window, #Button_1, ResizeWindow::#TOP  | ResizeWindow::#RIGHT)
    
    UseModule ResizeWindow
    AddGadget(#Window, #Button_2, #LEFT|#BOTTOM)
    AddGadget(#Window, #Button_3, #RIGHT|#BOTTOM)
    AddGadget(#Window, #List, #LEFT|#TOP|#RIGHT|#BOTTOM)
    SetResizeColumn(#List, 1)
    AddGadget(#Window, #Editor1, #RIGHT|#TOP|#BOTTOM)
    AddGadget(#Window, #Editor2, #RIGHT|#BOTTOM)
    SetProportionalResize(#Editor1, #False, 2)             ; Factor: Resize / 2
    SetProportionalResize(#Button_3, #False, 2)            ; Factor: Move / 2
    SetProportionalResize(#Editor2, #False, 2, #VFLOAT)    ; Factor: Resize & Move / 2
    AddGadget(#Window, #Button_4, #HCENTER) 
    UnuseModule ResizeWindow
    
    ExitWindow = #False
    
    ResizeWindow::RestoreWindow(#Window) ; Restore last size and position
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          ExitWindow = #True
        Case #PB_Event_Gadget
          Select EventGadget()
            Case #Button_0
              ResizeWindow(#Window, #PB_Ignore, #PB_Ignore, 250, 300)
            Case #Button_1
              ResizeWindow(#Window, #PB_Ignore, #PB_Ignore, 350, 400)
            Case #Button_2
              ResizeWindow::DeleteWindow(#Window) ; Delete Position and Size
              ResizeWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 300)
          EndSelect
      EndSelect
    Until ExitWindow
    
    ResizeWindow::SaveWindow(#Window)
    ResizeWindow::SaveListColums(#Window, #List, 2)
    
    ResizeWindow::RemoveWindow(#Window)
    
    CloseWindow(#Window)
  EndIf
  
CompilerEndIf
Last edited by Thorsten1867 on Sat Aug 02, 2014 8:05 am, edited 8 times in total.
Translated with http://www.DeepL.com/Translator

Download of PureBasic - Modules
Download of PureBasic - Programs

[Windows 11 x64] [PB V5.7x]
davido
Addict
Addict
Posts: 1890
Joined: Fri Nov 09, 2012 11:04 pm
Location: Uttoxeter, UK

Re: Resize Gadgets & Restore Window Size/Position

Post by davido »

Very nice, Thank you for sharing. :D
DE AA EB
User avatar
Thorsten1867
Addict
Addict
Posts: 1366
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Re: Resize Gadgets & Restore Window Size/Position

Post by Thorsten1867 »

Added: Flag 'IgnorePosition' to 'RestoreWindow()'
Translated with http://www.DeepL.com/Translator

Download of PureBasic - Modules
Download of PureBasic - Programs

[Windows 11 x64] [PB V5.7x]
User avatar
Thorsten1867
Addict
Addict
Posts: 1366
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Re: Resize Gadgets & Restore Window Size/Position

Post by Thorsten1867 »

Added: Proportional resizing of two or more gadgets
Translated with http://www.DeepL.com/Translator

Download of PureBasic - Modules
Download of PureBasic - Programs

[Windows 11 x64] [PB V5.7x]
User avatar
Thorsten1867
Addict
Addict
Posts: 1366
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Re: Resize Gadgets & Restore Window Size/Position

Post by Thorsten1867 »

Added:
Default path for the file with the resizing data.
Translated with http://www.DeepL.com/Translator

Download of PureBasic - Modules
Download of PureBasic - Programs

[Windows 11 x64] [PB V5.7x]
User avatar
electrochrisso
Addict
Addict
Posts: 980
Joined: Mon May 14, 2007 2:13 am
Location: Darling River

Re: Resize Gadgets & Restore Window Size/Position

Post by electrochrisso »

Great coding Thorsten, very handy, thanks for sharing. :)
PureBasic! Purely one of the best 8)
SeregaZ
Enthusiast
Enthusiast
Posts: 619
Joined: Fri Feb 20, 2009 9:24 am
Location: Almaty (Kazakhstan. not Borat, but Triple G)
Contact:

Re: Resize Gadgets & Restore Window Size/Position

Post by SeregaZ »

how to block restore window button on titlebar? i mean my programm must start with SetWindowState(#Window01, #PB_Window_Maximize) command. so it must have only two button - full window and minimize. how to block restore button?

ops... i found it - | #PB_Window_MaximizeGadget exclude this param.

BUT! now how to block double click on title bar, that return window to OpenWindow(#Window01, 0, 0, width, height size?

i try to get workarea and open window to full this area:
SystemParametersInfo_(#SPI_GETWORKAREA, 0, @rWorkArea.rect, 0)
If OpenWindow(#Window01, 0, 0, rWorkArea\right, rWorkArea\bottom...

but doubleclick anyway move my window and looks ugly after it. help me to block this event for titlebar.
mestnyi
Addict
Addict
Posts: 1001
Joined: Mon Nov 25, 2013 6:41 am

Re: Resize Gadgets & Restore Window Size/Position

Post by mestnyi »

Code: Select all

       
            ;автор : mestnyi
        ;почта : mestnyi33@.ya.ru
        ;помогли Никита Однороб,Пётр и kvitaliy
       
        ;GadgetAnchor.pbi
       
      ;EnableExplicit
         Structure GadgetResizeAnchor
           
            L.b   ;влево
            T.b   ;верх
            R.b   ;вправо
            B.b   ;вниз
         
            LT.b  ;влево верх
            LB.b  ;влево вниз
            RT.b  ;вправо верх
            RB.b  ;вправо вниз
           
            LR.b  ;влево вправо
            TB.b  ;верх вниз
             
            CL.b  ;везде
            CE.b  ;вцентре
             
            LTR.b ;влево верх вправо
            LBR.b ;влево вниз вправо
            TLB.b ;верх влево вниз
            TRB.b ;верх вправо вниз
         EndStructure
         Structure Neighbor
            ID.i
            P.i
            L.i
            T.i
            R.i
            B.i
            X.i
            Y.i
            W.i
            H.i
            Z.i
            Align.GadgetResizeAnchor   ;пропорционально
         EndStructure
         Structure GadgetResizeStructure
            ID.i
            P.i
            L.i
            T.i
            R.i
            B.i
            X.i
            Y.i
            W.i
            H.i
            N.Neighbor   ;пропорционально
            Align.GadgetResizeAnchor
         EndStructure
         Global NewMap Gadget.GadgetResizeStructure()
         
        ProcedureDLL AlignGadgetResize(EventWindow.i)
         Protected.i G,P,x,y,w,h
         
          If MapSize(Gadget())
           ForEach Gadget()
            G=Gadget()\ID
            N=Gadget()\N\ID ;сосед
            P=Gadget()\P ;радитель
            If EventWindow=P
             If Gadget()\Align\L ;влево всередине Ok
              y =WindowHeight(P) -Gadget()\T
              y = Gadget()\Y + ((y -Gadget()\Y) / 2)
              ResizeGadget(G,#PB_Ignore,y,#PB_Ignore,#PB_Ignore)
             EndIf
             If Gadget()\Align\T ;верх всередина Ok
              x =WindowWidth(P) -Gadget()\L
              x =Gadget()\X +((x -Gadget()\X) /2)
              ResizeGadget(G,x,#PB_Ignore,#PB_Ignore,#PB_Ignore)
             EndIf
             If Gadget()\Align\R ;вправо всередине Ok
              x =WindowWidth(P) -Gadget()\L
              y =WindowHeight(P) -Gadget()\T
              y = Gadget()\Y + ((y -Gadget()\Y) / 2)
              ResizeGadget(G,x,y,#PB_Ignore,#PB_Ignore)
             EndIf
             If Gadget()\Align\B ;внизу всередине Ok
              x =WindowWidth(P) -Gadget()\L
              x =Gadget()\X +((x -Gadget()\X) /2)
              y =WindowHeight(P) -Gadget()\T
              ResizeGadget(G,x,y,#PB_Ignore,#PB_Ignore)
             EndIf
             
             If Gadget()\Align\CE ;вценре Ok
              x =WindowWidth(P) -Gadget()\L
              x =Gadget()\X +((x -Gadget()\X) /2)
              y =WindowHeight(P) -Gadget()\T
              y = Gadget()\Y + ((y -Gadget()\Y) / 2)
              ResizeGadget(G,x,y,#PB_Ignore,#PB_Ignore)
             EndIf
             If Gadget()\Align\CL ;везде Ok
              w =WindowWidth(P) -GadgetX(G) -Gadget()\R
              h =WindowHeight(P) -GadgetY(G) -Gadget()\B
              ResizeGadget(G,#PB_Ignore,#PB_Ignore,w,h)
             EndIf
           
             If Gadget()\Align\LT ;влево верх Ok
              x =Gadget()\X
              y =Gadget()\Y
              ResizeGadget(G,x,y,#PB_Ignore,#PB_Ignore)
             EndIf
             If Gadget()\Align\LB ;влево вниз Ok
              y =WindowHeight(P)-GadgetHeight(G) -Gadget()\B
              x=Gadget()\X
              ResizeGadget(G,x,y,#PB_Ignore,#PB_Ignore)
             EndIf
             If Gadget()\Align\RT ;вправо верх Ok
              x =WindowWidth(P)-GadgetWidth(G) -Gadget()\R
              y=Gadget()\Y
              ResizeGadget(G,x,y,#PB_Ignore,#PB_Ignore)
             EndIf
             If Gadget()\Align\RB ;вправо вниз Ok
              x =WindowWidth(P)-GadgetWidth(G) -Gadget()\R
              y =WindowHeight(P) -GadgetHeight(G) -Gadget()\B
              ResizeGadget(G,x,y,#PB_Ignore,#PB_Ignore)
             EndIf
             
             If Gadget()\Align\LR ;Ok
              y =WindowHeight(P) -Gadget()\T
              y = Gadget()\Y + ((y -Gadget()\Y) / 2)
              w =WindowWidth(P) -GadgetX(G) -Gadget()\R
              ResizeGadget(G,#PB_Ignore,y,w,#PB_Ignore)
             EndIf
             If Gadget()\Align\TB ;Ok
              x =WindowWidth(P) -Gadget()\L
              x =Gadget()\X +((x -Gadget()\X) /2)
              h =WindowHeight(P) -GadgetY(G) -Gadget()\B
              ResizeGadget(G,x,#PB_Ignore,#PB_Ignore,h)
             EndIf
             
             If Gadget()\Align\LTR ;Ok
              w =WindowWidth(P) -GadgetX(G) -Gadget()\R
              ResizeGadget(G,#PB_Ignore,#PB_Ignore,w,#PB_Ignore)
             EndIf
             If Gadget()\Align\LBR ;Ok
              y =WindowHeight(P) -GadgetHeight(G) -Gadget()\B
              w =WindowWidth(P) -GadgetX(G) -Gadget()\R
              ResizeGadget(G,#PB_Ignore,y,w,#PB_Ignore)
             EndIf
             If Gadget()\Align\TLB ;Ok
              h =WindowHeight(P) -GadgetY(G) -Gadget()\B
              ResizeGadget(G,#PB_Ignore,#PB_Ignore,#PB_Ignore,h)
             EndIf
             If Gadget()\Align\TRB ;Ok
              x =(WindowWidth(P)-GadgetWidth(G))-Gadget()\R
              h =WindowHeight(P) -GadgetY(G) -Gadget()\B
              ResizeGadget(G,x,#PB_Ignore,#PB_Ignore,h)
             EndIf
           
             ;относительно соседа
             If Gadget()\N\Align\RB ;вправо вниз относительно соседа снизу Ok
              x =(WindowWidth(P)-GadgetWidth(G))-Gadget()\R
              h = GadgetY(N)-Gadget()\Y-Gadget()\N\Z
              ResizeGadget(G,x,#PB_Ignore,#PB_Ignore,h)
             EndIf
             If Gadget()\N\Align\RT ;вправо верх относительно соседа сверху Ok
              x =WindowWidth(P)-Gadget()\L
              y =(GadgetY(N)+GadgetHeight(N)) + Gadget()\N\Z
              h=WindowHeight(P)  -y - Gadget()\B
              ResizeGadget(G,x,y,#PB_Ignore,h)
             EndIf
             
             
             
              If Gadget()\ID=180
               Debug  "-----++------"
               Debug X
               Debug Y
               Debug W
               Debug H
              EndIf
             
            EndIf
           Next
          EndIf
        EndProcedure
       
        ProcedureDLL AlignGadgetCallBack()
         CompilerIf #PB_Compiler_OS=#PB_OS_Windows
          RedrawWindow_(WindowID(EventWindow()), 0, 0, #RDW_ALLCHILDREN|#RDW_UPDATENOW)
         CompilerEndIf
        SmartWindowRefresh(EventWindow(),#True)
         AlignGadgetResize(EventWindow())
        EndProcedure
         
        ProcedureDLL GadgetAlign(Window.i, Gadget.i, Left.b=#False, Top.b=#False, Right.b=#False, Bottom.b=#False, Neighbor.i=-1)
         If IsWindow(Window) And IsGadget(Gadget)
          Static OldWindow=-1
          If OldWindow<>Window
           BindEvent(#PB_Event_SizeWindow,@AlignGadgetCallBack(),Window)
           OldWindow=Window
          EndIf
          Protected.s G = Str(Gadget)
         
          If (Left=#True And Top=#False And Right=#False And Bottom=#False And Neighbor=-1)       ;влево  Ok
           Gadget(G)\Align\L=#True
          EndIf
          If (Left=#False And Top=#True And Right=#False And Bottom=#False And Neighbor=-1)       ;верх   Ok
           Gadget(G)\Align\T=#True
          EndIf
          If (Left=#False And Top=#False And Right=#True And Bottom=#False And Neighbor=-1)       ;вправо Ok
           Gadget(G)\Align\R=#True
          EndIf
          If (Left=#False And Top=#False And Right=#False And Bottom=#True And Neighbor=-1)       ;вниз   Ok
           Gadget(G)\Align\B=#True
          EndIf
         
          If (Left=#False And Top=#False And Right=#False And Bottom=#False And Neighbor=-1)      ;вцентре Ok
           Gadget(G)\Align\CE=#True
          EndIf
          If (Left=#True And Top=#True And Right=#True And Bottom=#True And Neighbor=-1)          ;везде   Ok
           Gadget(G)\Align\CL=#True
          EndIf
         
          If (Left=#True And Top=#True And Right=#False And Bottom=#False And Neighbor=-1)        ;влево верх  Ok
           Gadget(G)\Align\LT=#True
          EndIf
          If (Left=#True And Top=#False And Right=#False And Bottom=#True And Neighbor=-1)        ;влево вниз  Ok
           Gadget(G)\Align\LB=#True
          EndIf
          If (Left=#False And Top=#True And Right=#True And Bottom=#False And Neighbor=-1)        ;вправо верх Ok
           Gadget(G)\Align\RT=#True
          EndIf
          If (Left=#False And Top=#False And Right=#True And Bottom=#True And Neighbor=-1)        ;вправо вниз Ok
           Gadget(G)\Align\RB=#True
          EndIf
         
          If (Left=#True And Top=#False And Right=#True And Bottom=#False And Neighbor=-1)        ;влево вправо Ok
           Gadget(G)\Align\LR=#True
          EndIf
          If (Left=#False And Top=#True And Right=#False And Bottom=#True And Neighbor=-1)        ;верх вниз    Ok
           Gadget(G)\Align\TB=#True
          EndIf
         
          If (Left=#True And Top=#True And Right=#True And Bottom=#False And Neighbor=-1)         ;влево верх вправо Ok
           Gadget(G)\Align\LTR=#True
          EndIf
          If (Left=#True And Top=#False And Right=#True And Bottom=#True And Neighbor=-1)         ;влево вниз вправо Ok
           Gadget(G)\Align\LBR=#True
          EndIf
          If (Left=#False And Top=#True And Right=#True And Bottom=#True And Neighbor=-1)         ;верх вправо вниз  Ok
           Gadget(G)\Align\TRB=#True
          EndIf
          If (Left=#True And Top=#True And Right=#False And Bottom=#True And Neighbor=-1)         ;верх влево вниз   Ok
           Gadget(G)\Align\TLB=#True
          EndIf
         
         
         
         If IsGadget(Neighbor)
          If (Left=#False And Top=#True And Right=#True And Bottom=#True And Neighbor)         ;вправо, верх и вниз относительно соседа Ok
           If GadgetY(Neighbor)>GadgetY(Gadget)
            Gadget(G)\N\ID=Neighbor
            Gadget(G)\N\Align\RB=#True
            Gadget(G)\N\Z=GadgetY(Neighbor)-(GadgetY(Gadget) +GadgetHeight(Gadget))
           Else
            Gadget(G)\N\ID=Neighbor
            Gadget(G)\N\Align\RT=#True
            Gadget(G)\N\Z=GadgetY(Gadget)-(GadgetY(Neighbor) +GadgetHeight(Neighbor))
           EndIf
          EndIf
          If (Left=#True And Top=#True And Right=#False And Bottom=#True And Neighbor)         ;влево, верх и вниз относительно соседа Ok
           If GadgetY(Neighbor)>GadgetY(Gadget)
            Gadget(G)\N\ID=Neighbor
            Gadget(G)\N\Align\LB=#True
            Gadget(G)\N\Z=GadgetY(Neighbor)-(GadgetY(Gadget) +GadgetHeight(Gadget))
           Else
            Gadget(G)\N\ID=Neighbor
            Gadget(G)\N\Align\LT=#True
            Gadget(G)\N\Z=GadgetY(Gadget)-(GadgetY(Neighbor) +GadgetHeight(Neighbor))
           EndIf
          EndIf
         
         
           Gadget(G)\N\X =GadgetX(Neighbor)
           Gadget(G)\N\Y =GadgetY(Neighbor)
           Gadget(G)\N\W =GadgetWidth(Neighbor)
           Gadget(G)\N\H =GadgetHeight(Neighbor)
           
           Gadget(G)\N\L =WindowWidth(Window) -GadgetX(Neighbor)
           Gadget(G)\N\T =WindowHeight(Window) -GadgetY(Neighbor)
           Gadget(G)\N\R =WindowWidth(Window) -(GadgetX(Neighbor) +GadgetWidth(Neighbor))
           Gadget(G)\N\B =WindowHeight(Window) -(GadgetY(Neighbor) +GadgetHeight(Neighbor))
          EndIf
         
         
            Gadget(G)\ID=Gadget
            Gadget(G)\P=Window
            Gadget(G)\X =GadgetX(Gadget)
            Gadget(G)\Y =GadgetY(Gadget)
            Gadget(G)\W =GadgetWidth(Gadget)
            Gadget(G)\H =GadgetHeight(Gadget)
            Gadget(G)\L =WindowWidth(Window) -GadgetX(Gadget)
            Gadget(G)\T =WindowHeight(Window) -GadgetY(Gadget)
            Gadget(G)\R =WindowWidth(Window) -(GadgetX(Gadget) +GadgetWidth(Gadget))
            Gadget(G)\B =WindowHeight(Window) -(GadgetY(Gadget) +GadgetHeight(Gadget))
            AlignGadgetResize(Window)
           
           If Gadget(G)\ID=189
               Debug Gadget(G)\X
               Debug Gadget(G)\Y
               Debug Gadget(G)\W
               Debug Gadget(G)\H
               Debug  "-----------"
               Debug Gadget(G)\L
               Debug Gadget(G)\T
               Debug Gadget(G)\R
               Debug Gadget(G)\B
             EndIf
          EndIf
        EndProcedure

      ;------------------------------------------------
     
        Procedure Win()
            OpenWindow(1, 358, 178, 300, 275, " Test ResizeWindow (Module)",  #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
             
              WindowBounds(1, 250, 200, #PB_Ignore, #PB_Ignore)
             
              ButtonGadget(30, 5, 5, 50, 25, "Resize -")
              ButtonGadget(31, 245, 5, 50, 25, "Resize +")
              ButtonGadget(32, 5, 240, 50, 25, "Reset")
              ButtonGadget(33, 250, 125, 45, 20, "Button")
              ListIconGadget(35, 55, 30, 190, 210, "Column 0", 56, #PB_ListIcon_GridLines) :AddGadgetColumn(35, 1, "Column 1", 130)
              ButtonGadget(34, 110, 245, 80, 25, "Center")
             
              EditorGadget(37, 250, 35, 45, 85)
              EditorGadget(38, 250, 150, 45, 90)
             
              GadgetAlign(1, 31, 0,1,1,0)
              GadgetAlign(1, 32, 1,0,0,1)
              GadgetAlign(1, 35, 1,1,1,1)
              GadgetAlign(1, 34, 0,0,0,1)
             
              GadgetAlign(1, 33, 0,0,1,0)
              ;пропорционально
             
              GadgetAlign(1, 37, 0 ,1,1,1,33)
              GadgetAlign(1, 38, 0,1,1,1,33)
         EndProcedure     
           
        Procedure Win1()
         OpenWindow(5,5,5,400,300,"",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
         ;
         WindowBounds(5, 400, 300, #PB_Ignore, #PB_Ignore)
         
             
         ButtonGadget(0,5,140,130,25,"Dock = left", #WS_CLIPSIBLINGS) :GadgetAlign(5,0,1,0,0,0)
         ButtonGadget(1,135,5,130,25,"Dock = top", #WS_CLIPSIBLINGS) :GadgetAlign(5,1,0,1,0,0)
         ButtonGadget(2,265,140,130,25,"Dock = right", #WS_CLIPSIBLINGS) :GadgetAlign(5,2,0,0,1,0)
         ButtonGadget(3,135,270,130,25,"Dock = bottom", #WS_CLIPSIBLINGS) :GadgetAlign(5,3,0,0,0,1)
         
         ButtonGadget(4,135,140,130,25,"Dock = center", #WS_CLIPSIBLINGS) :GadgetAlign(5,4,0,0,0,0)
         
         ButtonGadget(10,5,140,130,25,"Dock = l_r", #WS_CLIPSIBLINGS) :GadgetAlign(5,10,1,0,1)
         ButtonGadget(11,135,5,130,25,"Dock = t_b", #WS_CLIPSIBLINGS) :GadgetAlign(5,11,0,1,0,1)
         
         ButtonGadget(9,135,140,130,25,"Dock = client", #WS_CLIPSIBLINGS) :GadgetAlign(5,9,1,1,1,1)
         
         ButtonGadget(8,5,5,130,25,"Dock = lefttop", #WS_CLIPSIBLINGS) :GadgetAlign(5,8,1,1)
         ButtonGadget(5,265,5,130,25,"Dock = topright", #WS_CLIPSIBLINGS) :GadgetAlign(5,5,0,1,1)
         ButtonGadget(6,5,270,130,25,"Dock = leftbottom", #WS_CLIPSIBLINGS) :GadgetAlign(5,6,1,0,0,1)
         ButtonGadget(7,265,270,130,25,"Dock = rightbottom", #WS_CLIPSIBLINGS) :GadgetAlign(5,7,0,0,1,1)
         
         ButtonGadget(12,265,140,130,25,"Dock = r_l", #WS_CLIPSIBLINGS) :GadgetAlign(5,12,0,1,1,1)
         ButtonGadget(13,135,270,130,25,"Dock = b_t", #WS_CLIPSIBLINGS) :GadgetAlign(5,13,1,0,1,1)
         
         ButtonGadget(18,5,140,130,25,"Dock = l_r", #WS_CLIPSIBLINGS) :GadgetAlign(5,18,1,1,0,1)
         ButtonGadget(15,135,5,130,25,"Dock = rt_l_b", #WS_CLIPSIBLINGS) :GadgetAlign(5,15,1,1,1,0)
         
         ;ButtonGadget(16,5,270,130,25,"Dock = lb_t_r", #WS_CLIPSIBLINGS) :GadgetAlign(5,16,1,1,1,1)
         ;ButtonGadget(17,265,270,130,25,"Dock = rb_l_t", #WS_CLIPSIBLINGS) :GadgetAlign(5,17,1,1,1,1)
         
         EndProcedure   
           
              Win()
              Win1()
          ExitWindow = #False
             
             
              Repeat
                Select WaitWindowEvent()
                  Case #PB_Event_CloseWindow
                    ExitWindow = #True
                  Case #PB_Event_Gadget
                    Select EventGadget()
                      Case 0
                        ResizeWindow(1, #PB_Ignore, #PB_Ignore, 250, 300)
                      Case 1
                        ResizeWindow(1, #PB_Ignore, #PB_Ignore, 350, 400)
                      Case 2
                        ResizeWindow(1, #PB_Ignore, #PB_Ignore, 300, 300)
                    EndSelect
                EndSelect
              Until ExitWindow
             
                 CloseWindow(1)
User avatar
Thorsten1867
Addict
Addict
Posts: 1366
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Re: Resize Gadgets & Restore Window Size/Position

Post by Thorsten1867 »

@mestnyi
?????
Please translate!
Translated with http://www.DeepL.com/Translator

Download of PureBasic - Modules
Download of PureBasic - Programs

[Windows 11 x64] [PB V5.7x]
mestnyi
Addict
Addict
Posts: 1001
Joined: Mon Nov 25, 2013 6:41 am

Re: Resize Gadgets & Restore Window Size/Position

Post by mestnyi »

Please translate!
that translate?
User_Russian
Addict
Addict
Posts: 1443
Joined: Wed Nov 12, 2008 5:01 pm
Location: Russia

Re: Resize Gadgets & Restore Window Size/Position

Post by User_Russian »

mestnyi wrote:
Please translate!
that translate?
Наверное речь идет об комментариях в исходнике.
Их нужно перевести.
User avatar
Thorsten1867
Addict
Addict
Posts: 1366
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Re: Resize Gadgets & Restore Window Size/Position

Post by Thorsten1867 »

@mestnyi
There is no explanation of the code and the comments in the source are not english.
Translated with http://www.DeepL.com/Translator

Download of PureBasic - Modules
Download of PureBasic - Programs

[Windows 11 x64] [PB V5.7x]
marroh
User
User
Posts: 72
Joined: Wed Aug 06, 2008 8:21 am

Re: Resize Gadgets & Restore Window Size/Position

Post by marroh »

Thanks for share!
PureBASIC v5.41 LTS , Windows v8.1 x64
Forget UNICODE - Keep it BASIC !
User avatar
electrochrisso
Addict
Addict
Posts: 980
Joined: Mon May 14, 2007 2:13 am
Location: Darling River

Re: Resize Gadgets & Restore Window Size/Position

Post by electrochrisso »

@Thorsten, your code update is broken and crashes on resize without any error message. :(

@mestnyi your code works very well and does a very smooth and flicker free resize. :)
PureBasic! Purely one of the best 8)
User avatar
Thorsten1867
Addict
Addict
Posts: 1366
Joined: Wed Aug 24, 2005 4:02 pm
Location: Germany

Re: Resize Gadgets & Restore Window Size/Position

Post by Thorsten1867 »

It seems to be a problem between V5.2x and V5.3x.
I've changed it.
Translated with http://www.DeepL.com/Translator

Download of PureBasic - Modules
Download of PureBasic - Programs

[Windows 11 x64] [PB V5.7x]
Post Reply