Resize Gadgets & Restore Window Size/Position

Share your advanced PureBasic knowledge/code with the community.
User avatar
electrochrisso
Addict
Addict
Posts: 989
Joined: Mon May 14, 2007 2:13 am
Location: Darling River

Re: Resize Gadgets & Restore Window Size/Position

Post by electrochrisso »

Thorsten1867 wrote:It seems to be a problem between V5.2x and V5.3x.
I've changed it.
Working good now, thanks for sharing. :)
PureBasic! Purely the best 8)
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

Re: Resize Gadgets & Restore Window Size/Position

Post by mestnyi »

Here's another version of the alignment gadget
Additional realized gadget inside gadget. :)

Code: Select all

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
      Import ""
      CompilerElse
        ImportC ""
        CompilerEndIf
        PB_Object_EnumerateStart( PB_Objects )
        PB_Object_EnumerateNext( PB_Objects, *ID.Integer )
        PB_Object_EnumerateAbort( PB_Objects )
        
        PB_Object_Count( PB_Objects )
        
        PB_Window_Objects.i
        PB_Gadget_Objects.i
        PB_Image_Objects.i
      EndImport
      
  EnableExplicit
  
  ProcedureDLL ID_Init()
    Structure PropType
      Value.i
    EndStructure
    
    Structure PropMap
      Map PropName.PropType()
    EndStructure
    
    Global NewMap Props.PropMap()
  EndProcedure
  
  CompilerIf Not Defined( ID_Init, #PB_Function ) 
    ID_Init( )
  CompilerEndIf
  
  
  Procedure GetWindow( WindowID )  
    If MapSize( Props( ))
      ProcedureReturn (Props(Str(WindowID))\PropName("PB_WindowID")\Value) -1
    EndIf
    ProcedureReturn -1
  EndProcedure   
  
  Procedure GetGadget( GadgetID )  
    If MapSize( Props( ))
      ProcedureReturn (Props(Str(GadgetID))\PropName("PB_GadgetID")\Value) -1
    EndIf
    ProcedureReturn -1
  EndProcedure 
  
  
  Procedure SetWindow( Window )  
    If IsWindow( Window ) And GetWindow( WindowID( Window )) =-1
      Props(Str(WindowID(Window)))\PropName("PB_WindowID")\Value = Window +1
      ProcedureReturn WindowID( Window )
    EndIf  
  EndProcedure   
  
  Procedure SetGadget( Gadget )  
    If IsGadget( Gadget ) And GetGadget( GadgetID( Gadget )) =-1
      Props(Str(GadgetID(Gadget)))\PropName("PB_GadgetID")\Value = Gadget +1
      ProcedureReturn GadgetID( Gadget )
    EndIf  
  EndProcedure 
  
  
  Procedure SetAllWindow( )
    Protected Set, Window =-1
    PB_Object_EnumerateStart( PB_Window_Objects )
    If PB_Window_Objects
      While PB_Object_EnumerateNext(PB_Window_Objects, @Window )
        Set = SetWindow( Window )
        
      Wend
      PB_Object_EnumerateAbort( PB_Window_Objects ) 
    EndIf
    
    If Set
      PB_Object_EnumerateStart( PB_Window_Objects )
      PB_Object_EnumerateNext(PB_Window_Objects, @Window )
    EndIf
    ProcedureReturn Set
  EndProcedure
  
  Procedure SetAllGadget( )
    Protected Set, Gadget =-1
    PB_Object_EnumerateStart( PB_Gadget_Objects )
    If PB_Gadget_Objects
      While PB_Object_EnumerateNext(PB_Gadget_Objects, @Gadget )
        Set = SetGadget( Gadget )
      Wend
      
      PB_Object_EnumerateAbort( PB_Gadget_Objects ) 
    EndIf
    
    If Set
      PB_Object_EnumerateStart( PB_Gadget_Objects )
      PB_Object_EnumerateNext(PB_Gadget_Objects, @Gadget )
    EndIf
    ProcedureReturn Set
  EndProcedure
  
  
  ProcedureDLL IDWindow( WindowID ) ;Returns purebasic Window ID from WindowID
    Protected Window = GetWindow( WindowID )
    
    If Window =-1 
      If SetAllWindow( ) 
        SetAllGadget( )
        ProcedureReturn IDWindow( WindowID )
      EndIf
    EndIf 
    
   ProcedureReturn Window 
  EndProcedure  
  
  ProcedureDLL IDGadget( GadgetID ) ;Returns purebasic Gadget ID from GadgetID
    Protected Gadget = GetGadget( GadgetID ) 
     
     If Gadget =-1 
       If SetAllWindow( ) 
         SetAllGadget( )
         ProcedureReturn IDGadget( GadgetID ) 
       EndIf
     EndIf 
     
    ProcedureReturn Gadget 
  EndProcedure  
  
  
  ProcedureDLL IsWindowID(WindowID) ;Returns TRUE if is WindowID
    If IsWindow(IDWindow(WindowID));GetIsWindow(WindowID)
      ProcedureReturn #True
    EndIf
  EndProcedure  
  
  ProcedureDLL IsGadgetID(GadgetID);Returns TRUE if is GadgetID
    If IsGadget(IDGadget(GadgetID));GetIsGadget(GadgetID)
      ProcedureReturn #True
    EndIf  
  EndProcedure  
  
  ProcedureDLL GetParent(ChildID) ;Returns ParentID from ChildID (Default)
    If ChildID <>-1
      CompilerIf #PB_Compiler_OS = #PB_OS_Windows
        ProcedureReturn GetParent_(ChildID)
      CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
        ProcedureReturn gtk_widget_get_parent_(ChildID)
      CompilerEndIf
    EndIf  
    ProcedureReturn -1
  EndProcedure 
  
  ProcedureDLL GadgetParentID(Gadget) ;Returns ParentID from gadget ID
    Protected ChildID =-1 
    If IsGadget(Gadget)
      ChildID = GadgetID(Gadget)
      
      While ChildID
        ChildID = GetParent(ChildID)
        If IsWindowID(ChildID)
          Break
        EndIf
      Wend  
      
      ProcedureReturn ChildID
    EndIf
  EndProcedure
  
  ProcedureDLL GadgetWindow(Gadget) ;Returns Top Parent WindowID from child Gadget
    Protected ParentID
    ParentID = GadgetParentID(Gadget)
    If IsWindowID(ParentID)
      ProcedureReturn IDWindow(ParentID)
    Else  
      While ParentID
        ParentID = GadgetParentID(ParentID)
        If IsWindowID(ParentID)
          ProcedureReturn IDWindow(ParentID)
        EndIf
      Wend
    EndIf
    ProcedureReturn -1
  EndProcedure
  
  ProcedureDLL ClipGadget( ) 
    CompilerIf #PB_Compiler_OS = #PB_OS_Windows
      Protected Height, Gadget
      PB_Object_EnumerateStart( PB_Gadget_Objects )
      If PB_Gadget_Objects
        While PB_Object_EnumerateNext(PB_Gadget_Objects, @Gadget )
          If GetWindowLongPtr_( GadgetID( Gadget ), #GWL_STYLE ) & #WS_CLIPSIBLINGS = #False 
            Height = GadgetHeight( Gadget ) 
            SetWindowLongPtr_( GadgetID( Gadget ), #GWL_STYLE, GetWindowLongPtr_( GadgetID( Gadget ), #GWL_STYLE )|#WS_CLIPSIBLINGS )
            ResizeGadget( Gadget, #PB_Ignore, #PB_Ignore, #PB_Ignore, Height )
          EndIf
          SetWindowPos_( GadgetID( Gadget ), 0, 0,0,0,0, #SWP_NOMOVE|#SWP_NOSIZE )
        Wend
        
        PB_Object_EnumerateAbort( PB_Gadget_Objects ) 
      EndIf
    CompilerEndIf
  EndProcedure
  
  ProcedureDLL ID_End()
    If MapSize( Props( ))
      DeleteMapElement( Props( ))
    EndIf 
  EndProcedure
  
  DisableExplicit
  
#PB_Align_None   =1<<0
#PB_Align_Left   =1<<1
#PB_Align_Top    =1<<2
#PB_Align_Right  =1<<3
#PB_Align_Bottom =1<<4
#PB_Align_Full   =1<<5
#PB_Align_Center =1<<6


CompilerIf Not Defined(AlignGadget, #PB_Function)
  ProcedureDLL AlignGadget_Init()
    Structure AGRS
      Window.i     
      Parent.i
      ParentID.i
      Gadget.i     
      BindGadget.i
      Zazor.i
      
      X.i
      Y.i
      Left.i   
      Top.i         
      Right.i       
      Bottom.i   
      
      Lock_Left.b
      Lock_Top.b
      Lock_Right.b
      Lock_Bottom.b 
      
      Lock_Bind_Left.b
      Lock_Bind_Top.b
      Lock_Bind_Right.b
      Lock_Bind_Bottom.b 
    EndStructure     
    
    Global NewList AGRS.AGRS()
  EndProcedure
  
  CompilerIf Not Defined(AlignGadget, #PB_Function)
    AlignGadget_Init()       
  CompilerEndIf
  
  
  Procedure AlignGadgetResize(List Align.AGRS(),Window)
    Protected.i ParentID,Parent,Gadget,BindGadget
    Protected.i Width, Height, GadgetX,GadgetY,GadgetWidth,GadgetHeight
    If ListSize(Align())
      
      ForEach   Align()
        If Window = Align()\Window 
          Gadget = Align()\Gadget
          Parent = Align()\Parent
          ParentID = Align()\ParentID
          BindGadget = Align()\BindGadget
          
          If IsWindow(Parent) And WindowID(Parent) = ParentID
            Width = WindowWidth(Parent)
            Height = WindowHeight(Parent)
          Else
            Width = GadgetWidth(Parent)
            Height = GadgetHeight(Parent)
          EndIf  
          
          GadgetX = GadgetX(Gadget)
          GadgetY = GadgetY(Gadget)
          GadgetWidth = GadgetWidth(Gadget)
          GadgetHeight = GadgetHeight(Gadget)
          
          If Align()\Lock_left = #False   
            If Align()\Lock_Right ;К правому краю 
              GadgetX = (Width - Align()\Left)
            Else ;В серединe по вертикали
              GadgetX = Align()\X + ((Width - Align()\Left - Align()\X) /2)
            EndIf
          EndIf
          
          If Align()\Lock_Top  = #False 
            If Align()\Lock_Bottom ;К нижнему краю 
              GadgetY = (Height - Align()\Top)
            Else ;В серединe по горизонтали 
              GadgetY = Align()\Y + ((Height - Align()\Top - Align()\Y) /2)
            EndIf
          EndIf       
          
          If BindGadget =-1 ;Сосед не указан (BindGadget is none)
            If Align()\Lock_Left And Align()\Lock_Right  :GadgetWidth  = (Width  - GadgetX(Gadget)) - Align()\Right  :EndIf
            
            If Align()\Lock_Top  And Align()\Lock_Bottom :GadgetHeight = (Height - GadgetY(Gadget)) - Align()\Bottom :EndIf       
          Else
            If Align()\Lock_Bind_Left ;Сосед находится слева (BindGadget is left)
              GadgetX = (GadgetX(BindGadget) + GadgetWidth(BindGadget)) + Align()\Zazor
              GadgetWidth = Width - GadgetX - Align()\Right
            EndIf
            
            If Align()\Lock_Bind_Top ;Сосед находится сверху (BindGadget is top)
              GadgetY = (GadgetY(BindGadget) + GadgetHeight(BindGadget)) + Align()\Zazor
              GadgetHeight = Height - GadgetY - Align()\Bottom
            EndIf
            
            If Align()\Lock_Bind_Bottom ;Сосед находится снизу (BindGadget is bottom)
              GadgetHeight = GadgetY(BindGadget) - GadgetY(Gadget) -Align()\Zazor
            EndIf
            
            If Align()\Lock_Bind_Right ;Сосед находится справа (BindGadget is right)
              GadgetWidth = GadgetX(BindGadget) - GadgetX(Gadget) -Align()\Zazor
            EndIf
          EndIf
          
          ResizeGadget(Gadget, GadgetX, GadgetY, GadgetWidth, GadgetHeight)
        EndIf
      Next
      
      CompilerIf #PB_Compiler_OS = #PB_OS_Windows
        RedrawWindow_(WindowID(Window), 0, 0, #RDW_ALLCHILDREN|#RDW_UPDATENOW)
      CompilerEndIf
    EndIf
  EndProcedure
  
  Procedure AlignGadgetCallBack()
    ProcedureReturn AlignGadgetResize(AGRS(), EventWindow())
  EndProcedure
  
  Procedure AddGadget(List Align.AGRS(),ParentID,Window,Parent,Gadget,BindGadget,Flags,Zazor)
    Protected.i Left, Top, Right, Bottom  
    AddElement(Align())
    Align()\Window = Window
    Align()\Parent = Parent
    Align()\Gadget = Gadget
    Align()\ParentID = ParentID
    Align()\BindGadget = BindGadget 
    
    If IsWindowID(ParentID)
      Width = WindowWidth(Parent)
      Height = WindowHeight(Parent)
    ElseIf IsGadgetID(ParentID)
      Width = GadgetWidth(Parent)
      Height = GadgetHeight(Parent)
    EndIf
    
    If Flags & #PB_Align_Center
      Flags = #False
    EndIf
    If Flags & #PB_Align_Full
      Flags = #PB_Align_Left|#PB_Align_Top|#PB_Align_Right|#PB_Align_Bottom
    EndIf
    
    If Flags & #PB_Align_Left   :Align()\Lock_left   = #True
    Else
      Align()\X = GadgetX(Gadget)
      Align()\Left = Width - GadgetX(Gadget)
    EndIf  
    If Flags & #PB_Align_Top    :Align()\Lock_top    = #True
    Else
      Align()\Y = GadgetY(Gadget)
      Align()\Top = Height - GadgetY(Gadget)
    EndIf
    If Flags & #PB_Align_Right  :Align()\Lock_right  = #True
      If BindGadget <>-1
        If GadgetX(Gadget) < GadgetX(BindGadget)
          Align()\Lock_Bind_Right = #True
          Align()\Zazor=(GadgetY(BindGadget)-(GadgetY(Gadget) +GadgetHeight(Gadget)))-Zazor
        ElseIf GadgetX(Gadget) > GadgetX(BindGadget)
          Align()\Lock_Bind_Left = #True
          Align()\Zazor=(GadgetY(Gadget)-(GadgetY(BindGadget) +GadgetHeight(BindGadget)))-Zazor
        EndIf  
      EndIf
      Align()\Right = Width - (GadgetX(Gadget) + GadgetWidth(Gadget))
    EndIf
    If Flags & #PB_Align_Bottom :Align()\Lock_bottom = #True
      If BindGadget <>-1
        If GadgetY(Gadget) < GadgetY(BindGadget)
          Align()\Lock_Bind_Bottom = #True
          Align()\Zazor=GadgetY(BindGadget)-(GadgetY(Gadget) +GadgetHeight(Gadget))
        ElseIf GadgetY(Gadget) > GadgetY(BindGadget)
          Align()\Lock_Bind_Top = #True
          Align()\Zazor=GadgetY(Gadget)-(GadgetY(BindGadget) +GadgetHeight(BindGadget))
        EndIf 
      EndIf
      Align()\Bottom = Height - (GadgetY(Gadget) + GadgetHeight(Gadget))
    EndIf
  EndProcedure  
  
  ProcedureDLL AlignGadget3(Gadget, Flags, BindGadget =-1, Zazor = #False) ;
    If IsGadget(Gadget)
      Protected Window = GadgetWindow(Gadget)
      Protected ParentID = GadgetParentID(Gadget)
      Protected Parent
      
      If IsWindowID(ParentID)
        Parent = IDWindow(ParentID)
      ElseIf IsGadgetID(ParentID)
        Parent = IDGadget(ParentID)
      EndIf
      
      ;
      If IsWindow(Window)
        Static OldWindow =-1
        If OldWindow ! Window
          SmartWindowRefresh( Window, #True )
          BindEvent(#PB_Event_SizeWindow,@AlignGadgetCallBack(),Window) 
          OldWindow = Window
        EndIf
        
        AddGadget(AGRS(),ParentID,Window,Parent,Gadget,BindGadget,Flags, Zazor)
        AlignGadgetResize(AGRS(), Window)
      EndIf
    EndIf
  EndProcedure
  ProcedureDLL AlignGadget2(Gadget, Flags, BindGadget)
    ProcedureReturn AlignGadget3(Gadget, Flags, BindGadget, #False)
  EndProcedure
  ProcedureDLL AlignGadget(Gadget, Flags)
    ProcedureReturn AlignGadget2(Gadget, Flags, #PB_Any)
  EndProcedure
  Macro AlignGadget(Gadget, Flags, BindGadget =-1, Zazor = #False)
    AlignGadget3(Gadget, Flags, BindGadget, Zazor)
  EndMacro
  
  
  ProcedureDLL AlignGadget_End() 
    If ListSize(AGRS())
      FreeList(AGRS())
    EndIf
  EndProcedure
CompilerEndIf

CompilerIf #PB_Compiler_IsMainFile
  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")
    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, 5, 35, 45, 85)
    ;EditorGadget(38, 5, 150, 45, 90)
    EditorGadget(37, 250, 35, 45, 50)
    ButtonGadget(33, 250, 90, 45, 20, "Button")
    EditorGadget(48, 250, 115, 45, 45)
    
    ButtonGadget(43, 250, 165, 45, 20, "Button")
    EditorGadget(38, 250, 190, 45, 50)
    
    AlignGadget(31,#PB_Align_Top|#PB_Align_Right)
    AlignGadget(32,#PB_Align_Left|#PB_Align_Bottom)
    AlignGadget(35, #PB_Align_Full)
    AlignGadget(34, #PB_Align_Bottom)
    
    AlignGadget(33, #PB_Align_Right|#PB_Align_Top)
    AlignGadget(43, #PB_Align_Right|#PB_Align_Bottom)
    ;пропорционально
    
    ;AlignGadgetAnchor(37, 1 ,1,0,1,33)
    ;AlignGadgetAnchor(38, 1,1,0,1,33)
    AlignGadget(37, #PB_Align_Top|#PB_Align_Right|#PB_Align_Bottom,33)
    AlignGadget(48, #PB_Align_Top|#PB_Align_Right|#PB_Align_Bottom,33)
    AlignGadget(48, #PB_Align_Top|#PB_Align_Right|#PB_Align_Bottom,43)
    AlignGadget(38, #PB_Align_Top|#PB_Align_Right|#PB_Align_Bottom,43)
    
  EndProcedure      
  Procedure Win0()
    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")
    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, 5, 35, 45, 85)
    ;EditorGadget(38, 5, 150, 45, 90)
    EditorGadget(37, 250, 35, 45, 85)
    EditorGadget(38, 250, 150, 45, 90)
    ButtonGadget(33, 250, 125, 45, 20, "Button")
    
    AlignGadget(31,#PB_Align_Top|#PB_Align_Right)
    AlignGadget(32,#PB_Align_Left|#PB_Align_Bottom)
    AlignGadget(35, #PB_Align_Full)
    AlignGadget(34, #PB_Align_Bottom)
    
    AlignGadget(33, #PB_Align_Right)
    ;пропорционально
    
    ;AlignGadget(37, 1 ,1,0,1,33)
    ;AlignGadget(38, 1,1,0,1,33)
    AlignGadget(37, #PB_Align_Top|#PB_Align_Right|#PB_Align_Bottom,33)
    AlignGadget(38, #PB_Align_Top|#PB_Align_Right|#PB_Align_Bottom,33)
    
  EndProcedure      
  Procedure Win1(In = 0)
    OpenWindow(5,5,5,400,300,"",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
    ;
    WindowBounds(5, 400, 300, #PB_Ignore, #PB_Ignore)
    
    If in =1
      ContainerGadget(0, 0, 0,400,300,#PB_Container_Flat )
    ElseIf in =2
      PanelGadget(0, 0, 0,400,300 ) :AddGadgetItem(0,-1,"Panel")
    ElseIf in =3
      ScrollAreaGadget(0, 0, 0,400,300,400,300,0,#PB_ScrollArea_Flat )
    EndIf
    
    If in
      AlignGadget(0,#PB_Align_Full)
    EndIf
    
    FrameGadget(9,135,140,130,25,"Dock = client") :AlignGadget(9,#PB_Align_Full)
    
    FrameGadget(20,5,140,130,25,"Dock = left") :AlignGadget(20,#PB_Align_Left)
    FrameGadget(1,135,5,130,25,"Dock = top") :AlignGadget(1,#PB_Align_Top)
    FrameGadget(2,265,140,130,25,"Dock = right") :AlignGadget(2,#PB_Align_Right)
    FrameGadget(3,135,270,130,25,"Dock = bottom") :AlignGadget(3,#PB_Align_Bottom)
    
    
    FrameGadget(10,5,140,130,25,"Dock = l_r") :AlignGadget(10,#PB_Align_Left|#PB_Align_Right)
    FrameGadget(11,135,5,130,25,"Dock = t_b") :AlignGadget(11,#PB_Align_Top|#PB_Align_Bottom)
    
    
    FrameGadget(8,5,5,130,25,"Dock = lefttop") :AlignGadget(8,#PB_Align_Left|#PB_Align_Top)
    FrameGadget(5,265,5,130,25,"Dock = righttop") :AlignGadget(5,#PB_Align_Right|#PB_Align_Top)
    FrameGadget(6,5,270,130,25,"Dock = leftbottom") :AlignGadget(6,#PB_Align_Left|#PB_Align_Bottom)
    FrameGadget(7,265,270,130,25,"Dock = rightbottom") :AlignGadget(7,#PB_Align_Right|#PB_Align_Bottom)
    
    FrameGadget(12,265,140,130,25,"Dock = t_r_b") :AlignGadget(12,#PB_Align_Top|#PB_Align_Right|#PB_Align_Bottom)
    FrameGadget(13,135,270,130,25,"Dock = l_b_r") :AlignGadget(13,#PB_Align_Left|#PB_Align_Bottom|#PB_Align_Right)
    
    FrameGadget(18,5,140,130,25,"Dock = t_l_b") :AlignGadget(18,#PB_Align_Top|#PB_Align_Left|#PB_Align_Bottom)
    FrameGadget(15,135,5,130,25,"Dock = l_t_r") :AlignGadget(15,#PB_Align_Left|#PB_Align_Top|#PB_Align_Right)
    
    FrameGadget(4,135,140,130,25,"Dock = center") :AlignGadget(4,#PB_Align_Center)
    
    If in
      CloseGadgetList()
    EndIf
  EndProcedure   
  Procedure Win2(In = 0)
    OpenWindow(5,5,5,400,300,"",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
    ;
    WindowBounds(5, 400, 300, #PB_Ignore, #PB_Ignore)
    
    ButtonGadget(1,265,110,130,25,"Dock = top") :AlignGadget(1,#PB_Align_Right)
    ButtonGadget(2,265,140,130,25,"Dock = right") :AlignGadget(2,#PB_Align_Right)
    ButtonGadget(3,265,170,130,25,"Dock = left") :AlignGadget(3,#PB_Align_Right)
    
  EndProcedure   
  
  Win()
  Win1(1)
  
  ExitWindow = #False
  
  ClipGadget()
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        ExitWindow = #True
      Case #PB_Event_Gadget
        
        Select EventGadget()
          Case 30
            ResizeWindow(1, #PB_Ignore, #PB_Ignore, 250, 300)
          Case 31
            ResizeWindow(1, #PB_Ignore, #PB_Ignore, 350, 400)
          Case 32
            ResizeWindow(1, #PB_Ignore, #PB_Ignore, 300, 300)
        EndSelect
    EndSelect
  Until ExitWindow
  
  CloseWindow(1)
  
CompilerEndIf
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

Re: Resize Gadgets & Restore Window Size/Position

Post by mestnyi »

Look at the following example will not work correctly.
That is, if (#RIGHT) why the buttons are drawn down as if I postavil (#RIGHT | #BOTTOM) :)

Code: Select all

 OpenWindow(5,5,5,400,300,"",#PB_Window_SystemMenu|#PB_Window_SizeGadget)
    ;
    WindowBounds(5, 400, 300, #PB_Ignore, #PB_Ignore)
    
    ButtonGadget(31,265,110,130,25,"Dock = top") :AddGadget(5,31,#RIGHT)
    ButtonGadget(32,265,140,130,25,"Dock = right") :AddGadget(5,32,#RIGHT)
    ButtonGadget(33,265,170,130,25,"Dock = left") :AddGadget(5,33,#RIGHT)
 
  
Post Reply