Works great now!
Thanks,
Bob Mechler
X
-
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:
-
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:
-
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:'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:
-
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:
-
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).]Tags: None
Leave a comment: