この例では、AutoLISP を使用して基本的なダイアログ ボックスを作成し、表示する方法を説明します。
注: AutoLISP での DCL のサポートは Windows のみに制限されています。
DCL ファイルを作成する
この DCL は、テキスト タイルと 1 つの[OK]ボタンを含む、サンプル ダイアログ ボックスというラベルのダイアログ ボックスを定義しています。この DCL コードを hello.dcl という名前のファイルに格納します。
- 次のコードをクリップボードにコピーします。
DCL コードをハイライト表示して[Ctrl]+[C]を押すか、右クリックして[コピー]をクリックします。
hello : dialog
{
label = "Sample Dialog Box";
: text {
label = "Hello, world.";
}
ok_only;
}
- Visual LISP エディタで、[ファイル] [ファイルを新規作成]をクリックします。
- 新しいエディタ ウィンドウで、[Ctrl]+[V]を押すか、右クリックして[貼り付け]をクリックします。
- [ファイル] [名前を付けて保存]をクリックします。[名前を付けて保存]ダイアログ ボックスの[ファイルの種類]ドロップ ダウン リストで、[DCL ソース ファイル]を選択します。[ファイル名]フィールドに、hello.dcl と入力します。DCL ファイルを保存する場所を開き、[保存]をクリックします。
注: DCL ファイルは、必ず AutoCAD サポート ファイル検索パス内のフォルダの 1 つに保存する必要があります。
ダイアログ ボックスを表示し、ユーザによる[OK]の選択に応答する
- 次のコードをクリップボードにコピーします。
DCL コードをハイライト表示して[Ctrl]+[C]を押すか、右クリックして[コピー]をクリックします。
(defun C:HELLO ( / dcl_id )
(setq dcl_id (load_dialog "hello.dcl")) ; Load the DCL file.
(if (not (new_dialog "hello" dcl_id)) ; Initialize the dialog.
(exit) ; Exit if this does not work.
)
(start_dialog) ; Display the dialog box.
(unload_dialog dcl_id) ; Unload the DCL file.
(princ)
)
- Visual LISP エディタで、[ファイル] [ファイルを新規作成]をクリックします。
- 新しいエディタ ウィンドウで、[Ctrl]+[V]を押すか、右クリックして[貼り付け]をクリックします。
- [ファイル] [名前を付けて保存]をクリックします。[名前を付けて保存]ダイアログ ボックスの[ファイルの種類]ドロップ ダウン リストで、[LISP ソース ファイル]を選択します。[ファイル名]フィールドに、hello.lsp と入力します。LSP ファイルを保存する場所を開き、[保存]をクリックします。
注: LSP ファイルは、必ず AutoCAD サポート ファイル検索パス内のフォルダの 1 つに保存する必要があります。
- [ツール] [エディタ内のテキストをロード]をクリックします。
- コマンド プロンプトに対して hello と入力し、[Enter]を押します。
- サンプル ダイアログボックスで[OK]をクリックします。
次に、AutoLISP の動作を 1 行ごとに説明します。
- 1 行目 – ローカル変数 dcl_idを使用して HELLO という名前のコマンドを定義します。
- 2 行目 – load_dialog 関数を使用してメモリに DCL ファイルをロードします。load_dialog 関数は、DCL 識別番号を返します。この識別番号は、この後の関数呼び出しでダイアログを識別するために必要になります。
- 3~5 行目 – new_dialog 関数を使用してダイアログ ボックスを初期化します。引数としてダイアログ ボックスの名前と DCL 識別番号を渡します。
他のダイアログ ボックスでは、タイル値、リスト、イメージなども設定します。この DCL の例は、ok_only という名前の定義済みのタイルを使用しているため、その既定値を変更しない場合は、タイルを初期化する必要はありません。ok_only タイルには、done_dialog というアクションも割り当てられています。ユーザが[OK]ボタンを選択すると、AutoCAD は AutoLISP アプリケーションに done_dialog の呼び出しを渡し、ダイアログを終了します。
- 6 行目 – start_dialog 関数を使用して、表示するためにダイアログのコントロールを AutoCAD に渡します。
- 7 行目 – unload_dialog 関数を使用して、応答終了後にダイアログをメモリから除去します。
- 8 行目 – コマンドを抑止終了します。
- 9 行目 – HELLO コマンドの定義を終了します。
この例では、説明を分かりやすくするためにエラー処理は含めていません。
start_dialog の呼び出しは、ユーザがボタンなどのタイルを選択し、そのタイルに関連付けられているアクション式が done_dialog を呼び出すまでアクティブなままです。done_dialog の呼び出しは、タイルによって明示的に発行できます。また、is_cancel 属性に true が設定されている場合は、選択したタイルによって done_dialog の呼び出しを発行することもできます。
注意: 理論的には、ダイアログ ボックスの機能は start_dialog を呼び出した時点で入力コントロールを得ますが、オペレーティング システムでは、new_dialog を呼び出したときにコントロールを得ます。プログラムを書くときには、このことを考慮する必要はありませんが、これらの関数を対話的に呼び出す場合は(AutoCAD のコマンド プロンプトから呼び出す場合)、1 つの文として入力する必要があります。これらの関数は、progn または別の関数内に囲んで入れてください。さもないと、new_dialog を対話的に呼び出したときに画面表示が停止する可能性があります。デバッグ中は、new_dialog と start_dialog を対話的に呼び出すと便利です