2 回答

TA貢獻1804條經驗 獲得超3個贊
對話框文件是擴展名為.dcl的文本文件,符合dcl對話框控制語言的語法。但對話框文件本身并不能工作,還必須要用autolisp或ads應用程序調用。
對話框由主對話框和其內部的各種片型框組成,其結構為數狀。圖1.1為一對話框結構示例,樹葉是各種片型框,樹根為dialog;圖1.2為其在autocad中的顯示。
在可編程對話框pdb中已預定義了以下基本片型框:
:dialog 對話
:button 按鈕
:edit_box 編輯框
:list_box 列表框
:image_button 圖像按鈕
:popup_list 彈出表
:radio_button 單選按鈕
:slider 滾動條
:toggle 開關
每個片型框包含一系列的屬性,這些屬性的值確定了片型框的位置、大小、長度、高度和文件標識等,例如lable屬性確定了在片型框上顯示的文字。用戶可以根據dcl語法將這些基本的片型框組裝起來,形成更為復雜,功能更為詳盡的對話框,也可以定義與基本片型框無關的新片型框,并將其與基本片型框組合成新的片型框組。為了方便對話框的布局,可將一行或一列片型框當作一個新的片型框,并在其周圍畫上邊框。對話框的基本布局有以下幾種:
:column 列。定義,可以與行、列嵌套。
:row 行。片型框組按行平行分布,顯示順序同column,也可與行列嵌套。
:radio_column 單選列。包含一列單選片型框,同時只能選擇一個片型框。
:radio_row 單選行。包含一行單選片型框,同時只能選擇一個片型框。
:boxed_column 有界列。列的周圍畫上邊框。
:boxed_row 有界行。行的周圍畫上邊框。
:boxed_radio_column有界單選列。在單選列的周圍畫上邊框。
:boxed_radio_row 有界單選行。在單選行的周圍畫上邊框。
用戶可以定義自己的屬性,不過在一般情況下僅使用pdb預定義的屬性就可以滿足程序的要求了。當片型框中的屬性未被指定時,pdb將賦于其缺省值。沒片型框的預定義屬性也各不相同,但布局屬性和功能屬性則是所有有效片型框的公共屬性,這些公共屬性是:
aligment 片型框的定位方式;
width height 片型框的寬度和高度;
fixed_width fixed_height 其值為true時,片型框大小固定不變;
children_aligment 子片型框的定位屬性;
children_fixed_width 子片型框的寬度固定屬性;
children_fixed_height 子片型框的固定高度屬性;
label 顯示在片型框內或左上方的文字;
key 指定程序引用片型框的文本字符串,在指定的對話框中,每個key的值應該是唯一的;
value 片型框的初始值,為一字符串;
mnemonic 片型框內快捷鍵,即帶下劃線的字母;
is_enabled 值為false時,片型框不可選;
is_tab_stop 值為false時,片型框不接受tab聚焦;
action 指定片型框時,對應的autolisp程序進行的操作。
另外,片型框還包括圖像框image、文本框text和襯框spacer,這三種片型框只是起修飾作用和加強視覺效果,不能引起任何操作。
dcl文件采用c語言的風格,每個分號表示一名,每個片型框的定義用一對大括號括起來;注釋在單行時用//,多行時可采用/*注釋語句*/的形式。
下面以一個簡單的例子說明dcl的編程,圖2是調用example.dcl的顯示。
//example.dcl對話框示例文件
test:dialog{
label="dialog example";
:text{//文本片型框
label="this is aexample.";
}
:button{//按鈕片型框
key="accept";
//關鍵字key為accept
label="ok";//標號為ok
mnemonic="o";
//按alt_o鍵可以選擇ok按鈕
fixed_width=true;
//按鈕的寬度固定不變
aligment=centered;
//按鈕以中心對齊
is_default=true;
}
}
pdb在base.dcl中還提供了一組標準的按鈕群,在我們自己的dcl文件中可以直接使用:
:ok_only單個ok按鈕;
:lk_cancel ok按鈕和cancel兩個按鈕;
:ok_cncel_help ok、cancel和help…三個按鈕;
:ok_cncel_help_info ok、cancel、help…和info…四個按鈕。
文本文件的對話框文件自身本身不能工作,需要用autolisp或ads應用程序調用對話框文件才行,ads的效率比較高,但掌握起來要困難一些,autolisp程序較為煩瑣,但比較容易掌握。autolisp提供了一組管理對話框的函數包,處理用戶與對話框之間的交互。下面是最重要的幾個函數:
(load_dialog dclfile)用與裝入一個dcl文件,返回一個整數標識。
(unload_dialog dcl_id)卸載標識為dcl_id的dcl文件。
(new_dialog dialog_name dcl_id)初始化對話框,并在屏幕顯示對話框,其中dialog_name是在對話框文件中定義的對話框名稱。
(start_dialog)啟動對話框,并接受用戶的輸入信息。
(done_dialog)終止對話框信息的輸入,并且停止顯示對話框。
(action_tile key action_express)處理用戶的選擇,將片型框與應用程序中的對應操作聯系起來,key是片型框的關鍵字。
下面的autolisp程序就是對上面的example.dcl對話框文件的管理:
;;;example.dcl管理example.dcl對話框文件的autolisp程序
(defun c:showdcl(/dcl_id)
(setq dcl_id (load_dialog"example.dcl"))
(if(not(new_dialog"test"dcl_id))
(exit))
(action_tile
"accept"
"(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
)
在autocad中顯示圖2對話框的過程如下:
command:(load"example.lsp")
c:showdcl
command:showdel
添加回答
舉報