Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

Resizing of dialog and controls functions

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Resizing of dialog and controls functions

    the following are functions that can resize dialog windows
    for pb 7.0 only.

    discussion at http://www.powerbasic.com/support/pb...ad.php?t=21425

    04 dec 2003 (changed rz_size function to check for visibility)
    thanks to don schullian and lance for the input a while back

    the include file is followed by a sample program.
    Code:
    '*********************************************************************
    'rzsize.inc for pbwin 7.0 (july 2002)
    '
    'routines to resize all controls in a dialog box based on user desires
    'note: uses fist 4 user data indexes for controls and dialogs
    '
    'subitted into public domain by carlo pagani   [email protected]
    'with thanks to semen for enumchildwindows help
    '
    'background: these routines allow your program to quickly resize the dialogs and controls
    'that need increase in input size (like textboxes, listviews treeviews etc) these routines
    'were designed to facilitate resizing of simple dialog boxes as can be seen in sample.
    '
    'usage: (see example for illustration of various options)
    ' 1. define dialog using ddt commands
    ' 2. use control set user hdlg, %control_id, 1, <anchor and sizing info>
    '    eg  control set user hdlg, %idc_listview, 1, %rz_growx or %rz_growy or %rz_anchortop or %rz_anchorleft
    '    tells the system to peg the control top left corner and grow both vertically and horizantally
    ' 3. use control set user hdlg, %control_id, 4, maklng(100, 50) to optionally set scaling
    '    tells system to grow horizantally at 100%, vertically at 50%
    '    if not set, system uses 100% both vertically and horizantally
    '    if you are growing 2 controls vertically, you need to grow each one at 50% to keep symetry
    ' 4. call rz_init hdlg in %wm_initdialog section of callback
    ' 5. add rz_size hdlg to %wm_size section of callback
    '
    ' then you have the option of restricting the minimum size by copying the %wm_getminmaxinfo section
    ' this will restrict the minimum size to the original size.
    ' lastly you can restore to the original size by calling rz_restore hdlg
    '
    'comments are welcome.
    '***************************************************************************************************
    '
    
    type rztype
      clientx as long
      clienty as long
      newx    as long
      newy    as long
      xdiff   as long
      ydiff   as long
      hdlg    as long
    end type
    
    %rz_ignore              = 1     ' ignore sizing on control
    %rz_growx               = 2     ' grow control horizantally
    %rz_growy               = 4     ' grow control vertically
    %rz_floatx              = 8     ' float control proportionally to size change horizantally
    %rz_floaty              = 16    ' float control proportionally to size change vertically
    %rz_centerx             = 32    ' center control horizantally
    %rz_centery             = 64    ' center control vertically
    
    %rz_anchortop           = 1024  ' tell system which corner(s) to anchor
    %rz_anchorbottom        = 2048
    %rz_anchorleft          = 4096
    %rz_anchorright         = 8192
    
    
    function rz_ctrlresize(byval hchild as dword, byval lparam as dword) as long
      ' adjusts each control pos and size
    
      dim x as long, y as long, xx as long, yy as long, ltmp as long
      dim ctrlid as long
      dim rzvalue as long
      dim rz as rztype ptr
      dim growpctx as long
      dim growpcty as long
    
      rz = lparam
      ctrlid = getdlgctrlid(hchild) 'get id of control
      control get user @rz.hdlg, ctrlid, 1 to rzvalue 'get sizing options
      control get user @rz.hdlg, ctrlid, 2 to ltmp    'get base anchor for x, y
      x = lowrd(ltmp) : y = hiwrd(ltmp)
      control get user @rz.hdlg, ctrlid, 3 to ltmp    'get original width and height
      xx = lowrd(ltmp) : yy = hiwrd(ltmp)
      control get user @rz.hdlg, ctrlid, 4 to ltmp    'get sizing percentages
      growpctx = lowrd(ltmp) : growpcty = hiwrd(ltmp)
    
      if (%rz_growx and rzvalue)        = %rz_growx        then xx = xx + (@rz.xdiff * growpctx/100)
      if (%rz_growy and rzvalue)        = %rz_growy        then yy = yy + (@rz.ydiff * growpcty/100)
      if (%rz_centerx and rzvalue)      = %rz_centerx      then x = (@rz.newx - xx)/2
      if (%rz_centery and rzvalue)      = %rz_centery      then y = (@rz.newy - yy)/2
      if (%rz_floatx and rzvalue)       = %rz_floatx       then x = x + (@rz.xdiff * growpctx/100)
      if (%rz_floaty and rzvalue)       = %rz_floaty       then y = y + (@rz.ydiff * growpcty/100)
      if (%rz_anchorright and rzvalue)  = %rz_anchorright  then x = @rz.newx-xx-x
      if (%rz_anchorbottom and rzvalue) = %rz_anchorbottom then y = @rz.newy-yy-y
      control set loc @rz.hdlg, ctrlid, x, y
      control set size @rz.hdlg, ctrlid, xx, yy
      function = 1
    
    end function
    
    function rz_ctrlinit(byval hchild as dword, byval lparam as dword) as long
      ' save anchor controls into user data area of control
      ' if no option specified for control, defaults to %rz_floatx/y
      dim x as long, y as long, xx as long, yy as long
      dim ctrlid as long
      dim rzvalue as long
      dim rz as rztype ptr
      dim ltmp as long
      rz = lparam
      ctrlid = getdlgctrlid(hchild) 'get id of control
      control get loc @rz.hdlg, ctrlid  to x, y 'get top left of control
      control get size @rz.hdlg, ctrlid to xx, yy 'get size of control
      control get user @rz.hdlg, ctrlid, 1 to rzvalue
      if rzvalue = 0 then
        control set user @rz.hdlg, ctrlid, 1, %rz_floatx or %rz_floaty
        control set user @rz.hdlg, ctrlid, 4, maklng(100, 100)
      end if
      if (%rz_anchorright and rzvalue) = %rz_anchorright then x = @rz.clientx-xx-x
      if (%rz_anchorbottom and rzvalue) = %rz_anchorbottom then y = @rz.clienty-yy-y
      control set user @rz.hdlg, ctrlid, 2, maklng(x, y)
      control set user @rz.hdlg, ctrlid, 3, maklng(xx, yy)
      control get user @rz.hdlg, ctrlid, 4 to ltmp
      if ltmp = 0 then control set user @rz.hdlg, ctrlid, 4, maklng(100, 100)
    
      function = 1
    end function
    
    function rz_init(hdlg as long) as long
      dim lprz as rztype ptr
      dim rz as static rztype
      lprz = varptr(rz)
      rz.hdlg = hdlg
      dialog get client hdlg to rz.clientx, rz.clienty
      dialog set user hdlg, 1, maklng(rz.clientx, rz.clienty) 'save client size
      enumchildwindows hdlg, codeptr(rz_ctrlinit), lprz
      dialog get size hdlg to rz.clientx, rz.clienty
      dialog units hdlg, rz.clientx, rz.clienty to pixels rz.newx, rz.newy
      dialog set user hdlg, 2, maklng(rz.newx, rz.newy)       'save dialog size in pixels
      dialog set user hdlg, 3, maklng(rz.clientx, rz.clienty) 'save dialog size in units
    end function
    
    function rz_size(hdlg as long) as long
      dim lprz as rztype ptr
      dim rz as static rztype, ltmp as long
      local iwv as long
      lprz = varptr(rz)
      rz.hdlg = hdlg
      iwv = iswindowvisible(hdlg)
      if iwv then sendmessage hdlg, %wm_setredraw, 0, byval %nul
      dialog get client hdlg to rz.newx, rz.newy
      dialog get user hdlg, 1 to ltmp
      rz.clientx = lowrd(ltmp) : rz.clienty = hiwrd(ltmp)
      rz.xdiff = rz.newx -  rz.clientx
      rz.ydiff = rz.newy -  rz.clienty
      enumchildwindows hdlg, codeptr(rz_ctrlresize), lprz
      if iwv then sendmessage hdlg, %wm_setredraw, 1, byval %null
      invalidaterect hdlg, byval %null , %true
      updatewindow hdlg
    end function
    
    function rz_restore(hdlg as long) as long
      dim lprz as rztype ptr
      dim rz as static rztype, ltmp as long
      lprz = varptr(rz)
      rz.hdlg = hdlg
      dialog get user hdlg, 3 to ltmp
      rz.newx = lowrd(ltmp) : rz.newy = hiwrd(ltmp)
      dialog set size hdlg, rz.newx, rz.newy
      sendmessage hdlg, %wm_setredraw, 0, byval %null
      dialog get user hdlg, 1 to ltmp
      rz.newx = lowrd(ltmp) : rz.newy = hiwrd(ltmp)
      rz.xdiff = 0
      rz.ydiff = 0
      enumchildwindows hdlg, codeptr(rz_ctrlresize), lprz
      sendmessage hdlg, %wm_setredraw, 1, byval %null
      invalidaterect hdlg, byval %null , %true
      updatewindow hdlg
    end function


    [this message has been edited by carlo pagani (edited december 04, 2003).]

  • #2
    Very Nice Carlo !

    For those who don't have PB 7.0 yet, here is a conversion made for
    the PB 6.0/6.1 compiler. I converted the Get User/Set User commands
    to properties (in the form of Atoms for speed).

    I removed the code here, because of a bug pointed out by Carlo.

    I will repost the fixed code.


    [This message has been edited by Chris Boss (edited July 05, 2002).]
    Chris Boss
    Computer Workshop
    Developer of "EZGUI"
    http://cwsof.com
    http://twitter.com/EZGUIProGuy

    Comment


    • #3
      Here is the updated version of Carlo's program, for PB 6.0:

      Code for rzsize.inc :

      Code:
      '*********************************************************************
      'RzSize.inc for PBWin 6.0/7.0 (July 2002)
      '
      'Routines to resize all controls in a dialog box based on user desires
      'NOTE: Uses fist 4 user data indexes for controls and dialogs
      '
      'Subitted into public domain by Carlo Pagani   [email protected]
      'With thanks to Semen for EnumChildWindows help
      '
      'Background: These routines allow your program to quickly resize the dialogs and controls
      'that need increase in input size (Like textboxes, listviews treeviews etc) These routines
      'were designed to facilitate resizing of simple dialog boxes as can be seen in sample.
      '
      'Usage: (See example for illustration of various options)
      ' 1. Define dialog using DDT commands
      ' 2. Use CONTROL SET USER hDlg, %Control_Id, 1, <Anchor and sizing info>
      '    Eg  CONTROL SET USER hDlg, %IDC_ListView, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
      '    Tells the system to peg the control top left corner and grow both vertically and horizantally
      ' 3. Use CONTROL SET USER hDlg, %Control_Id, 4, MAKLNG(100, 50) to optionally set scaling
      '    Tells system to grow horizantally at 100%, vertically at 50%
      '    If not set, system uses 100% both vertically and horizantally
      '    If you are growing 2 controls vertically, you need to grow each one at 50% to keep symetry
      ' 4. Call Rz_Init hDlg in %WM_INITDIALOG section of callback
      ' 5. Add Rz_Size hDlg to %WM_SIZE section of callback
      '
      ' Then you have the option of restricting the minimum size by copying the %WM_GETMINMAXINFO section
      ' This will restrict the minimum size to the original size.
      ' Lastly you can restore to the original size by calling Rz_Restore hDlg
      '
      'Comments are welcome.
      '***************************************************************************************************
      '
      
      ' ------------------------------------------------------
      '           Conversion routines for PB 6
      '           By Chris Boss - Public Domain
      ' ------------------------------------------------------
      
      GLOBAL App_UserDataAtom&()
      GLOBAL App_PropRemovedCount&
      
      ' ------------------------------------------------------
      
      SUB Rz_InitPB6UserData()
          LOCAL CN AS ASCIIZ*32, N&
          DIM App_UserDataAtom&(1 TO 4)
          FOR N&=1 TO 4
              CN="PB_USER_DATA"+LTRIM$(STR$(N&))+CHR$(0)
              App_UserDataAtom&(N&)=GlobalAddAtom(CN)
          NEXT N&
      END SUB
      
      ' ------------------------------------------------------
      
      SUB Rz_SetUser(BYVAL hDlg&, BYVAL ControlID&, BYVAL N&, BYVAL UData&)
          IF N&<1 OR N&>4 THEN EXIT SUB
          IF ControlID&=0 THEN
              SetProp hDlg&, BYVAL MAKLNG(App_UserDataAtom&(N&),0), UData&
          ELSE
              SetProp GetDlgItem(hDlg&, ControlID&), BYVAL MAKLNG(App_UserDataAtom&(N&),0), UData&
          END IF
      END SUB
      
      ' ------------------------------------------------------
      
      FUNCTION Rz_GetUser(BYVAL hDlg&, BYVAL ControlID&, BYVAL N&) AS LONG
          IF N&<1 OR N&>4 THEN
              FUNCTION=0
              EXIT FUNCTION
          END IF
          IF ControlID&=0 THEN
              FUNCTION=GetProp(hDlg&,BYVAL MAKLNG(App_UserDataAtom&(N&),0))
          ELSE
              FUNCTION=GetProp(GetDlgItem(hDlg&, ControlID&),BYVAL MAKLNG(App_UserDataAtom&(N&),0))
          END IF
      END FUNCTION
      
      ' ------------------------------------------------------
      
      SUB Rz_FreePB6UserData()
          LOCAL N&
          FOR N&=1 TO 4
              GlobalDeleteAtom App_UserDataAtom&(N&)
          NEXT N&
      END SUB
      
      SUB Rz_FreeProps(BYVAL hDlg&, BYVAL ControlID&)
         IF ControlID&=0 THEN
            ' free props for all controls in dialog, plus dialog props
            EnumChildWindows hDlg&, CODEPTR(FreeChildPropsProc), 0
            EnumProps hDlg&, CODEPTR(FreeAllPropsProc)
         ELSE
            EnumProps GetDlgItem(hDlg&, ControlID&), CODEPTR(FreeAllPropsProc)
         END IF
      END SUB
      
      ' =========================================================================
      '               Callbacks used internally by Rz_FreeProps
      ' =========================================================================
      
      FUNCTION FreeChildPropsProc(BYVAL hWnd&, BYVAL lParam&) AS LONG
          EnumProps hWnd&, CODEPTR(FreeAllPropsProc)
          FUNCTION=%TRUE
      END FUNCTION
      
      ' ------------------------------------------------------
      
      FUNCTION FreeAllPropsProc(BYVAL hWnd&, BYVAL LpStrPtr&, BYVAL hData&) AS LONG
          LOCAL PN AS ASCIIZ PTR, P$, A&
          PN=LpStrPtr&
          [email protected]
          IF LEFT$(P$,12)="PB_USER_DATA" THEN
              A&=GlobalFindAtom(@PN)
              RemoveProp hWnd&, BYVAL MAKLNG(A&,0)
              App_PropRemovedCount&=App_PropRemovedCount&+1
          END IF
          FUNCTION=%TRUE
      END FUNCTION
      
      ' =========================================================================
      
      ' ------------------------------------------------------
      '           End routines for PB 6.0 conversion
      ' ------------------------------------------------------
      
      TYPE RzType
        ClientX AS LONG
        ClientY AS LONG
        NewX    AS LONG
        NewY    AS LONG
        XDiff   AS LONG
        YDiff   AS LONG
        hDlg    AS LONG
      END TYPE
      
      %Rz_Ignore              = 1     ' Ignore sizing on control
      %Rz_GrowX               = 2     ' Grow control horizantally
      %Rz_GrowY               = 4     ' Grow control vertically
      %Rz_FloatX              = 8     ' Float control proportionally to size change horizantally
      %Rz_FloatY              = 16    ' Float control proportionally to size change vertically
      %Rz_CenterX             = 32    ' Center control horizantally
      %Rz_CenterY             = 64    ' Center control vertically
      
      %Rz_AnchorTop           = 1024  ' Tell system which corner(s) to anchor
      %Rz_AnchorBottom        = 2048
      %Rz_AnchorLeft          = 4096
      %Rz_AnchorRight         = 8192
      
      
      FUNCTION Rz_CtrlReSize(BYVAL hChild AS DWORD, BYVAL lParam AS DWORD) AS LONG
        ' Adjusts each control pos and size
      
        DIM x AS LONG, y AS LONG, xx AS LONG, yy AS LONG, lTmp AS LONG
        DIM CtrlId AS LONG
        DIM RzValue AS LONG
        DIM Rz AS RzType PTR
        DIM GrowPctX AS LONG
        DIM GrowPctY AS LONG
      
        Rz = lParam
        CtrlId = GetDlgCtrlID(hChild) 'Get id of control
        RzValue=Rz_GetUser(@Rz.hDlg, CtrlId, 1)  'Get sizing options
        lTmp=Rz_GetUser(@Rz.hDlg, CtrlId, 2)     'Get base anchor for x, y
        x = LOWRD(lTmp) : y = HIWRD(lTmp)
        lTmp=Rz_GetUser(@Rz.hDlg, CtrlId, 3)    'Get original width and height
        xx = LOWRD(lTmp) : yy = HIWRD(lTmp)
        lTmp=Rz_GetUser(@Rz.hDlg, CtrlId, 4)    'Get sizing percentages
        GrowPctX = LOWRD(lTmp) : GrowPctY = HIWRD(lTmp)
      
        IF (%Rz_GrowX AND RzValue)        = %Rz_GrowX        THEN xx = xx + (@Rz.XDiff * GrowPctX/100)
        IF (%Rz_GrowY AND RzValue)        = %Rz_GrowY        THEN yy = yy + (@Rz.YDiff * GrowPctY/100)
        IF (%Rz_CenterX AND RzValue)      = %Rz_CenterX      THEN x = (@Rz.NewX - xx)/2
        IF (%Rz_CenterY AND RzValue)      = %Rz_CenterY      THEN y = (@Rz.NewY - YY)/2
        IF (%Rz_FloatX AND RzValue)       = %Rz_FloatX       THEN x = x + (@Rz.XDiff * GrowPctX/100)
        IF (%Rz_FloatY AND RzValue)       = %Rz_FloatY       THEN y = y + (@Rz.YDiff * GrowPctY/100)
        IF (%Rz_AnchorRight AND RzValue)  = %Rz_AnchorRight  THEN x = @Rz.NewX-xx-x
        IF (%Rz_AnchorBottom AND RzValue) = %Rz_AnchorBottom THEN y = @Rz.Newy-yy-y
        CONTROL SET LOC @Rz.hDlg, CtrlId, x, y
        CONTROL SET SIZE @Rz.hDlg, CtrlId, xx, yy
        FUNCTION = 1
      
      END FUNCTION
      
      FUNCTION Rz_CtrlInit(BYVAL hChild AS DWORD, BYVAL lParam AS DWORD) AS LONG
        ' Save anchor controls into user data area of control
        ' If no option specified for control, defaults to %Rz_FloatX/Y
        DIM x AS LONG, y AS LONG, xx AS LONG, yy AS LONG
        DIM CtrlId AS LONG
        DIM RzValue AS LONG
        DIM Rz AS RzType PTR
        DIM lTmp AS LONG
        Rz = lParam
        CtrlId = GetDlgCtrlID(hChild) 'Get id of control
        CONTROL GET LOC @Rz.hDlg, CtrlId  TO x, y 'Get top left of control
        CONTROL GET SIZE @Rz.hDlg, CtrlId TO xx, yy 'Get size of control
        RzValue=Rz_GetUser(@Rz.hDlg, CtrlId, 1)
        IF RzValue = 0 THEN
          Rz_SetUser @Rz.hDlg, CtrlId, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser @Rz.hDlg, CtrlId, 4, MAKLNG(50, 50)
        END IF
        IF (%Rz_AnchorRight AND RzValue) = %Rz_AnchorRight THEN x = @Rz.ClientX-xx-x
        IF (%Rz_AnchorBottom AND RzValue) = %Rz_AnchorBottom THEN y = @Rz.ClientY-yy-y
        Rz_SetUser @Rz.hDlg, CtrlId, 2, MAKLNG(x, y)
        Rz_SetUser @Rz.hDlg, CtrlId, 3, MAKLNG(xx, yy)
        lTmp=Rz_GetUser(@Rz.hDlg, CtrlId, 4)
        IF lTmp = 0 THEN Rz_SetUser @Rz.hDlg, CtrlId, 4, MAKLNG(100, 100)
      
        FUNCTION = 1
      END FUNCTION
      
      FUNCTION Rz_Init(hDlg AS LONG) AS LONG
        DIM lpRz AS RzType PTR
        DIM Rz AS STATIC Rztype
        lpRz = VARPTR(Rz)
        Rz.hDlg = hDlg
        DIALOG GET CLIENT hDlg TO Rz.ClientX, Rz.ClientY
        Rz_SetUser hdlg, 0, 1, MAKLNG(Rz.ClientX, Rz.ClientY) 'Save client size
        EnumChildWindows hDlg, CODEPTR(Rz_CtrlInit), lpRz
      
        DIALOG GET SIZE hDlg TO Rz.ClientX, Rz.ClientY
        DIALOG UNITS hDlg, Rz.ClientX, Rz.ClientY TO PIXELS Rz.NewX, Rz.NewY
        Rz_SetUser hdlg, 0, 2, MAKLNG(Rz.NewX, Rz.NewY)       'Save dialog size in pixels
        Rz_SetUser hdlg, 0, 3, MAKLNG(Rz.ClientX, Rz.ClientY) 'Save dialog size in units
      END FUNCTION
      
      FUNCTION Rz_Size(hDlg AS LONG) AS LONG
        DIM lpRz AS RzType PTR
        DIM Rz AS STATIC Rztype, lTmp AS LONG
        lpRz = VARPTR(Rz)
        Rz.hDlg = hDlg
        SendMessage hDlg, %WM_SETREDRAW, 0, BYVAL %NULL
        DIALOG GET CLIENT hDlg TO Rz.NewX, Rz.NewY
        lTmp=Rz_GetUser(hDlg, 0, 1)
        Rz.ClientX = LOWRD(lTmp) : Rz.ClientY = HIWRD(lTmp)
        Rz.XDiff = Rz.NewX -  Rz.ClientX
        Rz.YDiff = Rz.NewY -  Rz.ClientY
        EnumChildWindows hDlg, CODEPTR(Rz_CtrlReSize), lpRz
        SendMessage hDlg, %WM_SETREDRAW, 1, BYVAL %NULL
        InvalidateRect hDlg, BYVAL %NULL , %True
        UpdateWindow hDlg
      END FUNCTION
      
      FUNCTION Rz_Restore(hDlg AS LONG) AS LONG
        DIM lpRz AS RzType PTR
        DIM Rz AS STATIC Rztype, lTmp AS LONG
        lpRz = VARPTR(Rz)
        Rz.hDlg = hDlg
        lTmp=Rz_GetUser(hDlg, 0, 3)
        Rz.NewX = LOWRD(lTmp) : Rz.NewY = HIWRD(lTmp)
        DIALOG SET SIZE hDlg, Rz.NewX, Rz.NewY
        SendMessage hDlg, %WM_SETREDRAW, 0, BYVAL %NULL
        lTmp=Rz_GetUser(hDlg, 0, 1)
        Rz.NewX = LOWRD(lTmp) : Rz.NewY = HIWRD(lTmp)
        Rz.XDiff = 0
        Rz.YDiff = 0
        EnumChildWindows hDlg, CODEPTR(Rz_CtrlReSize), lpRz
        SendMessage hDlg, %WM_SETREDRAW, 1, BYVAL %NULL
        InvalidateRect hDlg, BYVAL %NULL , %True
        UpdateWindow hDlg
      END FUNCTION
      Code for rzdemo.bas :

      Code:
      'RzDemo.Bas
      'Sample to demonstrate RzSize.Inc functions
      
      #COMPILE EXE
      #DIM ALL
      
      %NOANIMATE       = 1  ' Animate control.
      %NOBUTTON        = 1
      %NOCOMBO         = 1
      %NODATETIMEPICK  = 1
      %NODRAGLIST      = 1  ' APIs to make a listbox source and sink drag&drop actions.
      %NOEDIT          = 1
      %NOFLATSBAPIS    = 1
      %NOHEADER        = 1  ' Header bar control.
      %NOHOTKEY        = 1  ' HotKey control.
      %NOIMAGELIST     = 1  ' ImageList apis.
      %NOIPADDRESS     = 1
      %NOLIST          = 1
      '    %NOLISTVIEW      = 1  ' ListView control.
      %NOMENUHELP      = 1  ' APIs to help manage menus, especially with a status bar.
      %NOMONTHCAL      = 1
      %NOMUI           = 1
      %NONATIVEFONTCTL = 1
      %NOPAGESCROLLER  = 1
      %NOPROGRESS      = 1  ' Progress gas gauge.
      %NOREBAR         = 1
      '    %NOSTATUSBAR     = 1  ' Status bar control.
      %NOTABCONTROL    = 1
      %NOTOOLBAR       = 1  ' Customizable bitmap-button toolbar control.
      %NOTOOLTIPS      = 1
      %NOTRACKBAR      = 1  ' Customizable column-width tracking control.
      %NOTREEVIEW      = 1  ' TreeView control.%NOUPDOWN        = 1  ' Up and Down arrow increment/decrement control.
      
      
      #INCLUDE "WIN32API.INC"
      #INCLUDE "COMMCTRL.INC"
      #INCLUDE "RzSize.Inc"
      
      %IDD_DIALOG1            = 101
      %IDC_SYSLISTVIEW32_1    = 1001
      %IDC_SYSLISTVIEW32_2    = 1002
      %IDC_BUTTON1            = 1003
      %IDC_BUTTON2            = 1004
      %IDC_BUTTON3            = 1005
      %IDOK                   = 1
      %IDC_BUTTON4            = 1006
      %IDC_OPTION1            = 1007
      %IDC_OPTION2            = 1008
      %IDC_OPTION3            = 1009
      %IDC_CHECKBOX1          = 1010
      %IDC_FRAME1             = 1011
      %IDC_FRAME2             = 1012
      %IDC_TextBox1          = 1013
      %IDC_OPTION4            = 1014
      %IDC_OPTION5            = 1015
      %IDC_FRAME3             = 1016
      %IDC_BUTTON5            = 1017
      %IDC_BUTTON6            = 1018
      
      DECLARE FUNCTION SampleListView(BYVAL hDlg AS DWORD, BYVAL lID AS LONG, BYVAL _
          lColCnt AS LONG, BYVAL lRowCnt AS LONG) AS LONG
      DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
      DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
      
      FUNCTION PBMAIN()
        DIM icc AS INIT_COMMON_CONTROLSEX
        DIM lTmp AS LONG
        DIM hParent AS DWORD
        DIM hDlg AS STATIC DWORD
      
        icc.dwICC = %ICC_DATE_CLASSES OR %ICC_BAR_CLASSES OR %ICC_LISTVIEW_CLASSES
        icc.dwSize = SIZEOF(icc)
        InitCommonControlsEx icc
      
      
        ' ---------------------------
        Rz_InitPB6UserData            ' conversion for PB 6.0
        ' ---------------------------
      
        'Define controls for sample
          DIALOG NEW hParent, "Sample Resize Dialog", 10, 10, 366, 230, %WS_POPUP OR _
              %WS_BORDER OR %WS_DLGFRAME OR %WS_THICKFRAME OR %WS_CAPTION OR _
              %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR %WS_CLIPSIBLINGS _
              OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _
              %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _
              %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
              %WS_EX_RIGHTSCROLLBAR, TO hDlg
          CONTROL ADD "SysListView32", hDlg, %IDC_SYSLISTVIEW32_1, "SysListView321", _
              5, 15, 210, 70, %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR %WS_TABSTOP _
              OR %LVS_REPORT OR %LVS_SHOWSELALWAYS, %WS_EX_LEFT OR _
              %WS_EX_RIGHTSCROLLBAR
          CONTROL ADD "SysListView32", hDlg, %IDC_SYSLISTVIEW32_2, "SysListView321", _
              5, 120, 210, 75, %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR %WS_TABSTOP _
              OR %LVS_REPORT OR %LVS_SHOWSELALWAYS, %WS_EX_LEFT OR _
              %WS_EX_RIGHTSCROLLBAR
          CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "Restore to orignal size", 5, 2, 355, 10
          CONTROL ADD BUTTON, hDlg, %IDC_BUTTON2, "Exit", 310, 200, 50, 15
          CONTROL ADD OPTION, hDlg, %IDC_OPTION1, "Opt 1", 10, 100, 35, 10
          CONTROL ADD OPTION, hDlg, %IDC_OPTION2, "Opt 2", 45, 100, 30, 10
          CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX1, "Limit", 85, 100, 35, 10
          CONTROL SET CHECK hDlg, %IDC_CHECKBOX1, 1
          CONTROL ADD FRAME, hDlg, %IDC_FRAME2, "Change", 5, 90, 75, 25
          CONTROL ADD TEXTBOX, hDlg, %IDC_TextBox1, "Select one of the option radio buttons, then resize", 230, 15, 130, 180, %ES_MULTILINE
          CONTROL ADD OPTION, hDlg, %IDC_OPTION3, "Opt 3", 130, 100, 30, 10
          CONTROL ADD OPTION, hDlg, %IDC_OPTION4, "Opt 4", 170, 100, 35, 10
          CONTROL ADD FRAME, hDlg, %IDC_FRAME3, "Sizing attributes", 120, 91, 95, 25
          CONTROL ADD BUTTON, hDlg, %IDC_BUTTON5, "Left Button", 5, 200, 50, 15
          CONTROL ADD BUTTON, hDlg, %IDC_BUTTON6, "Center Button", 150, 200, 55, 15
      
          'For each control we specify how we want to resize
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(100, 100)
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_AnchorBottom OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(100, 50)
          Rz_SetUser hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_FRAME3, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION3, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION4, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_TextBox1, 1, %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
          Rz_SetUser hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
      
          SampleListView hDlg, %IDC_SYSLISTVIEW32_1, 3, 30 'From PBForms
          SampleListView hDlg, %IDC_SYSLISTVIEW32_2, 3, 30
      
          DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc()
      
        ' ---------------------------
        Rz_FreePB6UserData            ' conversion for PB 6.0
        MSGBOX STR$(App_PropRemovedCount&)+" Properties were removed properly !"
        ' ---------------------------
      END FUNCTION
      
      CALLBACK FUNCTION ShowDIALOG1Proc()
          DIM hDlg AS STATIC DWORD
          DIM MinMaxPtr AS MINMAXINFO PTR
          DIM RzData  AS RzType
          DIM hStatusBar AS STATIC DWORD
          DIM StatusText AS ASCIIZ * 250
          DIM lTmp AS LONG
          DIM LimitSize AS STATIC LONG
      
          SELECT CASE CBMSG
      
              ' -----------------------------------------------------------------------
              '                    added for PB 6.0 conversion
              ' -----------------------------------------------------------------------
              CASE %WM_DESTROY
                   ' note: all child windows on form should still exist at this point
                   Rz_FreeProps CBHNDL, 0     ' free all props for all controls
                   ' if you must destroy a control before this point use the
                   ' Rz_FreeProps command with the Dialog handle and Control ID to do this
              ' -----------------------------------------------------------------------
      
              CASE %WM_INITDIALOG
                hdlg = CBHNDL  'Old habits die hard, I'm used to using hDlg rather than CBHNDL
      
                Rz_Init Hdlg 'This initializes the dialog and control settings
      
      
                'The next few lines define a statusbar
                hStatusBar = CreateStatusWindow(%SBARS_SIZEGRIP OR %WS_CHILD OR %WS_VISIBLE OR %WS_CLIPSIBLINGS OR %CCS_BOTTOM, "", hDlg, 0)
                StatusText = "Untick limit to allow sizing smaller than restricted size!"
                SendMessage hStatusBar, %WM_SETTEXT, 0, VARPTR(StatusText)
                LimitSize = %True
      
              CASE %WM_SIZE
                Rz_Size hDlg 'This resizes all controls as defined
      
                'Put some useless info onto status bar
                DIALOG GET CLIENT hDlg TO RzData.ClientX, RzData.ClientY
                CONTROL GET SIZE hDlg, %IDC_TextBox1 TO RzData.NewX, RzData.NewY
                StatusText = "Untick limit to allow sizing smaller than restricted size! Dialog Size "+FORMAT$(RzData.ClientX)+"/"+ FORMAT$(RzData.ClientY)+"  TextBox Size "+ FORMAT$(RzData.NewX)+"/"+ FORMAT$(RzData.NewY)
                SendMessage hStatusBar, %WM_SETTEXT, 0, VARPTR(StatusText)
      
              CASE %WM_GETMINMAXINFO 'Add this section without if statement to prevent the dialog from being resized smaller than original size
                IF LimitSize=%True THEN
                  MinMaxPtr=CBLPARAM
                  lTmp=Rz_GetUser(CBHNDL, 0, 2)   'Get min pixels allowed
                  RzData.ClientX = LOWRD(lTmp) : RzData.ClientY = HIWRD(lTmp)
                  @MinMaxPtr.ptMinTrackSize.x = RzData.ClientX
                  @MinMaxPtr.ptMinTrackSize.y = RzData.ClientY
                END IF
      
              CASE %WM_COMMAND
                  SELECT CASE CBCTL
                      CASE %IDC_BUTTON1
                          IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                            Rz_Restore hDlg 'This restores the dialog to original size
                          END IF
                      CASE %IDC_BUTTON2
                          IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                              DIALOG END Hdlg
                          END IF
                      CASE %IDC_CHECKBOX1
                        CONTROL GET CHECK hDlg, %IDC_CHECKBOX1 TO lTmp
                        IF lTmp = 1 THEN LimitSize = %True ELSE LimitSize = %False
                      CASE %IDC_OPTION1
                        CONTROL GET CHECK hDlg, %IDC_OPTION1 TO lTmp
                        IF lTmp = 1 THEN
                          Rz_Restore hDlg 'This restores the dialog to original size
                          GOSUB SetOpt1
                          CONTROL SET TEXT hDlg, %IDC_TextBox1, "This option grows top left list box down, keeps text box horizontal size and moves all other controls "+_
                          "around to accomodate this! The options in the middle are anchored left bottom and right bottom, appart from the check box which floats."
                        END IF
                      CASE %IDC_OPTION2
                        CONTROL GET CHECK hDlg, %IDC_OPTION2 TO lTmp
                        IF lTmp = 1 THEN
                          Rz_Restore hDlg 'This restores the dialog to original size
                          GOSUB SetOpt2
                          CONTROL SET TEXT hDlg, %IDC_TextBox1, "As Opt1, but now both listviews are sized, while the textbox only sizes vertically! Note the buttons at the bottom "+_
                          "which are anchored to bottom, left, right and center of the dialog"
                        END IF
                      CASE %IDC_OPTION3
                        CONTROL GET CHECK hDlg, %IDC_OPTION3 TO lTmp
                        IF lTmp = 1 THEN
                          Rz_Restore hDlg 'This restores the dialog to original size
                          GOSUB SetOpt3
                          CONTROL SET TEXT hDlg, %IDC_TextBox1, "This is the symetrical option where all controls grow in unison! The Opt3, 4 and Frame no longer are "+_
                          "anchored to right margin, but float with % set for floating"
                        END IF
                      CASE %IDC_OPTION4
                        CONTROL GET CHECK hDlg, %IDC_OPTION4 TO lTmp
                        IF lTmp = 1 THEN
                          Rz_Restore hDlg 'This restores the dialog to original size
                          GOSUB SetOpt4
                          CONTROL SET TEXT hDlg, %IDC_TextBox1, "The top listbox grows at 70% while the bottom at 30%, The other controls follow the sizing. By using percentages it is possible to "+_
                          "to make various proportional sizing! You can restore the original size by using the top button."
                        END IF
                  END SELECT
          END SELECT
      
      EXIT FUNCTION
      
      SetOpt1: 'Top left listview grows down, both listviews grow accross, all other controls accomodate
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(100, 100) 'Grow by 50% each way as size shared with other listview and textbox
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_AnchorBottom OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(100, 0)
          Rz_SetUser hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION1, 4, MAKLNG(100, 100) 'For all the controls in the middle of the screen, we need to set % movement
          Rz_SetUser hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION2, 4, MAKLNG(100, 100)
          Rz_SetUser hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME2, 4, MAKLNG(100, 100)
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_FRAME3, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME3, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_OPTION3, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION3, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_OPTION4, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION4, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_TextBox1, 1, %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_TextBox1, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
          Rz_SetUser hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
          Rz_Init hDlg
      RETURN
      
      SetOpt2:
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(100, 50) 'Grow by 50% each way as size shared with other listview and textbox
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorBottom OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(100, 50)
          Rz_SetUser hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION1, 4, MAKLNG(100, 50) 'For all the controls in the middle of the screen, we need to set % movement
          Rz_SetUser hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION2, 4, MAKLNG(100, 50)
          Rz_SetUser hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME2, 4, MAKLNG(100, 50)
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 4, MAKLNG(50, 50)
          Rz_SetUser hDlg, %IDC_FRAME3, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME3, 4, MAKLNG(50, 50)
          Rz_SetUser hDlg, %IDC_OPTION3, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION3, 4, MAKLNG(50, 50)
          Rz_SetUser hDlg, %IDC_OPTION4, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION4, 4, MAKLNG(50, 50)
          Rz_SetUser hDlg, %IDC_TextBox1, 1, %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_TextBox1, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
          Rz_SetUser hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
          Rz_Init hDlg
      RETURN
      
      SetOpt3:
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(50, 50) 'Grow by 50% each way as size shared with other listview and textbox
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorBottom OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(50, 50)
          Rz_SetUser hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION1, 4, MAKLNG(100, 50) 'For all the controls in the middle of the screen, we need to set % movement
          Rz_SetUser hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION2, 4, MAKLNG(100, 50)
          Rz_SetUser hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME2, 4, MAKLNG(100, 50)
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 4, MAKLNG(25, 50)
          Rz_SetUser hDlg, %IDC_FRAME3, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME3, 4, MAKLNG(50, 50)
          Rz_SetUser hDlg, %IDC_OPTION3, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION3, 4, MAKLNG(50, 50)
          Rz_SetUser hDlg, %IDC_OPTION4, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION4, 4, MAKLNG(50, 50)
          Rz_SetUser hDlg, %IDC_TextBox1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_TextBox1, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
          Rz_SetUser hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
          Rz_Init hDlg
      RETURN
      
      SetOpt4:
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(100, 70) 'Grow by 50% each way as size shared with other listview and textbox
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorBottom OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(100, 30)
          Rz_SetUser hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
          Rz_SetUser hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION1, 4, MAKLNG(100, 70) 'For all the controls in the middle of the screen, we need to set % movement
          Rz_SetUser hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION2, 4, MAKLNG(100, 70)
          Rz_SetUser hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME2, 4, MAKLNG(100, 70)
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_CHECKBOX1, 4, MAKLNG(50, 70)
          Rz_SetUser hDlg, %IDC_FRAME3, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_FRAME3, 4, MAKLNG(50, 70)
          Rz_SetUser hDlg, %IDC_OPTION3, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION3, 4, MAKLNG(50, 70)
          Rz_SetUser hDlg, %IDC_OPTION4, 1, %Rz_AnchorRight OR %Rz_FloatY
          Rz_SetUser hDlg, %IDC_OPTION4, 4, MAKLNG(50, 70)
          Rz_SetUser hDlg, %IDC_TextBox1, 1, %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
          Rz_SetUser hDlg, %IDC_TextBox1, 4, MAKLNG(50, 100)
          Rz_SetUser hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
          Rz_SetUser hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
          Rz_Init hDlg
      RETURN
      
      
      END FUNCTION
      
      FUNCTION SampleListView(BYVAL hDlg AS DWORD, BYVAL lID AS LONG, BYVAL lColCnt AS _
          LONG, BYVAL lRowCnt AS LONG) AS LONG
          LOCAL lStyle  AS LONG
          LOCAL tLVC    AS LV_COLUMN
          LOCAL tLVI    AS LV_ITEM
          LOCAL szBuf   AS ASCIIZ * 32
          LOCAL lCol    AS LONG
          LOCAL lRow    AS LONG
          LOCAL hCtl    AS DWORD
      
          CONTROL HANDLE hDlg, lID TO hCtl
      
          lStyle = ListView_GetExtendedListViewStyle(hCtl)
          ListView_SetExtendedListViewStyle hCtl, _
              lStyle OR %LVS_EX_FULLROWSELECT OR %LVS_EX_GRIDLINES
      
          'Load column headers.
          tLVC.mask    = %LVCF_FMT OR %LVCF_TEXT OR %LVCF_SUBITEM
          tLVC.fmt     = %LVCFMT_LEFT
          tLVC.pszText = VARPTR(szBuf)
          FOR lCol = 0 TO lColCnt - 1
              szBuf = "Column" + FORMAT$(lCol)
              tLVC.iOrder = lCol
              ListView_InsertColumn hCtl, lCol, tLVC
          NEXT lCol
      
          'Load sample data.
          FOR lRow = 0 TO lRowCnt - 1
              tLVI.stateMask   = %LVIS_FOCUSED
              tLVI.pszText     = VARPTR(szBuf)
              tLVI.iItem       = lRow
              FOR lCol = 0 TO lColCnt - 1
                  szBuf           = "Column" + FORMAT$(lCol) + " Row" + FORMAT$(lRow)
                  tLVI.iSubItem   = lCol
                  tLVI.lParam     = lRow
                  IF lCol = 0 THEN
                      tLVI.mask = %LVIF_TEXT OR %LVIF_PARAM OR %LVIF_STATE
                      ListView_InsertItem hCtl, tLVI
                  ELSE
                      tLVI.mask = %LVIF_TEXT
                      ListView_SetItem hCtl, tLVI
                  END IF
              NEXT lCol
          NEXT i
      
          'Auto size columns.
          FOR lCol = 0 TO lColCnt - 1
              ListView_SetColumnWidth hCtl, lCol, %LVSCW_AUTOSIZE
          NEXT lCol
      
      END FUNCTION


      ------------------
      Chris Boss
      Computer Workshop
      Developer of "EZGUI"
      http://cwsof.com
      http://twitter.com/EZGUIProGuy

      Comment


      • #4
        Resize trouble

        When I compiled and ran on 7.04 it gave me a Windows error message upon exiting the program. Tried both the original and the 7.0 updated version. Any new versions out there or are the routines ok and the problem is with the sample program. Apart from that error on exit it looks great though.

        Bob Mechler

        Comment


        • #5
          Seems the orignial demo part went missing.

          Hi Bob

          Try this code with the include in the first message

          -_Carlo

          Code:
          'RzDemo.Bas
          'Sample to demonstrate RzSize.Inc functions
          
          #COMPILE EXE
          #DIM ALL
          
          %NOANIMATE       = 1  ' Animate control.
          %NOBUTTON        = 1
          %NOCOMBO         = 1
          %NODATETIMEPICK  = 1
          %NODRAGLIST      = 1  ' APIs to make a listbox source and sink drag&drop actions.
          %NOEDIT          = 1
          %NOFLATSBAPIS    = 1
          %NOHEADER        = 1  ' Header bar control.
          %NOHOTKEY        = 1  ' HotKey control.
          %NOIMAGELIST     = 1  ' ImageList apis.
          %NOIPADDRESS     = 1
          %NOLIST          = 1
          '    %NOLISTVIEW      = 1  ' ListView control.
          %NOMENUHELP      = 1  ' APIs to help manage menus, especially with a status bar.
          %NOMONTHCAL      = 1
          %NOMUI           = 1
          %NONATIVEFONTCTL = 1
          %NOPAGESCROLLER  = 1
          %NOPROGRESS      = 1  ' Progress gas gauge.
          %NOREBAR         = 1
          '    %NOSTATUSBAR     = 1  ' Status bar control.
          %NOTABCONTROL    = 1
          %NOTOOLBAR       = 1  ' Customizable bitmap-button toolbar control.
          %NOTOOLTIPS      = 1
          %NOTRACKBAR      = 1  ' Customizable column-width tracking control.
          %NOTREEVIEW      = 1  ' TreeView control.%NOUPDOWN        = 1  ' Up and Down arrow increment/decrement control.
          
          
          #INCLUDE "WIN32API.INC"
          #INCLUDE "COMMCTRL.INC"
          #INCLUDE "RzSize.Inc"
          
          %IDD_DIALOG1            = 101
          %IDC_SYSLISTVIEW32_1    = 1001
          %IDC_SYSLISTVIEW32_2    = 1002
          %IDC_BUTTON1            = 1003
          %IDC_BUTTON2            = 1004
          %IDC_BUTTON3            = 1005
          %IDOK                   = 1
          %IDC_BUTTON4            = 1006
          %IDC_OPTION1            = 1007
          %IDC_OPTION2            = 1008
          %IDC_OPTION3            = 1009
          %IDC_CHECKBOX1          = 1010
          %IDC_FRAME1             = 1011
          %IDC_FRAME2             = 1012
          %IDC_TextBox1          = 1013
          %IDC_OPTION4            = 1014
          %IDC_OPTION5            = 1015
          %IDC_FRAME3             = 1016
          %IDC_BUTTON5            = 1017
          %IDC_BUTTON6            = 1018
          
          DECLARE FUNCTION SampleListView(BYVAL hDlg AS DWORD, BYVAL lID AS LONG, BYVAL _
              lColCnt AS LONG, BYVAL lRowCnt AS LONG) AS LONG
          DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
          DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
          
          FUNCTION PBMAIN()
            DIM icc AS INIT_COMMON_CONTROLSEX
            DIM lTmp AS LONG
            DIM hParent AS DWORD
            DIM hDlg AS STATIC DWORD
          
            icc.dwICC = %ICC_DATE_CLASSES OR %ICC_BAR_CLASSES OR %ICC_LISTVIEW_CLASSES
            icc.dwSize = SIZEOF(icc)
            InitCommonControlsEx icc
          
            'Define controls for sample
              DIALOG NEW hParent, "Sample Resize Dialog", 10, 10, 366, 230, %WS_POPUP OR _
                  %WS_BORDER OR %WS_DLGFRAME OR %WS_THICKFRAME OR %WS_CAPTION OR _
                  %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR %WS_CLIPSIBLINGS _
                  OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR _
                  %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _
                  %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
                  %WS_EX_RIGHTSCROLLBAR, TO hDlg
              CONTROL ADD "SysListView32", hDlg, %IDC_SYSLISTVIEW32_1, "SysListView321", _
                  5, 15, 210, 70, %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR %WS_TABSTOP _
                  OR %LVS_REPORT OR %LVS_SHOWSELALWAYS, %WS_EX_LEFT OR _
                  %WS_EX_RIGHTSCROLLBAR
              CONTROL ADD "SysListView32", hDlg, %IDC_SYSLISTVIEW32_2, "SysListView321", _
                  5, 120, 210, 75, %WS_CHILD OR %WS_VISIBLE OR %WS_BORDER OR %WS_TABSTOP _
                  OR %LVS_REPORT OR %LVS_SHOWSELALWAYS, %WS_EX_LEFT OR _
                  %WS_EX_RIGHTSCROLLBAR
              CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "Restore to orignal size", 5, 2, 355, 10
              CONTROL ADD BUTTON, hDlg, %IDC_BUTTON2, "Exit", 310, 200, 50, 15
              CONTROL ADD OPTION, hDlg, %IDC_OPTION1, "Opt 1", 10, 100, 35, 10
              CONTROL ADD OPTION, hDlg, %IDC_OPTION2, "Opt 2", 45, 100, 30, 10
              CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX1, "Limit", 85, 100, 35, 10
              CONTROL SET CHECK hDlg, %IDC_CHECKBOX1, 1
              CONTROL ADD FRAME, hDlg, %IDC_FRAME2, "Change", 5, 90, 75, 25
              CONTROL ADD TEXTBOX, hDlg, %IDC_TextBox1, "Select one of the option radio buttons, then resize", 230, 15, 130, 180, %ES_MULTILINE
              CONTROL ADD OPTION, hDlg, %IDC_OPTION3, "Opt 3", 130, 100, 30, 10
              CONTROL ADD OPTION, hDlg, %IDC_OPTION4, "Opt 4", 170, 100, 35, 10
              CONTROL ADD FRAME, hDlg, %IDC_FRAME3, "Sizing attributes", 120, 91, 95, 25
              CONTROL ADD BUTTON, hDlg, %IDC_BUTTON5, "Left Button", 5, 200, 50, 15
              CONTROL ADD BUTTON, hDlg, %IDC_BUTTON6, "Center Button", 150, 200, 55, 15
          
              'For each control we specify how we want to resize
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(100, 100)
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_AnchorBottom OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(100, 50)
              CONTROL SET USER hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_FRAME3, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION3, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION4, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_TextBox1, 1, %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
              CONTROL SET USER hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
          
              SampleListView hDlg, %IDC_SYSLISTVIEW32_1, 3, 30 'From PBForms
              SampleListView hDlg, %IDC_SYSLISTVIEW32_2, 3, 30
          '    DIALOG SHOW STATE hDlg, %SW_MAXIMIZE
              DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc()
          
          END FUNCTION
          
          CALLBACK FUNCTION ShowDIALOG1Proc()
              DIM hDlg AS STATIC DWORD
              DIM MinMaxPtr AS MINMAXINFO PTR
              DIM RzData  AS RzType
              DIM hStatusBar AS STATIC DWORD
              DIM StatusText AS ASCIIZ * 250
              DIM lTmp AS LONG
              DIM LimitSize AS STATIC LONG
              static Rz_InitDone as LONG
          
              SELECT CASE CBMSG
                  CASE %WM_INITDIALOG
                    hdlg = CBHNDL  'Old habits die hard, I'm used to using hDlg rather than CBHNDL
          
                    'The next few lines define a statusbar
                    hStatusBar = CreateStatusWindow(%SBARS_SIZEGRIP OR %WS_CHILD OR %WS_VISIBLE OR %WS_CLIPSIBLINGS OR %CCS_BOTTOM, "", hDlg, 0)
                    StatusText = "Untick limit to allow sizing smaller than restricted size!"
                    SendMessage hStatusBar, %WM_SETTEXT, 0, VARPTR(StatusText)
                    LimitSize = %True
          
                  CASE %WM_SIZE
                    if Rz_InitDone = %False then
                      Rz_Init Hdlg 'This initializes the dialog and control settings
                      Rz_InitDone = %True
                    end if
                    Rz_Size hDlg 'This resizes all controls as defined
          
                    'Put some useless info onto status bar
                    DIALOG GET CLIENT hDlg TO RzData.ClientX, RzData.ClientY
                    CONTROL GET SIZE hDlg, %IDC_TextBox1 TO RzData.NewX, RzData.NewY
                    StatusText = "Untick limit to allow sizing smaller than restricted size! Dialog Size "+FORMAT$(RzData.ClientX)+"/"+ FORMAT$(RzData.ClientY)+"  TextBox Size "+ FORMAT$(RzData.NewX)+"/"+ FORMAT$(RzData.NewY)
                    SendMessage hStatusBar, %WM_SETTEXT, 0, VARPTR(StatusText)
          
                  CASE %WM_GETMINMAXINFO 'Add this section without if statement to prevent the dialog from being resized smaller than original size
                    IF LimitSize=%True THEN
                      MinMaxPtr=CBLPARAM
                      DIALOG GET USER CBHNDL, 2 TO lTmp 'Get min pixels allowed
                      RzData.ClientX = LOWRD(lTmp) : RzData.ClientY = HIWRD(lTmp)
                      @MinMaxPtr.ptMinTrackSize.x = RzData.ClientX
                      @MinMaxPtr.ptMinTrackSize.y = RzData.ClientY
                    END IF
          
                  CASE %WM_COMMAND
                      SELECT CASE CBCTL
                          CASE %IDC_BUTTON1
                              IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                                Rz_Restore hDlg 'This restores the dialog to original size
                              END IF
                          CASE %IDC_BUTTON2
                              IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
                                  DIALOG END Hdlg
                              END IF
                          CASE %IDC_CHECKBOX1
                            CONTROL GET CHECK hDlg, %IDC_CHECKBOX1 TO lTmp
                            IF lTmp = 1 THEN LimitSize = %True ELSE LimitSize = %False
                          CASE %IDC_OPTION1
                            CONTROL GET CHECK hDlg, %IDC_OPTION1 TO lTmp
                            IF lTmp = 1 THEN
                              Rz_Restore hDlg 'This restores the dialog to original size
                              GOSUB SetOpt1
                              CONTROL SET TEXT hDlg, %IDC_TextBox1, "This option grows top left list box down, keeps text box horizontal size and moves all other controls "+_
                              "around to accomodate this! The options in the middle are anchored left bottom and right bottom, appart from the check box which floats."
                            END IF
                          CASE %IDC_OPTION2
                            CONTROL GET CHECK hDlg, %IDC_OPTION2 TO lTmp
                            IF lTmp = 1 THEN
                              Rz_Restore hDlg 'This restores the dialog to original size
                              GOSUB SetOpt2
                              CONTROL SET TEXT hDlg, %IDC_TextBox1, "As Opt1, but now both listviews are sized, while the textbox only sizes vertically! Note the buttons at the bottom "+_
                              "which are anchored to bottom, left, right and center of the dialog"
                            END IF
                          CASE %IDC_OPTION3
                            CONTROL GET CHECK hDlg, %IDC_OPTION3 TO lTmp
                            IF lTmp = 1 THEN
                              Rz_Restore hDlg 'This restores the dialog to original size
                              GOSUB SetOpt3
                              CONTROL SET TEXT hDlg, %IDC_TextBox1, "This is the symetrical option where all controls grow in unison! The Opt3, 4 and Frame no longer are "+_
                              "anchored to right margin, but float with % set for floating"
                            END IF
                          CASE %IDC_OPTION4
                            CONTROL GET CHECK hDlg, %IDC_OPTION4 TO lTmp
                            IF lTmp = 1 THEN
                              Rz_Restore hDlg 'This restores the dialog to original size
                              GOSUB SetOpt4
                              CONTROL SET TEXT hDlg, %IDC_TextBox1, "The top listbox grows at 70% while the bottom at 30%, The other controls follow the sizing. By using percentages it is possible to "+_
                              "to make various proportional sizing! You can restore the original size by using the top button."
                            END IF
                      END SELECT
              END SELECT
          
          EXIT FUNCTION
          
          SetOpt1: 'Top left listview grows down, both listviews grow accross, all other controls accomodate
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(100, 100) 'Grow by 50% each way as size shared with other listview and textbox
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_AnchorBottom OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(100, 0)
              CONTROL SET USER hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION1, 4, MAKLNG(100, 100) 'For all the controls in the middle of the screen, we need to set % movement
              CONTROL SET USER hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION2, 4, MAKLNG(100, 100)
              CONTROL SET USER hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME2, 4, MAKLNG(100, 100)
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_FRAME3, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME3, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_OPTION3, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION3, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_OPTION4, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION4, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_TextBox1, 1, %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_TextBox1, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
              CONTROL SET USER hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
              Rz_Init hDlg
          RETURN
          
          SetOpt2:
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(100, 50) 'Grow by 50% each way as size shared with other listview and textbox
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorBottom OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(100, 50)
              CONTROL SET USER hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION1, 4, MAKLNG(100, 50) 'For all the controls in the middle of the screen, we need to set % movement
              CONTROL SET USER hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION2, 4, MAKLNG(100, 50)
              CONTROL SET USER hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME2, 4, MAKLNG(100, 50)
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 4, MAKLNG(50, 50)
              CONTROL SET USER hDlg, %IDC_FRAME3, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME3, 4, MAKLNG(50, 50)
              CONTROL SET USER hDlg, %IDC_OPTION3, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION3, 4, MAKLNG(50, 50)
              CONTROL SET USER hDlg, %IDC_OPTION4, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION4, 4, MAKLNG(50, 50)
              CONTROL SET USER hDlg, %IDC_TextBox1, 1, %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_TextBox1, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
              CONTROL SET USER hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
              Rz_Init hDlg
          RETURN
          
          SetOpt3:
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(50, 50) 'Grow by 50% each way as size shared with other listview and textbox
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorBottom OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(50, 50)
              CONTROL SET USER hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION1, 4, MAKLNG(100, 50) 'For all the controls in the middle of the screen, we need to set % movement
              CONTROL SET USER hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION2, 4, MAKLNG(100, 50)
              CONTROL SET USER hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME2, 4, MAKLNG(100, 50)
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 4, MAKLNG(25, 50)
              CONTROL SET USER hDlg, %IDC_FRAME3, 1, %Rz_FloatX OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME3, 4, MAKLNG(50, 50)
              CONTROL SET USER hDlg, %IDC_OPTION3, 1, %Rz_FloatX OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION3, 4, MAKLNG(50, 50)
              CONTROL SET USER hDlg, %IDC_OPTION4, 1, %Rz_FloatX OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION4, 4, MAKLNG(50, 50)
              CONTROL SET USER hDlg, %IDC_TextBox1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_TextBox1, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
              CONTROL SET USER hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
              Rz_Init hDlg
          RETURN
          
          SetOpt4:
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_1, 4, MAKLNG(100, 70) 'Grow by 50% each way as size shared with other listview and textbox
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 1, %Rz_GrowX OR %Rz_GrowY OR %Rz_AnchorBottom OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_SYSLISTVIEW32_2, 4, MAKLNG(100, 30)
              CONTROL SET USER hDlg, %IDC_BUTTON1, 1, %Rz_GrowX OR %Rz_AnchorTop OR %Rz_AnchorLeft
              CONTROL SET USER hDlg, %IDC_BUTTON2, 1, %Rz_AnchorBottom OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_OPTION1, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION1, 4, MAKLNG(100, 70) 'For all the controls in the middle of the screen, we need to set % movement
              CONTROL SET USER hDlg, %IDC_OPTION2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION2, 4, MAKLNG(100, 70)
              CONTROL SET USER hDlg, %IDC_FRAME2, 1, %Rz_AnchorLeft OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME2, 4, MAKLNG(100, 70)
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 1, %Rz_FloatX OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_CHECKBOX1, 4, MAKLNG(50, 70)
              CONTROL SET USER hDlg, %IDC_FRAME3, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_FRAME3, 4, MAKLNG(50, 70)
              CONTROL SET USER hDlg, %IDC_OPTION3, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION3, 4, MAKLNG(50, 70)
              CONTROL SET USER hDlg, %IDC_OPTION4, 1, %Rz_AnchorRight OR %Rz_FloatY
              CONTROL SET USER hDlg, %IDC_OPTION4, 4, MAKLNG(50, 70)
              CONTROL SET USER hDlg, %IDC_TextBox1, 1, %Rz_GrowY OR %Rz_AnchorTop OR %Rz_AnchorRight
              CONTROL SET USER hDlg, %IDC_TextBox1, 4, MAKLNG(50, 100)
              CONTROL SET USER hDlg, %IDC_BUTTON5, 1,  %Rz_AnchorLeft OR %Rz_AnchorBottom
              CONTROL SET USER hDlg, %IDC_BUTTON6, 1, %Rz_CenterX OR %Rz_AnchorBottom
              Rz_Init hDlg
          RETURN
          
          
          END FUNCTION
          
          FUNCTION SampleListView(BYVAL hDlg AS DWORD, BYVAL lID AS LONG, BYVAL lColCnt AS _
              LONG, BYVAL lRowCnt AS LONG) AS LONG
              LOCAL lStyle  AS LONG
              LOCAL tLVC    AS LV_COLUMN
              LOCAL tLVI    AS LV_ITEM
              LOCAL szBuf   AS ASCIIZ * 32
              LOCAL lCol    AS LONG
              LOCAL lRow    AS LONG
              LOCAL hCtl    AS DWORD
          
              CONTROL HANDLE hDlg, lID TO hCtl
          
              lStyle = ListView_GetExtendedListViewStyle(hCtl)
              ListView_SetExtendedListViewStyle hCtl, _
                  lStyle OR %LVS_EX_FULLROWSELECT OR %LVS_EX_GRIDLINES
          
              'Load column headers.
              tLVC.mask    = %LVCF_FMT OR %LVCF_TEXT OR %LVCF_SUBITEM
              tLVC.fmt     = %LVCFMT_LEFT
              tLVC.pszText = VARPTR(szBuf)
              FOR lCol = 0 TO lColCnt - 1
                  szBuf = "Column" + FORMAT$(lCol)
                  tLVC.iOrder = lCol
                  ListView_InsertColumn hCtl, lCol, tLVC
              NEXT lCol
          
              'Load sample data.
              FOR lRow = 0 TO lRowCnt - 1
                  tLVI.stateMask   = %LVIS_FOCUSED
                  tLVI.pszText     = VARPTR(szBuf)
                  tLVI.iItem       = lRow
                  FOR lCol = 0 TO lColCnt - 1
                      szBuf           = "Column" + FORMAT$(lCol) + " Row" + FORMAT$(lRow)
                      tLVI.iSubItem   = lCol
                      tLVI.lParam     = lRow
                      IF lCol = 0 THEN
                          tLVI.mask = %LVIF_TEXT OR %LVIF_PARAM OR %LVIF_STATE
                          ListView_InsertItem hCtl, tLVI
                      ELSE
                          tLVI.mask = %LVIF_TEXT
                          ListView_SetItem hCtl, tLVI
                      END IF
                  NEXT lCol
              NEXT i
          
              'Auto size columns.
              FOR lCol = 0 TO lColCnt - 1
                  ListView_SetColumnWidth hCtl, lCol, %LVSCW_AUTOSIZE
              NEXT lCol
          
          END FUNCTION

          Comment


          • #6
            Works great now!

            Thanks,

            Bob Mechler

            Comment

            Working...
            X