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

  • BOB MECHLER
    replied
    Works great now!

    Thanks,

    Bob Mechler

    Leave a comment:


  • Carlo Pagani
    replied
    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

    Leave a comment:


  • BOB MECHLER
    replied
    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

    Leave a comment:


  • Chris Boss
    replied
    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


    ------------------

    Leave a comment:


  • Chris Boss
    replied
    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).]

    Leave a comment:


  • Carlo Pagani
    started a topic Resizing of dialog and controls functions

    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).]
Working...
X