Dialog Box Layout -
Page I
Laying out Dialog Boxes in DCL can be
a bit tricky and entails quite a lot of "trial and error".
But, if you follow a few simple guidelines, a complicated dialog box can
be simplified quite considerably. To view the dialogs throughout this
tutorial, we will be making use of the Visual Lisp Editor and the
"Preview DCL in Editor" function. If you are unfamiliar
with the usage of this very handy function, you'll find step by step
instructions here.
If you would rather call the dialog
boxes from AutoCAD, I have included AutoLisp coding that will fulfill
this purpose in the download file that you can find at the end of this
tutorial.
As well, explanations for all the tile
attributes are covered in this section - "DCL
Tile Attributes". I suggest you refer to this whilst going
through this tutorial.
OK, let's get started. Consider
this :
Rather a complicated dialog hey?
Laying out a dialog is similar in way
to writing a program. You don't start off by writing the whole program
in one go. You write the program in sections, testing each part as you
go along. Only when each part has been thoroughly tested, do you start
to put the whole program together.
We are going to do exactly the same,
splitting our dialog into 3 separate DCL files before merging them all
together into one.
Let's have a look at the button
section first :
We'll start off by creating a dialog
with just two buttons, namely the "OK" and "Cancel"
buttons. Open a new file in the Visual Lisp editor and Copy and paste
this.
afra : dialog {
label = "A" ;
: button {
label = "OK";
key = "accept";
mnemonic = "O";
alignment = centered;
width = 12;
is_default = true;
}
: button {
label = "Cancel";
key = "cancel";
mnemonic = "C";
alignment = centered;
width = 12;
}
}
Save this as "Afra.dcl".
Using the "Preview DCL in
Editor" function, your dialog should look like this :
Did you notice something? The button
layout "defaulted" to a column layout. But we need these two
buttons to be in a row! Ok, lets do that :
afra : dialog {
label = "A" ;
: row {
: button {
label = "OK";
key = "accept";
mnemonic = "O";
alignment = centered;
width = 12;
is_default = true;
}
: button {
label = "Cancel";
key = "cancel";
mnemonic = "C";
alignment = centered;
width = 12;
}
}
}
Your dialog should now look like this :
A word of advice. Do not rely on your
tiles to default to columns. Rather explicitly define a column within
your DCL Coding. If not? Well, confusion will reign......
Now we'll add the other four buttons
to create our button cluster :
afra : dialog {
label = "A" ;
: column {
: row {
: button {
label = "OK";
key = "accept";
mnemonic = "O";
alignment = centered;
width = 12;
is_default = true;
}
: button {
label = "Cancel";
key = "cancel";
mnemonic = "C";
alignment = centered;
width = 12;
}
}
: row {
: button {
label = "Save";
key = "save";
mnemonic = "S";
alignment = centered;
width = 12;
}
: button {
label = "Load";
key = "load";
mnemonic = "L";
alignment = centered;
width = 12;
}
}
: row {
: button {
label = "Help...";
key = "help";
mnemonic = "H";
alignment = centered;
width = 12;
}
: button {
label = "About...";
key = "About";
mnemonic = "H";
alignment = centered;
width = 12;
}
}
}
}
And, our dialog should now look like
this :
Did you notice how only one of the
button tiles has the "is_default" attribute set to
"true"?
Good, you did! And why? Think about it!!!
For the sake of readability, and to
save some space, you could also write the DCL coding like this :
afra : dialog {
label = "A" ;
: column {
: row {
: button {label = "OK"; key = "accept"; mnemonic = "O";
alignment = centered; width = 12;
is_default = true;}
: button {label = "Cancel"; key = "cancel";mnemonic = "C";
alignment = centered; width = 12;}
}
: row {
: button {label = "Save"; key = "save"; mnemonic = "S";
alignment = centered; width = 12;}
: button {label = "Load";key = "load"; mnemonic = "L";
alignment = centered; width = 12;}
}
: row {
: button {label = "Help..."; key = "help"; mnemonic = "H";
alignment = centered; width = 12;}
: button {label = "About..."; key = "About"; mnemonic = "H";
alignment = centered; width = 12;}
}
}
}
On the next page we'll continue with
our dialog.
|