「DCL」の版間の差分
17行目: | 17行目: | ||
# ユーザが終了ボタン(あるいは終了処理)を選択したときに [[done_dialog]] が呼び出される。これにより、[[start_dialog]] が値を返す。ここで、[[unload_dialog]] を呼び出し、DCL ファイルをロード解除する。 | # ユーザが終了ボタン(あるいは終了処理)を選択したときに [[done_dialog]] が呼び出される。これにより、[[start_dialog]] が値を返す。ここで、[[unload_dialog]] を呼び出し、DCL ファイルをロード解除する。 | ||
* 参考: LISPの[[ダイアログ ボックス関数]] | |||
サンプルコード | サンプルコード |
2010年11月16日 (火) 10:25時点における版
DCL (Dialog Control Language)はダイアログ ボックスを作成するものである。
ダイアログ ボックスは、ダイアログ コントロール言語(DCL)で書かれた ASCII ファイルで定義し、主に LISP プログラムで利用する。 ボタンや編集ボックスなどのダイアログ ボックスの要素を「タイル」と呼び、各タイルのサイズと機能は、個々のタイルの属性でコントロールする。 ダイアログ ボックスのサイズと各部のレイアウトは、最小限の位置情報を使用して自動的に設定される。
AutoCAD の Visual LISP では、ダイアログ ボックスを表示するためのツールを備えている。 AutoCAD互換CADの中でAutoLISP互換を謳っているものは大抵、DCLによるダイアログ表示もサポートされている。
LISPからダイアログボックスを使用する一般的な手順
- load_dialog で DCL ファイルをロードする。
- new_dialog で、表示するダイアログ ボックスを呼び出す。(この時、new_dialog が返す値を必ずチェックし、呼び出しが失敗していないか確認する。失敗した状態で start_dialog を呼び出すと、予測できない結果になる可能性がある。)
- ダイアログのタイル値やリスト、イメージなどの設定を初期化したり、action_tile タイルの挙動を設定したりする。この時使用するダイアログ関数は set_tile、mode_tile、start_list、add_list、end_list、start_image、vector_image、fill_image、slide_image、end_image、client_data_tile となる。
- start_dialog でダイアログを呼び出す。この時点でコントロールがダイアログ ボックスに切り替わる。
- (ユーザの操作により アクション(コールバック)内からユーザ入力を処理する。get_tile、get_attr、set_tile、mode_tile などが処理される。
- ユーザが終了ボタン(あるいは終了処理)を選択したときに done_dialog が呼び出される。これにより、start_dialog が値を返す。ここで、unload_dialog を呼び出し、DCL ファイルをロード解除する。
- 参考: LISPのダイアログ ボックス関数
サンプルコード
; ALLCONTROL.DCL 内の allct_dlg というダイアログを読み込み表示するサンプル (defun viewdcl ( / dcl_id) (setq dcl_id (load_dialog "ALLCONTROL.DCL")) (if (new_dialog "allct_dlg" dcl_id) (progn ; ダイアログの挙動・設定を記述 ation_tile mode_tile set_tile など (start_dialog) ; ダイアログ表示 (unload_dialog dcl_id) ; ダイアログのアンロード ) (princ "error: ALLCONTROL.DCL ファイルがみつかりません。") ) )
- DCL ファイルには複数のダイアログを保存しておくことが出来るので、メモリに余裕があればすべてのダイアログ ボックスを一度にロードしておき、特定のダイアログ ボックスを逐次 new_dialog にて呼び出すことができる。厳しいメモリ環境を考慮するなら複数の DCL ファイルを作成し、load_dialogと unload_dialog を使用してダイアログ ボックスのセットをメモリから極力削除した形の方法が望ましい。となっているが、今となってはダイアログで消費されるメモリなどたかが知れてるので、積極的にまとめてしまってロードしたままにして使いまわしてもいいのではないかと思う。
タイルの種類
タイルの種類は、以下の通り。
- 標準のボタン (サブアセンブリ)
- 定義済みのアクティブ タイル
- 文字クラスタ
タイルの属性
タイルの属性は、以下の通り。
全体の属性 | |
---|---|
属性名 | 適用タイル |
alignment fixed_height fixed_width height width |
すべてのタイル |
アクションタイルの属性 | |
---|---|
属性名 | 適用タイル |
action is_enabled is_tab_stop key mnemonic |
button; edit_box; image_button; list_box; popup_list; radio_button; slider; toggle; radio_column; radio_row |
タイルクラスタの属性 | |
---|---|
属性名 | 適用タイル |
children_alignment children_fixed_height children_fixed_width |
row; column; radio_row; radio_column; boxed_row; boxed_column; boxed_radio_row; boxed_radio_column. |
特定のタイルで使用する属性 | |
---|---|
属性名 | 適用タイル |
allow_accept | edit_box; image_button; list_box |
aspect_ration | image; image_button. |
big_increment | slider. |
color | image; image_button. |
edit_limit | edit_box. |
edit_width | edit_box; popup_list. |
fixed_width_font | edit_box; popup_list. |
initial_focus | dialog. |
is_cancel | button. |
is_default | button. |
label | boxed_row; boxed_column; boxed_radio_row; boxed_radio_column; button; dialog; edit_box; list_box; popup_list; radio_button; text; toggle. |
layout | slider. |
list | list_box; popup_list. |
max_value | slider. |
min_value | slider. |
multiple_select | list_box. |
password_char | edit_box. |
small_increment | slider. |
tabs | list_box; popup_list. |
tab_truncate | list_box; popup_list |
value | text; all active tiles (except buttons and image_buttons). |