==================================================発行部数941======
     AutoCADカスタマイズ入門講座              No.21 1999/10/03
===================================================================
 AutoCADカスタマイズ入門講座のご購読ありがとうございます。
暑かったり、寒かったりと日毎に天候が変わりますが、皆さんかぜなどひか
ない様体調には十分お気を付け下さい。さて、今回は旋回紹介したDCLファ
イルをコントロールするAutoLISPプログラムの説明をしたいと思います。前
回号と見比べながらご覧ください。

--------------------------------------------------------------------
 1.ダイアログボックスをコントロールするAutoLISPプログラム(1)
--------------------------------------------------------------------
 ここからは、前回号で紹介したDCLファイルと見比べながらご覧ください。

まず、以下に示す前回示したプログラムのメイン部分となる関数から見てい
きます。

(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)
)

 最初の式、(load_dialog "sdialog1.dcl")を見て下さい。
この(load_dialog)という関数を使用する事で、AutoLISPプログラムがDCLフ
ァイルにアクセスする事が可能となります。この関数は結果としてある整数
値を返します。この整数値は、後でダイアログボックスをコントロールする
際に必要になるので、保存しておく必要があります。この様な訳で、プログ
ラムでは、(setq id (load_dialog "sdialog1.dcl"))として、整数値をidに
保存しています。この関数の書式は(load_dialog "DCLファイル名")です。
DCLファイル名は拡張子を付けないで(load_dialog "sdialog1")とする事も
可能です。また、DCLファイルはAutoCADの検索パスが通っているディレクト
リィにおいておく必要があります。

 次に、(new_dialog "drink" id)という式を見て下さい。
この(new_dialog)という関数を呼び出す事により、ダイアログを初期化しま
す。書式は(new_dialog "ダイアログ名" ハンドル名)です。さて、ダイアロ
グ名と、ハンドル名とは何でしょう?。以下の例を見ればすぐ分かりますね
?。
(new_dialog "drink" id)
 ダイアログ名は以下に示すDCLファイルsdialog.dclの一部を見ればすぐ分
かります。

drink : dialog { ← このdrinkの事です。
	label = "- DRINK -";
	:popup_list {
		key = "s_mei";
             .
             .
             .

 また、ハンドル名は(load_dialog)関数の返値です。
結局、(new_dialog "drink" id)はsdialog.dclファイル内の"drink"という
ダイアログボックスを表示しなさいという命令になります。実際のプログラ
ム内では以下の様にこの関数を使用しています。

  (if (not (new_dialog "drink" id))
      (exit)
  )

 (new_dialog)関数はidで指定されるDCLファイル内にダイアログ名で指定
されるダイアログが存在する場合はT、存在しない場合にはnilを返します。
つまり上記プログラムは(new_dialog)がnilを返した場合は(exit)関数を呼
び出し、プログラムを終了しています。この処理を行わず、プログラムを続
けて実行させると、AutoLISPプログラムだけではなく、AutoCAD自体もクラ
ッシュさせる可能性があるので注意が必要です。

 次は、(action_tile)関数です。
この関数は、ユーザがダイアログボックス上であるタイルを操作した場合、
そのタイルが操作された事により実行される関数を指定する事が出来ます。
以下の例では、キー"g_kei_b"で指定されたタイルがユーザーにより操作さ
れた場合、(sum)という関数を呼び出す事を指定しています。 
  (action_tile "g_kei_b" "(sum)") 

 さて、もう一度sdialog.dclを見て下さい。キー"g_kei_b"で示されるタイ
ルは何でしょうか?。そう、合計ボタンです。つまり、合計ボタンが押され
たら(sum)という関数が呼び出されるように設定しています。(sum)関数につ
いては次回説明します。

 次に、(start_dialog)について説明します。
この関数を呼び出す事で、ダイアログボックスが実際に表示され、ユーザが
ダイアログボックスの操作を行う事が可能となります。

 最後は、(unload_dialog)関数です。この関数は(load_dialog)関数と対に
なっています。この関数を実行する事で、先ほど(load_dialog)関数でロー
ドしたDCLファイルをコンピュータのメモリ上からアンロードする事が出来
ます。この関数の書式は(unload_dialog ハンドル名)です。ハンドル名は
(load_dialog)の返値です。

 実際にはもう少し説明しなければならない事があるのですが、基本的にこ
こまで説明したようにする事で、ダイアログボックスの表示から終了まで行
う事が出来ます。今回の例題のプログラムでは(load_dialog)、
(action_tile)関数は一つずつですが、それぞれ複数書く事が出来ます。

--------------------------------------------------------------------
 2.まとめ
--------------------------------------------------------------------
 今回は前回紹介したプログラムの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.21
発行責任者 :わんきち(wankichi@mba.nifty.ne.jp)
発行システム:インターネットの本屋さん『まぐまぐ』
              http://www.mag2.com/
              マガジンID:0000011579
====================================================================
戻る