Added December 2013
Dialogs can be made vertically scrollable by specifying the WS_VSCROLL in the winstyle parameter when the dialog is created. For example:
...
|
! create dialog with vertical scroll bar
winstyle = WS_VSCROLL
xcall AUI, AUI_CONTROL, CTLOP_ADD, "dlg1", "Scrolling Dialog", &
MBST_ENABLE, MBF_DIALOG, NUL_CMD$, NUL_FUNC$, NUL_CSTATUS, &
4000, 10000, 10000, 40000, NUL_FGC, NUL_BGC, &
NUL_FONTATTR, NUL_FONTSCALE, NUL_FONTFACE$, NUL_TOOLTIP$, &
NUL_PARENTID, NUL_WINCLASS$, winstyle, NUL_WINSTYLEX, NUL_CTYPE2
! create a bunch of fields that extend arbitrarily below bottom of dialog
row = 500
for fno = 1 to num'fields
row += 1000
xcall SBXINP, "<2>"+label$(fno), INFOP_DISPLAY, row, 8, xmax(fno), &
field$(fno), "|GA||C]g123T", setdef$, 50, fno+100, tooltip$, "dlg1", &
exitcode, -1, 0, 0, -1
next fno
The scroll bar will be automatically configured / calibrated as fields are added to the dialog, and the EVENTWAIT routine will automatically scroll the currently focused field into view.
Note that this works for all types of dialogs, including MBF_DLGNOCAP dialogs, which can be positioned within parent windows or panels (such as Tab panels), allowing you to effectively creating scrollable regions within a larger window.
To produce this dialog, we modify the code from the first example as follows:
! main dialog (not scrollable)
xcall AUI, AUI_CONTROL, CTLOP_ADD, "dlg0", "Dialog with scrollable region", &
MBST_ENABLE, MBF_DIALOG, NUL_CMD$, NUL_FUNC$, NUL_CSTATUS, &
4000, 10000, 12000, 40000, NUL_FGC, &hffeeee
! ok and cancel buttons at top, in non-scolling region
xcall AUI, AUI_CONTROL, CTLOP_ADD, "btnOK", "OK", &
MBST_ENABLE, MBF_BUTTON+MBF_KBD, "VK_xF5", NUL_FUNC$, NUL_CSTATUS, &
1500, 13000, 3000, 20000
xcall AUI, AUI_CONTROL, CTLOP_ADD, "btnCancel", "Cancel", &
MBST_ENABLE, MBF_BUTTON+MBF_KBD, "VK_ESC", NUL_FUNC$, NUL_CSTATUS, &
1500, 22000, 3000, 29000
! scrollable borderless dialog within main dialog
xcall AUI, AUI_CONTROL, CTLOP_ADD, "dlg1", NUL_CTEXT$, &
MBST_ENABLE, MBF_DIALOG, NUL_CMD$, NUL_FUNC$, NUL_CSTATUS, &
3000, 0, 8500, 31000, NUL_FGC, &hffdddd, &
NUL_FONTATTR, NUL_FONTSCALE, NUL_FONTFACE$, NUL_TOOLTIP$, &
NUL_PARENTID, NUL_WINCLASS$, WS_VSCROLL+WS_BORDER, NUL_WINSTYLEX, &
MBF2_DLGNOCAP+MBF2_STICKY
! create a bunch of fields that extend arbitrarily below bottom of window
! <same as before, fields owned by dlg1 which is now a captionless dialog within dlg0