==================================================発行部数931======
     AutoCADカスタマイズ入門講座              No.20 1999/09/26
===================================================================
 AutoCADカスタマイズ入門講座のご購読ありがとうございます。
今週号で発行号数がなんと20号になりました。これからもどうぞよろしくお
願いしますm(__)m 。
さて、今回は先週議論したジュース自動販売機(?)のGUIを実際に作ってみま
しょう。

--------------------------------------------------------------------
 1.ジュース自動販売機GUIのDCLファイル
--------------------------------------------------------------------
 以前説明したように、DCLファイルはGUIの外見を定義するファイルです。
今回作成したDCLファイルを以下に示します。このファイルをsdialog1.dcl
として保存してください。ファイル名は任意でかまいませんが、このファイ
ルを参照するAutoLISPプログラムでDCLファイルのファイル名を指定するの
で、両方のファイルでファイル名の一貫性が取られている必要があります。

--- ここから ---
drink : dialog {
	label = "- DRINK -";
	:popup_list {
		key = "s_mei";
		label = "商 品 名 :";
		edit_width = 20;
		list = "コラ コーラ\nばっちゃん\nポッカリスエット";
        }
	:popup_list {
		key = "y_ryou";
		label = "容量(mml) :";
		edit_width = 20;
		list = "350\n500\n1000";
        }
	:popup_list {
		key = "h_su";
		label = "本   数 :";
		edit_width = 20;
		list = "1\n2\n3\n4\n5\n6\n7\n8\n9";
        }
        :edit_box {
		key = "g_kei";
		label = "合   計(円):";
		edit_width = 18;
	}
	:button {
		key = "g_kei_b";
		label = "合 計";
	}
	ok_only;
}
--- ここまで ---

では、上記ファイルについての説明をしてみます。
まず、基本的なDCLファイルの書式は以下の様になります。

abc : dialog {
      ...
      ...
}

 abcは実際にはダイアログボックスの名前になります。この名前を参照す
る事で、このダイアログボックスをAutoLISPプログラムが識別する事が出来
ます。ですから、プログラムで複数のダイアログボックスを使用する場合に
はこの名前はユニークにしなければなりません。次に、中括弧{}内にこのダ
イアログボックス内に含めたいタイル(DCLではポップアップリスト、エディ
ットボックス、ボタンなどをタイルと呼びます)を記述します。上記、
sdialog1.dclを見てください。{}内にはpopup_listが3つ、edit_boxが1つ、
buttonが1つ、その他にlabelとok_onyがある事が分かります。popup_list、
edit_box、buttonはまた{}を持ち、内部に式が書かれている事が分かります
。{}内にはそれぞれのタイルに対する属性を指定します。属性には多くの種
類があり、タイルの属性によっても使える属性に差があります。詳しくはマ
ニュアルを見て頂きたいのですが、例えばdialogの{}内にも、popup_listの
{}内にも、edit_boxの{}内にも、buttonの{}内にもlabelという属性が指定
してありますが、それぞれ役割は異なっていますので、後でダイアログを実
行させて調べてみてください(すぐ分かります)。その他、今回使用している
属性の説明をすると

key :
 この属性を参照する事でAutoLISPはこのタイルの値を得る事が出来ます。
具体的に言えば、エディットボックスに入力されている文字などを取得する
事が可能になります。この属性はプログラム全体でユニークでなければなり
ません。

edit_width:
 この属性はpopup_listやedit_boxの幅を指定します。
list:
 popup_llistなどに表示するリストの内容を指定します。

 また、プログラムの最後のほうにok_onlyという式がありますが、この一
文を記述する事でOKボタン及びダイアログボックスを閉じる処理を行ってく
れます。同じ処理はbuttonタイルで記述する事は可能ですが、幾つかの属性
の指定などを行わなければならない事を考えると、ok_onyは非常に便利です
。まぁ、この辺りは説明だけでは分かりにくいのですが、幾つかプログラム
を作ってみればすぐ理解する事が出来ると思います。

--------------------------------------------------------------------
 2.DCLをコントロールするAutoLISPプログラム
--------------------------------------------------------------------
 次にsdialog1.dclをコントロールするAutoLISPファイルを示します。DCL
ファイルだけでは何も表示する事は出来ません。以下のファイル
をsdialog1.lspとして保存してください。いつもと同様にAutoCADのパスの
通ったディレクトリィにsdialog1.dclとsdialog1.lspを置き、sdialog1.lsp
をロードして下さい。その後コマンドラインからddと入力するとダイアログ
ボックスが表示されるはずです。ちょっと遊んでみて下さい。OKボタンを押
すとダイアログボックスが閉じます。

--- ここから ---
(defun C:dd ( / id)
  (setq id (load_dialog "sdialog1.dcl"))
  (if (not (new_dialog "drink" id))
      (exit)
  )
  (action_tile "g_kei_b" "(sum)") 
  (start_dialog)
  (unload_dialog id)
)

(defun sum()
   (setq namae (get_tile "s_mei"))
   (setq ryou (get_tile "y_ryou"))
   (setq honsu (get_tile "h_su"))
   (set_tile "g_kei" (itoa (* (tanka namae ryou) (atoi honsu))))
)

(defun tanka(namae ryou)
   (setq tk 0)
   (if (= namae "0")
      (progn
          (if (= ryou "0") (setq tk 120))
          (if (= ryou "1") (setq tk 150))
      )
   )
   (if (= namae "1")
      (progn
          (if (= ryou "1") (setq tk 150))
          (if (= ryou "2") (setq tk 300))
      )
   )
   (if (= namae "2")
      (progn
          (if (= ryou "0") (setq tk 120))
          (if (= ryou "2") (setq tk 300))
      )
   )
   (setq tk tk)
)
--- ここまで ---

--------------------------------------------------------------------
 3.まとめ
--------------------------------------------------------------------
 ダイアログボックスを少しいじって頂けましたか。No.19号を見直してみ
て下さい。No.19でのジュースの種類A、B、Cはそれぞれ、"コラ コーラ"、
"ばっちゃん"、"ポッカリスエット"に対応しています。商品、容量、数量の
組み合わせによっては合計が0円になってしまいます。これはNo.19に示した
ような理由からなのですが、これではユーザは戸惑ってしまいますね。この不具合を避ける方法はまた次回にしたいと思います。
 次回は今回示したAutoLISPプログラムの説明をしたいと思います。また、
スペースがあればより良いプログラムへ改良していきたいと思います。

●バックナンバーは下記のURLで参照する事が出来ます。
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
====================================================================
■登録/解除の方法
http://www2u.biglobe.ne.jp/~Saturn5/alisp.htm
「AutoCADカスタマイズ入門講座」は、上記URLよりいつでも
登録/解除可能です。
====================================================================
●広告の問い合わせ
広告のお問い合わせは以下のメールアドレスへお願いします。
wankichi@mba.nifty.ne.jp
====================================================================
■「AutoCADカスタマイズ入門講座」No.18
発行責任者 :わんきち(wankichi@mba.nifty.ne.jp)
発行システム:インターネットの本屋さん『まぐまぐ』
              http://www.mag2.com/
              マガジンID:0000011579
====================================================================

戻る