ダイアログボックスに表示させるタイルが増えてくると、レイアウトも考えなければいけません。
column (列) 、row (行) などを使って、複数のタイルをひとまとめにしたものを、クラスタと言います。
予備知識
DCLとは。
ダイアログボックスにタイルを配置して文字を表示させる方法
AutoLISP プログラム
以下のAutoLISPプログラムは、タイル A、B、 C、D、E、F に文字列を表示させるものです。
(defun c:test (/ dcl_id Act)
(setq dcl_id (load_dialog "JagaDCL.dcl")) ;
(if (not (new_dialog "TestDB" dcl_id))
(progn
(princ "***ダイアログボックスが見つかりません***")
(exit)
));if
;-----------------------------------------------------------
(set_tile "A" "Tile A" )
(set_tile "B" "Tile B" )
(set_tile "C" "Tile C" )
(set_tile "D" "Tile D" )
(set_tile "E" "Tile E" )
(set_tile "F" "Tile F" )
;-----------------------------------------------------------
(action_tile "accept" "(done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")
;-----------------------------------------------------------
(setq Act (start_dialog))
(unload_dialog dcl_id)
;-----------------------------------------------------------
(cond
((= Act 0)(princ "キャンセルキーを押しました"))
((= Act 1)(princ "OKを押しました"))
);cond
;----------------------------------------------------------
(princ))
この、AutoLISP用に6つの文字列タイルを表示させるDCLを作ります。
row columnを組み合わせていろんなレイアウトをしていきます。
同じAutoLISPプログラムに対して、DCL側でダイアログボックスの見た目を何通りも作ることができます。
クラスタ
ダイアログボックスのタイルは、列や行にして一つのかたまりにできます。
そのかたまりをクラスタと言います。
タイルをクラスタにしたダイアログボックスの例をあげていきます。
上記のAutoLISPからDCL呼び出すには、DCLを、JagaDCL.dclという名前でサポートファイル検索パスのフォルダ内に保存してください。
column (列)
column を使って、1列のクラスタにした例です。
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:column{
:text { key = "A"; }
:text { key = "B"; }
:text { key = "C"; }
:text { key = "D"; }
:text { key = "E"; }
:text { key = "F"; }
}
//--------------------------------------------------------
ok_cancel;
}
boxed_column (枠と余白付きの列)
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:boxed_column{
:text { key = "A"; }
:text { key = "B"; }
:text { key = "C"; }
:text { key = "D"; }
:text { key = "E"; }
:text { key = "F"; }
}
//--------------------------------------------------------
ok_cancel;
}
row (行)
row を使って、1行にまとめた例です。
横幅が足りなかったので、行クラスタにwidth = 35; と属性を付けて幅を広くしています。
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:row{ width = 35;
:text { key = "A"; }
:text { key = "B"; }
:text { key = "C"; }
:text { key = "D"; }
:text { key = "E"; }
:text { key = "F"; }
}
//--------------------------------------------------------
ok_cancel;
}
boxed_row (枠と余白付きの行)
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:boxed_row{ width = 35;
:text { key = "A"; }
:text { key = "B"; }
:text { key = "C"; }
:text { key = "D"; }
:text { key = "E"; }
:text { key = "F"; }
}
//--------------------------------------------------------
ok_cancel;
}
属性 ラベル
クラスタやタイルに足して、タイトル文字や文字ぞろえなどで編集できる部分を属性と言います。上の行の例にで横幅を調整したwidthも属性です
クラスタには、ラベル属性を付けることができます。label = “文字列”;
ラベルを付けると、枠がつきます。
先ほどのrow (行)クラスタに、ROWとラベル付けした例です。
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:row{ label = "ROW"; width = 35;
:text { key = "A"; }
:text { key = "B"; }
:text { key = "C"; }
:text { key = "D"; }
:text { key = "E"; }
:text { key = "F"; }
}
//--------------------------------------------------------
ok_cancel;
}
組み合わせ
列と行を組み合わせて、レイアウトを作って行きます。
レイアウト例です。
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:column{ label = "COLUMN";
:row{label = "ROW 1";
:text { key = "A"; }
:text { key = "B"; }
:text { key = "C"; }
}
:row{ label = "ROW 2";
:text { key = "D"; }
:text { key = "E"; }
:text { key = "F"; }
}
}
//--------------------------------------------------------
ok_cancel;
}
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:row{ label = "ROW";
:column{label = "COLUMN 1";
:text { key = "A"; }
:text { key = "B"; }
:text { key = "C"; }
}
:column{ label = "COLUMN 2";
:text { key = "D"; }
:text { key = "E"; }
:text { key = "F"; }
}
}
//--------------------------------------------------------
ok_cancel;
}
boxed_row(column) を使うと余白が入ります。
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:boxed_row{ label = "ROW";
:boxed_column{label = "COLUMN 1";
:text { key = "A"; }
:text { key = "B"; }
:text { key = "C"; }
}
:boxed_column{ label = "COLUMN 2";
:text { key = "D"; }
:text { key = "E"; }
:text { key = "F"; }
}
}
//--------------------------------------------------------
ok_cancel;
}
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:column{ label = "COLUMN 1";
:row{label = "ROW 1";
:column{label = "COLUMN 2";
:text { key = "A"; }
:text { key = "B"; }
}
:column{ label = "COLUMN 3";
:text { key = "C"; }
:text { key = "D"; }
}
}
:row{label = "ROW 2";
:text { key = "E"; }
:text { key = "F"; }
}
}
//--------------------------------------------------------
ok_cancel;
}
TestDB :dialog
{label = "TITLE";
//--------------------------------------------------------
:row{ label = "ROW 1";
:column{ label = "COLUMN 1";
:row{ label = "ROW 2";
:text { key = "A"; }
:text { key = "B"; }
}
:row{ label = "ROW 3";
:text { key = "C"; }
:text { key = "D"; }
}
}
:column{ label = "COLUMN 2";
:text { key = "E"; }
:text { key = "F"; }
}
}
//--------------------------------------------------------
ok_cancel;
}
このように、6つのタイルを並べる。だけでもいろんな表示パターンを作ることができます。
どのように行と列でクラスタを作って組み合わせてレイアウトをしていくのか、今回のようなシンプルなコマンドでいろいろ試してみると、感覚がつかめると思います。
ちなみに、DCLではないですが、リボンをカスタマイズするときの各アイコンの配置も「行」と「列」の組み合わせでレイアウトされています。
なので、この作業に慣れるとカスタマイズリボンを作るとき、行と列を組み合わせて思い通りにアイコンを並べることができるようになります。
まとめ
- タイルをまとめてクラスタ(集合体)にできる。
- タイルやクラスタには属性を付けることができる。
- クラスタにはラベル属性があって、文字列を付けることができる。
- ラベルを付けると枠がつく。