WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Samples

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Resize Dialog and Move Controls


  ;Dialog Resize/Move example with native Resizing.  Requires a WB 2010B version or higher and uses the 6.2 version of dialogs.
  ;Jim Taylor (jtaylor@jtdata.com)
  
  WinHide("")
  
  GoSub Function_Definitions
  
  IntControl (49, 1, 1, 0, 0)
  
  Home_Path     = DirScript()
  DirChange(Home_Path)
  
  profile       = "RESIZE"
  System_Ini    = StrCat(Home_Path,"resize_move.ini")
  
  op_win_size   = IniReadPvt(profile,"op_win_size","",System_Ini)
  op_win_state  = IniReadPvt(profile,"op_win_state","",System_Ini)
  
  
  OPROCESSFormat=`WWWDLGED,6.2`
  
  OPROCESSCaption=`Order Processing`
  OPROCESSX=-01
  OPROCESSY=-01
  OPROCESSWidth=510
  OPROCESSHeight=348
  OPROCESSMinWidth=510
  OPROCESSMinHeight=348
  OPROCESSNumControls=015
  OPROCESSProcedure=`OP_Sub`
  OPROCESSFont=`DEFAULT`
  OPROCESSTextColor=`DEFAULT`
  OPROCESSBackground=`DEFAULT,0|0|100`
  OPROCESSConfig=2
  
  OPROCESS001=`003,003,040,026,PUSHBUTTON,"pb_OPR_Complete_1",DEFAULT,"Complete",3,15,DEFAULT,"Microsoft Sans Serif|6656|70|34","0|0|0",DEFAULT`
  OPROCESS002=`047,003,064,024,VARYTEXT,"vt_OPR_station_1",station_1,"station",DEFAULT,18,DEFAULT,"Microsoft Sans Serif|17920|40|34","255|255|255",DEFAULT`
  OPROCESS003=`113,003,030,024,VARYTEXT,"vt_OPR_ord_num_c_1",ord_num_c_1,"ord_num_c",DEFAULT,21,DEFAULT,"Microsoft Sans Serif|17920|40|34","255|255|255",DEFAULT`
  OPROCESS004=`145,015,020,014,PUSHBUTTON,"pb_OPR_X1",DEFAULT,"X",24,24,DEFAULT,"Microsoft Sans Serif|6656|70|34","0|0|0",DEFAULT`
  OPROCESS005=`003,031,166,312,ITEMBOX,"ib_OPR_igrid_1",DEFAULT,DEFAULT,DEFAULT,27,@csNoAdjust,DEFAULT,DEFAULT,DEFAULT`
  OPROCESS006=`171,003,040,026,PUSHBUTTON,"pb_OPR_Complete_2",DEFAULT,"Complete",6,30,DEFAULT,"Microsoft Sans Serif|6656|70|34","0|0|0",DEFAULT`
  OPROCESS007=`215,003,064,024,VARYTEXT,"vt_OPR_station_2",station_2,"station",DEFAULT,33,DEFAULT,"Microsoft Sans Serif|17920|40|34","255|255|255",DEFAULT`
  OPROCESS008=`281,003,030,024,VARYTEXT,"vt_OPR_ord_num_c_2",ord_num_c_2,"ord_num_c",DEFAULT,36,DEFAULT,"Microsoft Sans Serif|17920|40|34","255|255|255",DEFAULT`
  OPROCESS009=`313,015,020,014,PUSHBUTTON,"pb_OPR_X2",DEFAULT,"X",18,39,DEFAULT,"Microsoft Sans Serif|6656|70|34","0|0|0",DEFAULT`
  OPROCESS010=`171,031,166,312,ITEMBOX,"ib_OPR_igrid_2",DEFAULT,DEFAULT,DEFAULT,42,@csNoAdjust,DEFAULT,DEFAULT,DEFAULT`
  OPROCESS011=`339,003,040,026,PUSHBUTTON,"pb_OPR_Complete_3",DEFAULT,"Complete",9,45,DEFAULT,"Microsoft Sans Serif|6656|70|34","0|0|0",DEFAULT`
  OPROCESS012=`383,003,064,024,VARYTEXT,"vt_OPR_station_3",station_3,"station",DEFAULT,48,DEFAULT,"Microsoft Sans Serif|17920|40|34","255|255|255",DEFAULT`
  OPROCESS013=`449,003,030,024,VARYTEXT,"vt_OPR_ord_num_c_3",ord_num_c_3,"ord_num_c",DEFAULT,51,DEFAULT,"Microsoft Sans Serif|17920|40|34","255|255|255",DEFAULT`
  OPROCESS014=`481,015,020,014,PUSHBUTTON,"pb_OPR_X3",DEFAULT,"X",21,54,DEFAULT,"Microsoft Sans Serif|6656|70|34","0|0|0",DEFAULT`
  OPROCESS015=`339,031,166,312,ITEMBOX,"ib_OPR_igrid_3",DEFAULT,DEFAULT,DEFAULT,57,@csNoAdjust,DEFAULT,DEFAULT,DEFAULT`
  
  ButtonPushed=Dialog("OPROCESS")
  
  
  
  Exit
  
  :FUNCTION_DEFINITIONS
  
  #DefineSubRoutine OP_Sub(OPR_Handle,DMsg,DCID,DEInfo,ChangeInfo)
  
  Switch (DMsg)
    Case @deinit
      DialogProcOptions(OPR_Handle, @declose,1)                             ; Close selected (IntControl(49....) (1-On, 0-Off).
      DialogProcOptions(OPR_Handle, @deresize, 1)                           ; Resize Dialog.
      DialogProcOptions(OPR_Handle, @depbpush,1)                            ; Pushbutton/PictureButton.
      DialogProcOptions(OPR_Handle, @deibselect,1)                          ; ItemBox.
      DialogProcOptions(OPR_Handle, @deibdblclick,1)                        ; ItemBox Double-Clicked.        
  
      For icol = 1 To 3
        ord_num_c_%icol% = icol
        station_%icol% = "S-":icol
  
        igrid_%icol% = "Item Box %icol%"
        igrid_%icol%_list = "Item Box %icol%"
  
        DialogControlSet(OPR_Handle,"vt_OPR_station_%icol%",@dctitle,station_%icol%)
        DialogControlSet(OPR_Handle,"vt_OPR_ord_num_c_%icol%",@dctitle,ord_num_c_%icol%)
        DialogControlSet(OPR_Handle,"ib_OPR_igrid_%icol%",@dccontents,igrid_%icol%_list)
        DialogControlSet(OPR_Handle,"ib_OPR_igrid_%icol%",@dcselect,igrid_%icol%)
      Next
  
      ;################################################################################################
      ; GIVE each Dialog a UNIQUE 'win_track' value and be sure to reset when you return from a sub-dialog.
      ;Get_Control_Movement() gets the initial size of the dialog and builds the array of the grow/move definitions
      ;you have defined.
      ;################################################################################################
  
      win_track = "OPROCESS"           
      Get_Control_Movement(OPR_Handle, win_track)   
  
      ;################################################################################################
  
      ;################################################################################################
      ;The following restores the Dialog to the same size and position as when last closed.
      ;################################################################################################
  
      If op_win_state == @zoomed Then 
        WinZoom("Order Processing")
        curr_xsize  = ItemExtract(1,DialogProcOptions(OPR_Handle, @dpoclientsize,-1)," ")
        curr_ysize  = ItemExtract(2,DialogProcOptions(OPR_Handle, @dpoclientsize,-1)," ")
        ReSize_It(OPR_Handle)
      Else
        If op_win_size != "" && ItemCount(op_win_size,",") == 4 Then 
          WinPlace(ItemExtract(1,op_win_size,","),ItemExtract(2,op_win_size,","),ItemExtract(3,op_win_size,","),ItemExtract(4,op_win_size,","), "Order Processing")
          curr_xsize  = ItemExtract(1,DialogProcOptions(OPR_Handle, @dpoclientsize,-1)," ")
          curr_ysize  = ItemExtract(2,DialogProcOptions(OPR_Handle, @dpoclientsize,-1)," ")
          ReSize_It(OPR_Handle)
        EndIf
      EndIf
      ;################################################################################################
  
      Break
    Case @deresize
      curr_xsize  = ItemExtract(1,DialogProcOptions(OPR_Handle, @dpoclientsize,-1)," ")
      curr_ysize  = ItemExtract(2,DialogProcOptions(OPR_Handle, @dpoclientsize,-1)," ")
      Resize_It(OPR_Handle)
      Break 
    Case @declose
      op_win_state = WinState("Order Processing")
      op_win_size  = WinPosition("Order Processing")
      IniWritePvt(profile,"op_win_size",op_win_size,System_Ini)
      IniWritePvt(profile,"op_win_state",op_win_state,System_Ini)
      Return 9
      Break 
    Case @deibselect
      Switch(DialogProcOptions(OPR_Handle,@dpoctlnumber,DCID))
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"ib_OPR_igrid_1")
          button_text = DialogControlGet(OPR_Handle,"ib_OPR_igrid_1",@dcselect)
          button_text_list = DialogControlGet(OPR_Handle,"ib_OPR_igrid_1",@dccontents)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"ib_OPR_igrid_2")
          button_text = DialogControlGet(OPR_Handle,"ib_OPR_igrid_2",@dcselect)
          button_text_list = DialogControlGet(OPR_Handle,"ib_OPR_igrid_2",@dccontents)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"ib_OPR_igrid_3")
          button_text = DialogControlGet(OPR_Handle,"ib_OPR_igrid_3",@dcselect)
          button_text_list = DialogControlGet(OPR_Handle,"ib_OPR_igrid_3",@dccontents)
          Break
      EndSwitch
      Break
    Case @deibdblclick
      Switch(DialogProcOptions(OPR_Handle,@dpoctlnumber,DCID))
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"ib_OPR_igrid_1")
          button_text = DialogControlGet(OPR_Handle,"ib_OPR_igrid_1",@dcselect)
          button_text_list = DialogControlGet(OPR_Handle,"ib_OPR_igrid_1",@dccontents)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"ib_OPR_igrid_2")
          button_text = DialogControlGet(OPR_Handle,"ib_OPR_igrid_2",@dcselect)
          button_text_list = DialogControlGet(OPR_Handle,"ib_OPR_igrid_2",@dccontents)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"ib_OPR_igrid_3")
          button_text = DialogControlGet(OPR_Handle,"ib_OPR_igrid_3",@dcselect)
          button_text_list = DialogControlGet(OPR_Handle,"ib_OPR_igrid_3",@dccontents)
          Break
      EndSwitch
      Break
    Case @depbpush
      Switch(DialogProcOptions(OPR_Handle,@dpoctlnumber,DCID))
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"pb_OPR_Complete_1")
          button_text = DialogControlGet(OPR_Handle,"pb_OPR_Complete_1",@dctitle)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"pb_OPR_X1")
          button_text = DialogControlGet(OPR_Handle,"pb_OPR_X1",@dctitle)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"pb_OPR_Complete_2")
          button_text = DialogControlGet(OPR_Handle,"pb_OPR_Complete_2",@dctitle)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"pb_OPR_X2")
          button_text = DialogControlGet(OPR_Handle,"pb_OPR_X2",@dctitle)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"pb_OPR_Complete_3")
          button_text = DialogControlGet(OPR_Handle,"pb_OPR_Complete_3",@dctitle)
          Break
        Case DialogProcOptions(OPR_Handle,@dpoctlnumber,"pb_OPR_X3")
          button_text = DialogControlGet(OPR_Handle,"pb_OPR_X3",@dctitle)
          Break
      EndSwitch
      Break
  EndSwitch
  Return -2
  
  #EndSubRoutine
    
  
  
      ;################################################################################################
      ;################################################################################################
      ;                                                                                               ;
      ;                      Below are the Routines you can use with any dialog.                      ;
      ;                      The only change is the GROW/MOVE definitions which                       ;
      ;                      are enclosed in IF statements based on the win_track                     ;
      ;                      value.                                                                   ;
      ;                                      *****************                                        ;
      ;                                                                                               ;
      ;                      You may need to tweak some of the code due to the fact                   ;
      ;                      that I have a standard way of naming my control names.                   ;
      ;                      Each Control type has a specific prefix. If you use WB_RAD               ;
      ;                      to produce your Callback code as a starting point then you               ;
      ;                      will need to change nothing.  I think there is only one place            ;
      ;                      and it at the end of the last function and it is marked.  Apologies      ;         
      ;                      if I missed any others.                                                  ;
      ;                                                                                               ;
      ;################################################################################################
      ;################################################################################################
  
  
  ;Dialog Resize/Move example.  Not sure on WinBatch version required. I do make use of the new dialog CONSTANTS.  If you define those then you can
  ;probably drop back to 2010C.  It uses the 6.2 version of dialogs.
  ;You can set a limit of how small you want to shrink/move controls within the Dialog itself.  This must be set or this code will generate an error.
  ;Jim Taylor (jtaylor@jtdata.com)
  
  
  #DefineSubRoutine Get_Control_Movement(Mov_Handle, win_track)
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;The following is the initial sizes, enumeration and settings 
    ;for how a control will be handled during a resize. Obviously, 
    ;it would be nice if this information was contained, and handled, 
    ;by the Dialog.  You can GROW and MOVE the same control. You 
    ;must define what percentage of the change the control will receive, 
    ;both vertically and horizontally.  
  
    ;If you have stacked controls then keep in mind that the 
    ;percentage of the move/grow changes as you move down/across.  
    ;That is, if you have four controls, the first one might stay 
    ;where it is (no move) but have .25 for the grow, 
    ;the second will receive .25 for the move and .25 for the grow, 
    ;the third will have .5 for the move and .25 for the grow
    ;the fourth will have .75 for the move and .25 for the grow.   
  
    ;If you have very many controls you may find this easier to maintain
    ;in an external file and use ArrayFileGetCSV().  The following format
    ;will work.  The header row is important as it fills the first row
    ;thereby allowing one to use a one-based array.
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
   
    Decimals(-1)
   
    init_xsize%win_track%   = ItemExtract(1,DialogProcOptions(Mov_Handle, @dpoclientsize, -1)," ")
    init_ysize%win_track%   = ItemExtract(2,DialogProcOptions(Mov_Handle, @dpoclientsize, -1)," ")
  
    
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;This is the move/grow definition for each control.  Yes, at times it can get a bit tedious.
    ;Do note that the last line will NOT have a @CR on the end.
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    arr_txt = ""
      arr_txt = arr_txt:"name,                           movement,                            x_m,        x_g,        y_m,        y_g":@cr
  
    If win_track == "OPROCESS" Then
  
      arr_txt = arr_txt:"pb_OPR_Complete_1,              POS_FIX,                                  1,            1,            1,            1":@cr
      arr_txt = arr_txt:"vt_OPR_station_1,               POS_FIX,                                  1,            1,            1,            1":@cr
      arr_txt = arr_txt:"vt_OPR_ord_num_c_1,             POS_FIX,                                  1,            1,            1,            1":@cr
      arr_txt = arr_txt:"pb_OPR_X1,                      POS_MOVE_H,                    .33333333334,            1,            1,            1":@cr
      arr_txt = arr_txt:"ib_OPR_igrid_1,                 POS_GROW_H|POS_GROW_V,                    1, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"pb_OPR_Complete_2,              POS_MOVE_H,                    .33333333334, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"vt_OPR_station_2,               POS_MOVE_H,                    .33333333334, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"vt_OPR_ord_num_c_2,             POS_MOVE_H,                    .33333333334, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"pb_OPR_X2,                      POS_MOVE_H,                    .66666666667, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"ib_OPR_igrid_2,                 POS_MOVEGROW_H|POS_GROW_V,     .33333333334, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"pb_OPR_Complete_3,              POS_MOVE_H,                    .66666666667, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"vt_OPR_station_3,               POS_MOVE_H,                    .66666666667, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"vt_OPR_ord_num_c_3,             POS_MOVE_H,                    .66666666667, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"pb_OPR_X3,                      POS_MOVE_H,                               1, .33333333334,            1,            1":@cr
      arr_txt = arr_txt:"ib_OPR_igrid_3,                 POS_MOVEGROW_H|POS_GROW_V,     .66666666667, .33333333334,            1,            1"
  
    EndIf
  
    arr_txt = StrReplace(arr_txt," ","")
    o_array%win_track% = Arrayize(arr_txt,@cr)
    ArrayRedim(o_array%win_track%,-1,7)
    xcnt = ArrInfo(o_array%win_track%,1)-1
    For x = 0 To xcnt
       txt = o_array%win_track%[x,0]
       o_array%win_track%[x,5] = ItemExtract(6,txt,",")
       o_array%win_track%[x,4] = ItemExtract(5,txt,",")
       o_array%win_track%[x,3] = ItemExtract(4,txt,",")
       o_array%win_track%[x,2] = ItemExtract(3,txt,",")
       o_array%win_track%[x,1] = ItemExtract(2,txt,",")
       o_array%win_track%[x,0] = ItemExtract(1,txt,",")
       If x > 0 Then o_array%win_track%[x,6] = DialogControlGet(Mov_Handle,o_array%win_track%[x,0],@dcposition)
    Next
    
    
  #EndSubRoutine
  
  
  #DefineFunction Set_Control_Movement(Mov_Handle,xy,xdiff,ydiff,xt,yt,xb,yb,o_array)
  
    POS_FIX             =  0 ; Allow Move/Resize of Control                          
    POS_GROW_H          =  1 ; Fixed Position but grow Horizontally                  
    POS_GROW_V          =  2 ; Fixed Position but grow Vertically                    
    POS_MOVE_H          =  4 ; Move Horizontally with Resize but no growth           
    POS_MOVE_V          =  8 ; Move Vertically with Resize but no growth             
    POS_MOVEGROW_H      = 16 ; Grow and Move Horizontally 
    POS_MOVEGROW_V      = 32 ; Grow and Move Vertically
  
    Decimals(-1)
    tvar     = o_array[xy,0]
    move_var = o_array[xy,1]
    ocutx_m  = o_array[xy,2]
    ocutx_g  = o_array[xy,3]
    ocuty_m  = o_array[xy,4]
    ocuty_g  = o_array[xy,5]
  
  
    xt_m_adj = 0
    yt_m_adj = 0
    xb_g_adj = 0
    yb_g_adj = 0
  
    If xt+(xdiff*%ocutx_m%) < 0 Then xt_m_adj = (xt+(xdiff*%ocutx_m%))*-1
    If yt+(ydiff*%ocuty_m%) < 0 Then yt_m_adj = (yt+(ydiff*%ocuty_m%))*-1
    If xb+(xdiff*%ocutx_g%) < 0 Then xb_g_adj = (xb+(xdiff*%ocutx_g%))*-1
    If yb+(ydiff*%ocuty_g%) < 0 Then yb_g_adj = (yb+(ydiff*%ocuty_g%))*-1
  
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
    Decimals(0)
  
    If %move_var% & POS_FIX Then
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt:" ":yt:" ":xb:" ":yb)
      Return  
    EndIf
    If %move_var% & POS_MOVE_H && %move_var% & POS_MOVEGROW_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt+(xdiff*%ocutx_m%)+xt_m_adj:" ":yt+(ydiff*%ocuty_m%)+yt_m_adj:" ":xb:" ":yb+(ydiff*%ocuty_g%)+yb_g_adj)
      Return  
    EndIf
    If %move_var% & POS_MOVE_H && %move_var% & POS_GROW_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt+(xdiff*%ocutx_m%)+xt_m_adj:" ":yt:" ":xb:" ":yb+(ydiff*%ocuty_g%)+yb_g_adj)
      Return  
    EndIf
    If %move_var% & POS_MOVE_V && %move_var% & POS_GROW_H Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt:" ":yt+(ydiff*%ocuty_m%)+yt_m_adj:" ":xb+(xdiff*%ocutx_g%)+xb_g_adj:" ":yb)
      Return  
    EndIf
    If %move_var% & POS_MOVE_V && %move_var% & POS_MOVEGROW_H Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt+(xdiff*%ocutx_m%)+xt_m_adj:" ":yt+(ydiff*%ocuty_m%)+yt_m_adj:" ":xb+(xdiff*%ocutx_g%)+xb_g_adj:" ":yb)
      Return  
    EndIf
    If %move_var% & POS_GROW_H && %move_var% & POS_MOVEGROW_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt:" ":yt+(ydiff*%ocuty_m%)+yt_m_adj:" ":xb+(xdiff*%ocutx_g%):" ":yb+(ydiff*%ocuty_g%)+yb_g_adj)
      Return  
    EndIf
    If %move_var% & POS_GROW_V && %move_var% & POS_MOVEGROW_H Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt+(xdiff*%ocutx_m%)+xt_m_adj:" ":yt:" ":xb+(xdiff*%ocutx_g%)+xb_g_adj:" ":yb+(ydiff*%ocuty_g%)+yb_g_adj)
      Return  
    EndIf
    If %move_var% & POS_MOVE_H && %move_var% & POS_MOVE_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt+(xdiff*%ocutx_m%)+xt_m_adj:" ":yt+(ydiff*%ocuty_m%)+yt_m_adj:" ":xb:" ":yb)
      Return  
    EndIf
    If %move_var% & POS_MOVE_H Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt+(xdiff*%ocutx_m%)+xt_m_adj:" ":yt:" ":xb:" ":yb)
      Return  
    EndIf
    If %move_var% & POS_MOVE_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt:" ":yt+(ydiff*%ocuty_m%)+yt_m_adj:" ":xb:" ":yb)
      Return  
    EndIf
    If %move_var% & POS_GROW_H && %move_var% & POS_GROW_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt:" ":yt:" ":xb+(xdiff*%ocutx_g%)+xb_g_adj:" ":yb+(ydiff*%ocuty_g%)+yb_g_adj)
      Return  
    EndIf
    If %move_var% & POS_GROW_H Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt:" ":yt:" ":xb+(xdiff*%ocutx_g%)+xb_g_adj:" ":yb)
      Return  
    EndIf
    If %move_var% & POS_GROW_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt:" ":yt:" ":xb:" ":yb+(ydiff*%ocuty_g%)+yb_g_adj)
      Return  
    EndIf
    If %move_var% & POS_MOVEGROW_H && %move_var% & POS_MOVEGROW_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt+(xdiff*%ocutx_m%)+xt_m_adj:" ":yt+(ydiff*%ocuty_m%)+yt_m_adj:" ":xb+(xdiff*%ocutx_g%)+xb_g_adj:" ":yb+(ydiff*%ocuty_g%)+yb_g_adj)
      Return  
    EndIf
    If %move_var% & POS_MOVEGROW_H Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt+(xdiff*%ocutx_m%)+xt_m_adj:" ":yt:" ":xb+(xdiff*%ocutx_g%)+xb_g_adj:" ":yb)
      Return  
    EndIf
    If %move_var% & POS_MOVEGROW_V Then 
      DialogControlSet(Mov_Handle,tvar,@dcposition,xt:" ":yt+(ydiff*%ocuty_m%)+yt_m_adj:" ":xb:" ":yb+(ydiff*%ocuty_g%)+yb_g_adj)
      Return  
    EndIf
  
  #EndFunction
    
  #DefineSubRoutine Resize_it(Mov_Handle)
  
    Decimals(-1)
    xdiff   = curr_xsize - init_xsize%win_track%
    ydiff   = curr_ysize - init_ysize%win_track% 
  
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;Moving the dialog on the screen will often result in the size changing by one unit so 
    ;I account for that here and do not resize if the change is only one unit. 
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
      xcnt = ArrInfo(o_array%win_track%,1)-1
      For xy = 1 To xcnt
        xt = ItemExtract(1,o_array%win_track%[xy,6]," ")
        yt = ItemExtract(2,o_array%win_track%[xy,6]," ")
        xb = ItemExtract(3,o_array%win_track%[xy,6]," ")
        yb = ItemExtract(4,o_array%win_track%[xy,6]," ")
        Decimals(0)
        Set_Control_Movement(Mov_Handle,xy,xdiff,ydiff,xt,yt,xb,yb,o_array%win_track%)
        Decimals(-1)
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;Refresh the Control as it doesn't always redraw correctly.  PictureButtons, Bitmaps and Calendars are excluded from refresh.
        tvar = o_array%win_track%[xy,0]
  
        ;##########################################;
        ;Code that uses MY Control Naming that may need to be changed.  pn = PictureButton, pi = Bitmap and ca = Calendar
        ;##########################################;
  
        If StrSub(tvar,1,3) != "pn_" && StrSub(tvar,1,3) != "pi_" && StrSub(tvar,1,3) != "ca_" Then 
          DialogControlSet(Mov_Handle,tvar,11,DialogControlGet(Mov_Handle,tvar,11))
        EndIf
      Next
  
  #EndSubRoutine
  
  
  Return

Article ID: W16947
File Created: 2007:07:03:14:27:08
Last Updated: 2024:06:07:07:28:53