As most of you know, one of the easiest ways to learn a new language or
language feature is to hack it. So here is a quick 3 page hack which
explains how to create a tabular dialog box.
A tabular dialog box is made up of multiple dialogs layered upon one another.
So the first thing to do is create the individual dialogs.
In the macro below I create a simple ABOUT dialog.
/***************************************************
* A simple about dialog box that can be executed alone
* or added to a tabular dialog box.
***************************************************/void myAboutDialog ()Trans2{int dlg = parse_int("/DLG=", mparm_str);int m = parse_int("/M=", mparm_str);int res = parse_int("/RES=", mparm_str);/********************************************************************
* When used from another function (such as a tabbed dialog box)
* The m variable would allow you to exclude the execution of the dialog
* and give control to the calling macro. 0 would build the 'stand alone'
* dialog while 1 would only build the controls for the dialog
* NOTE that the title will also be omitted so the tab can be used.
*********************************************************************/switch( m ){case0:call _BuildCtrls;call _EndDlg;
DlgKill( dlg );
return_int =0;break;case1:call _BuildCtrls;break;case2:call _EndDlg;break;}return();
_BuildCtrls://If not already created, create the dialogif(!dlg)
DlgCreate( dlg );/************************************************************
Here I add the controls to the newly created dialog.
For a list of the available controls view the DIALOG.SH file located in
the src subdirectory of your Multi-Edit install.
int DlgAddCtrl( int dlg, // the dialog handle create with DlgCreate
int ctrltype, // the control type
str ctrltext, // the control title
int x, // the x coordinate or column number
int y, // the y coordinate or row number
int width, // the width of the control
int height, // the height of the control
int ctrlid, // the identifying number for the control
int flags, // bit flags
str misc // miscelaneous parameters
);
Please note the use of 'Dlg_PosOffset'. This holds the positioning
value of the last added control. 'Dlg_NegOffset' can also be used
to position the next control in reverse reference to the previous.
*************************************************************///Bitmap/icon - for information on DLG_Units, view Microsofts API help
DlgAddCtrl( dlg, DLG_BitmapStatic,"WL_SETUP_WIZ",
DLG_Units |1, DLG_Units |1,0,0,-1,0,"");//Group box just to make it visually appealing..
DlgAddCtrl( dlg, DLG_GroupBox,"About...",5,1,35,4,-1,0,"");/************************************************************
The next three controls are static text labels. I seperated
these to allow myself more control of positioning.
*************************************************************/
DlgAddCtrl( dlg, DLG_Static,"How to create a Tabular Dialog",
Dlg_PosOffset +3, Dlg_PosOffset +1,0,0,1000,0,"");
DlgAddCtrl( dlg, DLG_Static,"By",
Dlg_PosOffset +12, Dlg_PosOffset +1,0,0,1000,0,"");
DlgAddCtrl( dlg, DLG_Static,"Rob DeMartino - ACI",
Dlg_NegOffset +6, Dlg_PosOffset +1,0,0,1000,0,"");//If this is a stand alone dialog, add an OK button to it.if( m ==0){
DlgAddCtrl( dlg, DLG_PushButton,"OK",38-((DLG_StanBtnWidth +1)*2), DLG_PosOffset +3, DLG_StanBtnWidth,0,2001, DLGF_DefButton,"/R=1");
res = DlgExecute( dlg,1000,"My About Dialog","","",0);}ret;
_EndDlg:if( res ){//redraw the screen
redraw;}ret;
}// myAboutDialog