コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
GizmoLab 関連
オンラインショップ
CAD&CGブログ
YouTube
GitHub
CAD 系
GizmoTools
AutoLISP
Visual LISP
BricsCADのLISP
GzLib
DCL
OpenDCL
DWG
DXF
CADのコマンド一覧
システム変数
図形の種類
Ver別サポートAPI
CAD用語集
メモ
newLISP
CommonLISP
Script-Fu
Inno setup
JavaScript
ANDROID
Windowsでのファイルハッシュ確認
Prolog
Python
Clojure
Electron
フォント
数学メモ
イメージサイズとメモリ量
blender
Processwire
Win10,11メモ
IIJmio
mediawiki資料
ヘルプ
検索
検索
表示
ログイン
個人用ツール
ログイン
DCLのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
DCL
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{AutoLISP}} [[File:Formsizer.png|thumb|DCLサンプル]]DCL (Dialog Control Language)はダイアログ ボックスを作成するものである。 ダイアログ ボックスは、ダイアログ コントロール言語(DCL)で書かれた ASCII ファイルで定義し、主に LISP プログラムで利用する。 ボタンや編集ボックスなどのダイアログ ボックスの要素を「タイル」と呼び、各タイルのサイズと機能は、個々のタイルの属性でコントロールする。 ダイアログ ボックスのサイズと各部のレイアウトは、最小限の位置情報を使用して自動的に設定される。 AutoCAD の Visual LISP では、ダイアログ ボックスを表示するためのツールを備えている。 AutoCAD 互換 CAD の中で AutoLISP 互換を謳っているものは大抵、DCL によるダイアログ表示もサポートされている。 参考:[[バージョン履歴とサポートAPI]] * IJCAD では、DCL の処理でエラーが起こると CAD が死ぬので注意が必要。(エラー処理が弱い。) * 別途のアドオンで [[OpenDCL]] っていうオープンソースな拡張があり、こちらは Windows の一般的なフォームが使えるものでモードレスダイアログやパレットなども作れる。AutoCAD, BricsCADなどで利用可能。 == 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の[[ダイアログ ボックス関数]] サンプルコード <pre class="brush:autolisp;"> ; ALLCONTROL.DCL 内の allct_dlg というダイアログを読み込み表示するサンプル (defun viewdcl ( / dcl_id) (setq dclfile "ALLCONTROL.DCL") (setq dcl_id (load_dialog dclfile)) (if (new_dialog "allct_dlg" dcl_id) (progn ; ダイアログの挙動・設定を記述 ation_tile mode_tile set_tile など (start_dialog) ; ダイアログ表示 (unload_dialog dcl_id) ; ダイアログのアンロード ) (princ (strcat "error:" dclfile "ファイルがみつかりません。")) ) ) </pre> * DCL ファイルには複数のダイアログを保存しておくことが出来るので、メモリに余裕があればすべてのダイアログ ボックスを一度にロードしておき、特定のダイアログ ボックスを逐次 new_dialog にて呼び出すことができる。厳しいメモリ環境を考慮するなら複数の DCL ファイルを作成し、load_dialogと unload_dialog を使用してダイアログ ボックスのセットをメモリから極力削除した形の方法が望ましい。となっているが、今となってはダイアログで消費されるメモリなどたかが知れてるので、ロードしたままでも問題にはなりにくいと思われる。 == タイルの種類 == タイルの種類は、以下の通り。(すべて小文字な点に注意) <div class="mcol3"> ; 標準のボタン (サブアセンブリ) :* [[ok_only]] :* [[ok_cancel]] :* [[ok_cancel_help]] :* [[ok_cancel_help_errtile]] :* [[ok_cancel_help_info]] :* [[errtile]] ; 定義済みのアクティブ タイル :* [[button (autolisp)|button]] :* [[edit_box]] :* [[list_box]] :* [[multi_edit_box]] *intellicad only :* [[popup_list]] :* [[radio_button]] :* [[toggle]] :* [[slider]] :* [[image_button]] ; 装飾と情報タイル :* [[image]] :* [[text]] :* [[spacer]] :* [[spacer_0]] :* [[spacer_1]] ;文字クラスタ :* [[concatenation]] :* [[paragraph]] :* [[text_part]] ; タイルクラスタ :* [[boxed_column]] :* [[boxed_radio_column]] :* [[boxed_radio_row]] :* [[boxed_row]] :* [[column]] :* [[dialog]] :* [[radio_column]] :* [[radio_row]] :* [[row]] </div> <gallery caption="DCLタイル・ギャラリー" widths="240px" heights="160px"> File:Dcl_boxed_row.png|boxed_row File:Dcl_boxed_column.png|boxed_column File:Dcl_button.png|button File:Dcl_edit_box.png|edit_box File:Dcl_image.png|image File:Dcl_list_box.png|list_box File:Dcl_popup_list.png|popup_list File:Dcl_slider.png|slider File:Dcl_boxed_radio_column.png|boxed_radio_column File:Dcl_boxed_radio_row.png|boxed_radio_row File:Dcl_text.png|text File:Dcl_toggle.png|toggle </gallery> ==DCLファイルの雛形== ひな形です。 dcl_settings の行はDCLの監査機能を有効にしています。 <pre class="brush:autolisp;">dcl_settings : default_dcl_settings { audit_level = 3; } // HELLO.DCL hello : dialog { label = "サンプル ダイアログ ボックス"; : text { label = "Hello, world"; } : button { key = "accept"; label = "OK"; is_default = true; fixed_width=true; alignment=centered; } } </pre> == タイルの属性 == タイルの属性は、以下の通り。 {| class="wikitable" ! colspan=2 | 全体の属性 |- ! 属性名 !! 適用タイル |- | [[alignment]]<br /> [[fixed_height]]<br /> [[fixed_width]]<br /> [[height]]<br /> [[width]] || すべてのタイル |} {| class="wikitable" ! colspan=2 | アクションタイルの属性 |- ! 属性名 !! 適用タイル |- | [[action]]<br /> [[is_enabled]]<br />[[is_tab_stop]]<br />[[key]]<br /> [[mnemonic]] || button; edit_box; image_button; list_box; popup_list; radio_button; slider; toggle; radio_column; radio_row |} {| class="wikitable" ! colspan=2 | タイルクラスタの属性 |- ! 属性名 !! 適用タイル |- | [[children_alignment]] <br /> [[children_fixed_height]]<br /> [[children_fixed_width]] || row; column; radio_row; radio_column; boxed_row; boxed_column; boxed_radio_row; boxed_radio_column. |} {| class="wikitable" ! colspan=2 | 特定のタイルで使用する属性 |- ! 属性名 !! 適用タイル |- | [[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_bold]] || text. |- | [[is_cancel]] || button. |- | [[is_default]] || button. |- | [[Label_(autolisp)|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_(DCL)|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). |} ===BricsCAD 特有のタイル属性と=== BricsCADのDCLエンジンは、AutoCADのDCL定義を超えて様々な属性をサポートし、柔軟性、快適性、GUIの見栄えを向上させている。 以下は、BricsCAD固有のDCL属性。 {| class="wikitable" ! colspan=2 | タイルクラスタの属性 |- ! 属性名 !! 適用タイル |- | [[bcad_font]] || list_box |- | [[bcad_height]] || すべてのタイル。height の代わり |- | [[bcad_width]] || すべてのタイル。width の代わり |- | [[bcad_label]] || label の代わり |- | [[bcad_win_wrap]] || list_box |- | [[bcad_skip_next_child]] || すべてのタイル。 |- |} BricsCAD 特有の挙動をするタイル属性 * [[fixed_width]] * [[fixed_height]] * [[label]] * [[tab_truncate]] == DCL ファイルの文法監査 == AutoCAD と多くの 互換 CAD では、DCL ファイルの文法監査を 0 から 3 の 4 レベルで行うことができる。(下記の文法監査レベルを参照)。監査を実行しようとすると、DCL ファイルで問題になりそうなコードや不要なコードが検出される。監査は、DCL をロードするときに行われる。DCL ファイルの監査レベルを設定するには、DCL ファイル内の任意の場所(通常最初の行)に、次のような行を挿入する。 dcl_settings : default_dcl_settings { audit_level = 3; } DCL ファイルで include 指示文を使用して 他の DCL ファイルを参照する場合は、1 ファイルに 1 つの dcl_settings のみ使用する。定義した監査レベルは、インクルードされるすべてのファイルに適用される。 === 文法監査レベル === * レベル … 説 明 * 0 … チェックを行わない。DCL ファイルを監査してから一度も変更してない場合にのみ使用することが推奨されている。 * 1 … エラー表示。CAD の終了につながる DCL のバグを検出する。監査にはほとんど時間がかからない。エラーには、未定義のタイルの使用やプロトタイプの循環定義などがある。このチェック レベルが既定の設定。 * 2 … 警告表示。ダイアログ ボックスのレイアウトや動作が要求どおりにならない原因となるような DCL バグを検出する。DCL ファイルを変更したときは、少なくとも 1 回は、このレベルで監査する必要がある。この警告レベルの監査によって、必要な属性の不足や不適切な属性値などの誤りを見つけることができる。 * 3 … ヒント表示。不要な属性定義を検出する。監査機能を最大限活用するために、開発中は audit_level を 3 にしておくことが推奨されている。これで問題が出なくなったら、DCL ファイルからdcl_settings 行を削除するか、0 に設定していい状態といえる。 == 互換CADでのDCL表示サンプル == 以下は同じDCLファイルを各互換CADで表示したサンプルである。 見て分かるように、同じDCLでも解釈が異なるため、各コントロールの左右やレイアウトは全く同じにはならない。 バージョンによっては、AutoCAD よりも互換 CAD の方が見やすい状態だったりする。 <gallery caption="DCL表示の比較" widths="240px" heights="160px"> File:Dcl_ac2011.png|AutoCAD2011 File:Dcl_ijcad7.png|IJCAD 7 File:Dcl_ijcadx.png|IJCADX File:Dcl_bricscadv11.png|BricsCAD v11 File:Dcl_gstercad2011.png|GstarCAD 2010 File:Dcl_zwcad2010.png|ZWCAD2010 </gallery>
このページで参照読み込みされているページ:
テンプレート:AutoLISP
(
ソースを閲覧
)
DCL
に戻る。
検索
検索
DCLのソースを表示
話題を追加