DCL 定義は、静的なダイアログ ボックスを定義する以外に何も行いません。action_tile 関数を使用して、この静的なダイアログ ボックスと動的な AutoLISP コードを、次のコードが示すように関連付けます。
;; Assign actions (the functions to be invoked) to dialog buttons (action_tile "gp_lw" "(setq plineStyle \"Light\")" ) (action_tile "gp_hw" "(setq plineStyle \"Pline\")" ) (action_tile "gp_actx" "(setq objectCreateMethod \"ActiveX\")" ) (action_tile "gp_emake" "(setq objectCreateMethod \"Entmake\")" ) (action_tile "gp_cmd" "(setq objectCreateMethod \"Command\")" ) (action_tile "cancel" "(done_dialog) (setq UserClick nil)") (action_tile "accept" (strcat "(progn (setq tileRad (atof (get_tile \"gp_trad\")))" "(setq tileSpace (atof (get_tile \"gp_spac\")))" "(done_dialog) (setq UserClick T))" ) )
ダブル クォーテーションで囲まれている AutoLISP コードに注目してください。AutoLISP の action_tile 関数を書く場合、「ここで、この文字列を記憶し、ユーザが君を選択したらそれを私に返せ」とタイルに命令するつもりでコードを書きます。文字列(ダブルクォーテーション マークに囲まれたものすべて)は、ユーザがタイルを選択しない限り活動しません。タイルが選択されると、その文字列は AutoCAD に渡され、AutoLISP コードに変換されて実行されます。
たとえば、[lightweight]ラジオ ボタンに関連付けられた次の action_tile 式を考えてください。
(action_tile "gp_lw" "(setq plineStyle \"Light\")" )
このコードは、ラジオ ボタンに文字列 "(setq plineStyle ¥"Light¥")" を割り当てています。このボタンをユーザがクリックすると、この文字列は AutoCAD に返され、次の AutoLISP 式に変換されます。
(setq plineStyle "Light")
もう 1 つ、コードを見てください。次のコードは、[OK]ボタンに割り当てられる action_tile 式です。
(action_tile "accept" (strcat "(progn (setq tileRad (atof (get_tile \"gp_trad\")))" "(setq tileSpace (atof (get_tile \"gp_spac\")))" "(done_dialog) (setq UserClick T))" )
ユーザが[OK]ボタンをクリックすると、そのボタンに割り当てられた長い文字列が AutoCAD に渡され、次の AutoLISP コードに変換されます。
(progn (setq tileRad (atof (get_tile "gp_trad"))) (setq tileSpace (atof (get_tile "gp_spac"))) (done_dialog) (setq UserClick T) )
このコードは、次のことを行います。まず、キーの値が gp_trad (タイルの半径)と gp_spac (タイル間隔)のタイルから、現在の値を取得します。次に atof で、数値文字列を実数に変換します。done_dialog 関数でダイアログが終了し、値 T (真)が変数 UserClick に割り当てられます。
これで、ボタンへのアクションの割り当てが終了しました。次は、動作の中にそれをすべて組み込みます。