第12章 對(duì)話框設(shè)計(jì)清華CAD二次開發(fā) LISP(章節(jié)課程)_第1頁
第12章 對(duì)話框設(shè)計(jì)清華CAD二次開發(fā) LISP(章節(jié)課程)_第2頁
第12章 對(duì)話框設(shè)計(jì)清華CAD二次開發(fā) LISP(章節(jié)課程)_第3頁
第12章 對(duì)話框設(shè)計(jì)清華CAD二次開發(fā) LISP(章節(jié)課程)_第4頁
第12章 對(duì)話框設(shè)計(jì)清華CAD二次開發(fā) LISP(章節(jié)課程)_第5頁
已閱讀5頁,還剩143頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第 12 章 對(duì)話框設(shè)計(jì) 1凌云書屋12.1概述1. 對(duì)話框的特點(diǎn) 對(duì)話框形象、直觀,可以隨意輸入、隨時(shí)修改,鼠標(biāo)、鍵盤并用,是一種深受用戶歡迎的界面。 對(duì)話框用DCL語言(Dialog Control Language)定義,得到DCL類型的文件,用AutoLISP或C程序驅(qū)動(dòng)。 AutoCAD提供了兩個(gè)重要的DCL文件: ACAD.DCL存放AutoCAD系統(tǒng)定義的對(duì)話框, BASE.DCL為用戶提供了一些常用的對(duì)話框標(biāo)準(zhǔn)控件。2. 對(duì)話框的組成 對(duì)話框由若干控件組成,見圖12-1??丶梢允前粹o、切換開關(guān)、編輯框、列表或圖像等。 2凌云書屋圖12-1對(duì)話框的組成 圖像按鈕彈出列表滑動(dòng)條編

2、輯框按鈕圖像互鎖按鈕切換開關(guān)文本3凌云書屋3. 實(shí)例【例12-1】用DCL定義一個(gè)簡(jiǎn)單的對(duì)話框。 進(jìn)入VLISP環(huán)境,將下列源代碼輸入到文本編輯窗口,選取下拉菜單ToolsInterface ToolPreview DCL in Editor,即可看到圖12-2所示該對(duì)話框的外觀。sample:dialog label = 簡(jiǎn)單的對(duì)話框?qū)嵗?:text label = 祝您成功!;:button key = accept; label = 確認(rèn); is_default = true; fixed_width = true; alignment=centered; 圖12-2 簡(jiǎn)單的對(duì)話框?qū)嵗?

3、凌云書屋12.2 對(duì)話框控件 控件是構(gòu)造對(duì)話框的元件。AutoCAD為用戶預(yù)定義了23種控件和8個(gè)常用的固定控件。每一種控件屬于一種類型。每一個(gè)控件有多個(gè)屬性。每個(gè)屬性都有一個(gè)名字和值。多數(shù)的屬性都有它的默認(rèn)值。一個(gè)控件具有哪些屬性是由它的類型所決定的??丶倪@些屬性確定了它的外觀形式和動(dòng)作行為。 例如上例中的確認(rèn)按鈕,它的類型是button。當(dāng)它的屬性label = 確認(rèn)、key = accept、is_default = true、fixed_width = true、alignment = centered,其余屬性為默認(rèn)值時(shí),就確定了圖12-2所示的外觀。按照控件的特點(diǎn)可以將控件分為以

4、下幾類。5凌云書屋12.2.1可以定義動(dòng)作行為的控件 這類控件具有動(dòng)作行為(action)的屬性,動(dòng)作行為是用AutoLISP的函數(shù)或表達(dá)式表示定義的,用鼠標(biāo)單擊這樣的控件時(shí),就會(huì)執(zhí)行相應(yīng)的函數(shù)或表達(dá)式。1. 按鈕(Button) 按鈕適用于立即產(chǎn)生可視的操作,如退出對(duì)話框、彈出子對(duì)話框及其它特定操作。每個(gè)對(duì)話框至少包含一個(gè)OK按鈕(或功能相當(dāng)?shù)目丶?按鈕的類型是button。有action、alignment、fixed_height、fixed_width、height、is_cancel、is_default、is_enabled、is_tab_stop、key、label、mnem

5、onic、width 共13個(gè)屬性。它的標(biāo)簽(label)顯示在按鈕上。 若要?jiǎng)?chuàng)建與OK等價(jià)的控件,其關(guān)鍵字必須為accept,并將其屬性is_default設(shè)定為true(真)。參照例121中確認(rèn)按鈕的定義。6凌云書屋2. 編輯框(Edit Box) 編輯框用于輸入字符串。它的類型是edit_box。有action、alignment、allow_accept、edit_limit、edit_width、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、mnemonic、value、width、password_

6、char 16個(gè)屬性。其標(biāo)簽顯示在該框的左邊,它的默認(rèn)寬度為12個(gè)字符,當(dāng)輸入的字符多于12時(shí),文本自動(dòng)向左滾動(dòng),框內(nèi)的字符串即為編輯框的值(value)。圖12-3所示的編輯框定義如下::edit_box key=test_text; label=長(zhǎng)度: ; value=100.0; width=12; 圖12-3 編輯框 7凌云書屋3. 圖像按鈕(Image Button) 圖像按鈕將圖像顯示在按鈕上。圖像由AutoLISP程序確定。它的類型是image_button。有action、alignment、allow_accept、aspect_ratio、color、fixed_heigh

7、t、fixed_width、height、is_enabled、is_tab_stop、key、mnemonic、width 13個(gè)屬性。 圖像按鈕很有用的一個(gè)特性是,通過AutoLISP程序可以獲取被單擊時(shí)的位置,從而根據(jù)不同的位置設(shè)計(jì)相應(yīng)的動(dòng)作。 圖12-4 所示圖像按鈕定義的如下::image_button key=test_image_button; width=10; aspect_ratio=1.5; 圖12-4 圖像按鈕8凌云書屋4. 列表框(List Bbox) 列表框的類型是list_box。有action、alignment、allow_accept、fixed_heigh

8、t、fixed_width、height、is_enabled、is_tab_stop、key、label、list、mnemonic、multiple_select、tabs、value、width 16個(gè)屬性。列表內(nèi)含有若干行可供選擇的文本,當(dāng)表的內(nèi)容超出表的范圍時(shí),將自動(dòng)在表的右側(cè)出現(xiàn)一個(gè)滑動(dòng)條。 列表的標(biāo)簽顯示在列表框的上方作為文字說明。列表的值是被選中的文本行的序號(hào),序號(hào)從0開始。屬性multiple_select為true時(shí),允許同時(shí)選取框內(nèi)的多行文本。圖12-5 列表框 9凌云書屋圖12-5 所示對(duì)話框的列表定義如下::list_box label=齒輪種類; list= 圓柱直

9、齒n圓柱斜齒n圓錐直齒n螺旋傘齒n蝸輪n蝸桿n; value=2; key=gear_list; height=6; 圖12-5 列表框 10凌云書屋5. 下拉列表(Popup List) 下拉列表的類型是popup_list。它具有action、alignment、edit_width、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、list、mnemonic、tabs、value、width 15個(gè)屬性。 下拉列表具有編輯框和列表框的兩個(gè)特點(diǎn),初始狀態(tài)象一個(gè)編輯框,標(biāo)簽顯示在框的左邊,框內(nèi)只有一行字符和一個(gè)向

10、下的箭頭,見圖12-6(a)。單擊框內(nèi)箭頭,將彈出一個(gè)列表,見圖12-6(b),選取表內(nèi)文本之后,列表自動(dòng)關(guān)閉,在編輯框內(nèi)顯示選中的內(nèi)容。下拉列表的值是被選中的文本行的序號(hào)。 11凌云書屋圖12-6 所示下拉列表的定義如下::popup_listlabel=齒輪種類:;list=圓柱直齒n圓柱斜齒n圓錐直齒n螺旋傘齒n蝸輪n蝸桿n;key= gear_list;(a) (b)圖12-6 下拉列表 12凌云書屋6. 互鎖按鈕(Radio Button) 互鎖按鈕的類型是radio_button。有action、alignment、fixed_height、fixed_width、height、i

11、s_enabled、is_tab_stop、key、label、mnemonic、value、width 12個(gè)屬性。 互鎖按鈕不宜能單獨(dú)使用,必須由多個(gè)這樣的按鈕以行或列的形式組成一組,同組的按鈕之間是互鎖的,只能從中選取一個(gè)。互鎖按鈕的標(biāo)簽顯示在按鈕的右邊。圖12-7所示互鎖按鈕的定義如下::radio_button key= unit_mm; label= 毫米;圖12-7 互鎖按鈕13凌云書屋7. 滑動(dòng)條(Slider) 滑動(dòng)條是一種直觀控制數(shù)值的控件。點(diǎn)取滑動(dòng)條上的箭頭或拖動(dòng)滑塊,可以得到字符串方式表示的整數(shù)。 滑動(dòng)條的類型是slider。有action、alignment、big_

12、increment、fixed_height、fixed_width、height、key、label、layout、max_value、min_value、mnemonic、small_increment、value、width 15個(gè)屬性。 屬性max_value、min_value確定數(shù)值的最大和最小值,small_increment、big_increment確定點(diǎn)擊滑動(dòng)條箭頭時(shí)的最小、最大增量。 圖12-8 所示滑動(dòng)條的定義如下::slider key= test_slider; min_value=0; max_value=100; 圖12-8 滑動(dòng)條14凌云書屋8. 切換開關(guān)(T

13、oggle) 切換開關(guān)又稱作復(fù)選開關(guān)、乒乓開關(guān),它的類型是toggle。有action、alignment、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、label、value、width 11個(gè)屬性。 切換開關(guān)與互鎖按鈕不同的是它可以單獨(dú)使用,同組的切換開關(guān)各自是獨(dú)立的。 標(biāo)簽顯示在開關(guān)的右邊。圖12-9所示切換開關(guān)的定義如下::toggle label= 正交方式; key= ortho_mode; value=1;圖12-9 切換開關(guān)15凌云書屋12.2.2 組合類控件 組合類控件可以將相關(guān)的控件組合在一起,使得對(duì)話

14、框的布局更加美觀、合理,操作更加方便。1. 列(Column) 列是將若干控件構(gòu)成垂直分布的一個(gè)組件。 列的類型是column。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9個(gè)屬性。 圖12-10 列 圖12-11 加框列 16凌云書屋圖12-10 所示列的定義如下::column :buttonlabel= 光標(biāo)拾取 ; key= pick; :edit_boxlabel= x=; width=12; k

15、ey= x; mnemonic= x; value=0.0; :edit_boxlabel= y=; width=12; key= y; mnemonic= y; value=0.0; 圖12-10 列 17凌云書屋2. 加框列(Boxed Column) 顧名思義加框列就是加了一個(gè)矩形框的列。 加框列的類型是boxed_bolumn。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9個(gè)屬性。 如果將圖12-1

16、0 所示列的定義的第一行:column改為:boxed_columnlabel= 左下角點(diǎn);,即可定義一個(gè)加框列,見圖12-11。圖12-11 加框列 18凌云書屋3. 互鎖列(Radio Column) 若干個(gè)互鎖按鈕組成的列即為互鎖列。 互鎖列的類型是radio_column。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9個(gè)屬性?;ユi列的特點(diǎn)是,它保證了其中只能有一個(gè)按鈕的值為1,即處于打開狀態(tài)。圖12

17、-12 互鎖列 圖12-13 加框互鎖列 19凌云書屋圖12-12 所示互鎖列的定義如下::radio_column key= size; :radio_buttonlabel= A&0; key= a0; :radio_buttonlabel= A&1 ; key= a1; :radio_buttonlabel= A&2 ; key= a2; :radio_buttonlabel= A&3; key= a3; value=1;:radio_buttonlabel= A&4; key= a4;:radio_buttonlabel= A&5; key= a5;圖12-12 互鎖列20凌云書屋圖1

18、2-13 加框互鎖列 4. 加框互鎖列(Boxed Radio Column) 加框互鎖列就是加了一個(gè)矩形框的互鎖列。 加框互鎖列的類型是boxed_radio_column。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9個(gè)屬性。 如果將圖12-12 所示互鎖列的定義的第一行:radio_column改為:boxed_radio_columnlabel=幅面規(guī)格;,即可定義一個(gè)加框互鎖列,見圖12-13。2

19、1凌云書屋5. 行(Row) 行是將若干控件構(gòu)成水平分布的一個(gè)組件。行的類型是row。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9個(gè)屬性。 圖12-14 行圖12-14 所示行的定義如下::row :toggle label=縱向; key=dir; :edit_box label=W(mm)=; mnemonic=W; key=w; value=420; :edit_box label=H(mm)=;

20、mnemonic=H; key=h; value=297; 22凌云書屋6. 加框行(Boxed Row) 加框行就是加了一個(gè)矩形框的行。 加框行的類型是boxed_row。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9個(gè)屬性。 如果將圖12-14 所示行的定義的第一行:row改為:boxed_rowlabel=圖紙幅面;,即可定義一個(gè)加框行,見圖12-15。圖12-15 加框行23凌云書屋7. 互鎖行(R

21、adio Row) 若干個(gè)互鎖按鈕組成的行即為互鎖行?;ユi行的類型是radio_row。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_width、height、label、width 9個(gè)屬性?;ユi行中只能有一個(gè)選鈕的值為1。圖12-16 所示互鎖行的定義如下::radio_row key=size; :radio_buttonlabel=A&0; key=a0; :radio_buttonlabel=A&1; key=a1; :radio_buttonla

22、bel=A&2; key=a2; :radio_buttonlabel=A&3; key=a3; value=1; :radio_buttonlabel=A&4; key=a4; :radio_buttonlabel=A&5; key=a5; 圖12-16 互鎖行24凌云書屋8. 加框互鎖行(Boxed Radio Row) 加框互鎖行就是加了一個(gè)矩形框的互鎖行。加框互鎖行的類型是boxed_radio_row。有alignment、children_alignment、children_fixed_height、children_fixed_width、fixed_height、fixed_

23、width、height、label、width 9個(gè)屬性。 如果將圖12-16 所示互鎖行的定義的第一行:radio_row改為:boxed_radio_rowlabel=幅面規(guī)格;,即可定義一個(gè)加框互鎖行,見圖12-17。 圖12-17 加框互鎖行25凌云書屋9. 對(duì)話框(dialog) 對(duì)話框本身也可以看作是一種控件,它是對(duì)話框的主體,不能單獨(dú)使用,且至少要有一個(gè)確認(rèn)(OK)或取消(Cancel)按鈕。它的類型是dialog,有initial_focus、label、value 3個(gè)屬性。標(biāo)簽是對(duì)話框的標(biāo)題。屬性value也可以作為標(biāo)題,這樣的標(biāo)題在程序運(yùn)行時(shí)可以被改變。initial_

24、focus用于指定初始聚焦的控件。見右圖所示對(duì)話框及以下程序代碼: sample:dialog label = 簡(jiǎn)單的對(duì)話框?qū)嵗? :text label = 祝您成功!; :buttonkey = accept; label = 確認(rèn); 簡(jiǎn)單的對(duì)話框?qū)嵗?is_default = true; fixed_width = true; alignment=centered; 26凌云書屋12.2.3 裝飾性和信息類控件 裝飾性和信息類控件無行為動(dòng)作,也不能被選擇,主要用于顯示信息、加強(qiáng)視覺效果或協(xié)助對(duì)話框布局。1. 圖像(Image) 圖像是在一個(gè)矩形區(qū)域內(nèi)顯示矢量圖形、色彩填充塊等的控件。它的

25、類型是image。有alignment、aspect_ratio、color、fixed_height、fixed_width、height、is_enabled、is_tab_stop、key、mnemonic、width 11個(gè)屬性。圖像的值是點(diǎn)取圖像時(shí)的位置,通過AutoLISP程序可以獲取該位置,從而根據(jù)這些位置設(shè)計(jì)相應(yīng)的動(dòng)作。 必須指定圖像的width、height或二者之一和aspect_ratio屬性。圖像的內(nèi)容由AutoLISP程序確定。27凌云書屋圖12-18所示圖像的定義如下::image width=30; aspect_ratio=0.6; key= rect; col

26、or=graphics_background; 圖12-18 圖像 注意:圖像的內(nèi)容由AutoLISP程序確定。28凌云書屋2. 文本(Text) 文本控件通常用于顯示提示或警告信息。 文本的類型是text。有alignment、fixed_height、fixed_width、height、is_bold、key、label、value、width 9個(gè)屬性。 屬性label和value都可以存放用戶要顯示的信息,且外觀相同。但是,label存放的信息是不變的,value存放的信息可以由AutoLISP程序賦以新的內(nèi)容。若label和value同時(shí)存放了某些信息時(shí),label的信息不予顯示。

27、例12-2 定義了用屬性label存放顯示信息的對(duì)話框,外觀見圖12-19。【例12-2】 用屬性label存放顯示信息的對(duì)話框。iwarn1:dialoglabel=警告信息;:textlabel=選取的對(duì)象不是直線,請(qǐng)重新選擇!; ok_cancel; 圖12-19 文本29凌云書屋 3. 部分文本(text_part) 部分文本的類型是text_part,只有l(wèi)abel一個(gè)屬性。單獨(dú)的部分文本與只含label屬性的文本(Text)等效。多個(gè)部分文本可以組成單行的文本或段落,彌補(bǔ)了文本(Text)只能單行的不足,例12-3定義了顯示兩行信息的對(duì)話框,外觀見圖12-20?!纠?2-3】定義多

28、行文本的對(duì)話框。warn2:dialoglabel=警告信息; :text_part label=選取的對(duì)象不是直線,; :text_part label=請(qǐng)重新選擇!; ok_cancel; 圖12-20部分文本30凌云書屋4. 串聯(lián)(Concatenation) 串聯(lián)的類型是Concatenation,沒有屬性,它的作用是把多個(gè)部分文本組成單行的文本。例12-4是將兩個(gè)部分文本組成單行的文本的實(shí)例,結(jié)果見圖12-21。/例12-4 將兩個(gè)部分文本組成單行的文本。Warn3:dialoglabel=警告信息; :concatenation :text_part label=選取的對(duì)象不是直線

29、,; :text_part label=請(qǐng)重新選擇!; ok_cancel; 圖12-21 串聯(lián)后的部分文本31凌云書屋5. 段落(Paragraph) 段落的作用是把多個(gè)部分文本組成段落,它的類型是paragraph,沒有屬性。例12-5是將三個(gè)部分文本組成一個(gè)段落的實(shí)例,結(jié)果見圖12-22。warn:dialoglabel=警告信息; :paragraph :concatenation : text_part label=選取的對(duì)象不是直線,; : text_part label=請(qǐng)重新選擇!; :text_partlabel =用單點(diǎn)方式選擇直線 !; ok_cancel;圖12-22

30、段落文本32凌云書屋6. 間隔(Spacer、Spacer_0、Spacer_1) 間隔(Spacer)也稱空白襯墊,是一種特殊的控件,它具有不可見的大小和對(duì)齊方式,用來調(diào)整其它一些控件之間的間隔。如果不用間隔,系統(tǒng)將采用均勻的布局,因此,間隔只用在需要局部調(diào)整控件間隙的地方。 間隔控件的類型是spacer,有alignment、fixed_height、fixed_width、height、width 5個(gè)屬性。 Spacer_0和Spacer_1是AutoCAD定義的具體控件。Spacer_0是Spacer的width、height為0的特例,Spacer_1是Spacer的width、h

31、eight為1的特例。Spacer_0、Spacer_1可直接引用。 以圖12-23為例,前4行每行是具有固定寬的3個(gè)按鈕。底行最寬,它確定了所有的行寬。第一行沒有插入間隔,這3個(gè)按鈕的兩端與底行對(duì)齊,且均勻分布。第二行插入間隔Spacer_0,Spacer_0雖然沒有寬度,但它參與等分底行大于該行的間隔,或者認(rèn)為該行增加了一個(gè)寬度為0的按鈕。第三行插入間隔Spacer_1,相當(dāng)于增加了一個(gè)寬度為1的按鈕,再均勻分布。第四行插入寬度為4的間隔Spacer,相當(dāng)于增加了一個(gè)寬度為4的按鈕,再均勻分布。該對(duì)話框的定義見例12-6。33凌云書屋圖12-23 用spacer、spacer_0、spac

32、er_1調(diào)整控件間的間隙 Spacer_0Spacer_1Spacer寬度=4 【例12-6】用spacer、spacer_0、spacer_1調(diào)整控件間的間隙spcr:dialoglabel= “調(diào)整間隔實(shí)驗(yàn)”;:row/沒有插入間隔 :buttonlabel=A0;key=a0;fixed_width=true; :buttonlabel=A1;key=a1;fixed_width=true; :buttonlabel=A2;key=a2;fixed_width=true; 34凌云書屋:rowspacer_0;/插入間隔Spacer_0 :buttonlabel=B0;key=b0;fi

33、xed_width=true; :buttonlabel=B1;key=b1;fixed_width=true; :buttonlabel=B2;key=b2;fixed_width=true; :rowspacer_1;/插入間隔Spacer_1 :buttonlabel=C0;key=c0;fixed_width=true; :buttonlabel=C1;key=c1;fixed_width=true; :buttonlabel=C2;key=c2;fixed_width=true; 35凌云書屋 :row:spacer/插入寬度為4的間隔Spacer width=4; fixed_wi

34、dth=true; :buttonlabel=D0;key=d0;fixed_width=true; :buttonlabel=D1;key=d1;fixed_width=true; :buttonlabel=D2;key=d2;fixed_width=true; ok_cancel_help_info;36凌云書屋12.2.4 AutoCAD 預(yù)定義的控件 AutoCAD不僅預(yù)定義了25種控件的類型,還定義了以下8個(gè)最常用的控件。定義對(duì)話框時(shí),可直接使用這些控件,但是在編寫AutoLISP驅(qū)動(dòng)程序時(shí),必須要準(zhǔn)確地使用其關(guān)鍵字(大小寫字母不等價(jià))。1. ok_only(確認(rèn))按鈕 單個(gè)的OK按

35、鈕,關(guān)鍵字為accept。用于確認(rèn)施加在對(duì)話框上的操作。2. ok_cancel(確認(rèn)和取消)按鈕 OK和Cancel兩個(gè)按鈕組成的行,OK按鈕的關(guān)鍵字同前,Cancel按鈕的關(guān)鍵字為cancel。Cancel按鈕用于放棄施加在對(duì)話框上的操作。3. errtile(出錯(cuò)信息)控件 Errtile屬于Text類型的控件,其標(biāo)簽為空,關(guān)鍵字為error。顯示該控件屬性value的內(nèi)容。屬性value的值由AutoLISP程序確定。37凌云書屋【例12-7】定義圖12-24所示出錯(cuò)信息的對(duì)話框的源代碼和AutoLISP驅(qū)動(dòng)程序。/ 用DCL定義對(duì)話框,文件名為12-7.dcl,存放在d盤的examp

36、ledcl目錄下。error:dialoglabel=出錯(cuò)信息; errtile; ok_only; 圖12-24 出錯(cuò)信息對(duì)話框; 用AutoLISP驅(qū)動(dòng)對(duì)話框的程序,文件名為12-7.lsp。(defun c:erdlg() (if ( (setq id(load_dialog d:exampledcl12-7) 0) (exit) (if (not (new_dialog error id)(exit) (set_tile error 長(zhǎng)度必須大于 0 !) (action_tile accept (done_dialog) (start_dialog) (unload_dialog i

37、d) (princ)38凌云書屋4. ok_cancel_help(確認(rèn)、取消和幫助)控件 OK、Cancel和Help三個(gè)按鈕組成的行,OK、Cancel按鈕的關(guān)鍵字同前,Help按鈕的關(guān)鍵字為help?!纠?2-8】定義圖12-25所示含有OK、Cancel和Help三個(gè)按鈕的對(duì)話框的源代碼和AutoLISP驅(qū)動(dòng)程序。/用DCL定義對(duì)話框,文件名為12-8.dcl,存放在d盤的exampledcl目錄下。hlp:dialog label = 了解直線命令的用法; ok_cancel_help;圖12-25 含有ok_cancel_help控件的對(duì)話框 39凌云書屋;用AutoLISP驅(qū)動(dòng)對(duì)

38、話框的程序,文件名為12-8.lsp。 (defun c:hlpdlg() (setq id(load_dialog d:example12-8.dcl) (if ( id 0)(exit) (if (not (new_dialog hlp id)(exit) (action_tile help (help line);定義help按鈕的活動(dòng)是調(diào)用AutoLISP的help函數(shù),了解直線命令的用法。 (action_tile accept (done_dialog) (action_tile cancel (done_dialog) (start_dialog) (unload_dialog

39、id) (princ)40凌云書屋5. ok_cancel_help_errtile(確認(rèn)、取消、幫助和出錯(cuò))控件 該控件為OK、Cancel和Help共3個(gè)按鈕組成的行,出錯(cuò)信息寫在該行的下面。這4個(gè)控件的關(guān)鍵字同前??丶rrtile需要在AutoLISP驅(qū)動(dòng)對(duì)話框程序中用set_tile函數(shù)為其屬性value賦值,例如: (set_tile error 無效的輸入)41凌云書屋/定義ok_cancel_help_errtile對(duì)話框,文件名為error.dclerror:dialoglabel=出錯(cuò)信息; ok_cancel_help_errtile; (defun c:erdlg()

40、;AutoLISP驅(qū)動(dòng)程序 (if ( (setq id(load_dialog d:exampledclerror) 0) (exit) (if (not (new_dialog error id)(exit) (set_tile error 無效的輸入) (action_tile accept (done_dialog) (start_dialog) (unload_dialog id) (princ)42凌云書屋6. ok_cancel_help_info(確認(rèn)、取消、幫助和信息)控件 該控件為OK、Cancel、Help和info四個(gè)按鈕組成的行,OK、Cancel和Help的關(guān)鍵字同

41、前。info按鈕的關(guān)鍵字為info,需要在AutoLISP驅(qū)動(dòng)程序定義info按鈕的活動(dòng),比如,彈出一個(gè)用text控件為主的顯示一些信息的對(duì)話框。 43凌云書屋12.3 控件的屬性 控件的外觀和功能是由該控件的屬性確定的。屬性如同程序中的變量,具有名字和值。屬性的值有整型、實(shí)型和字符串類型,有的屬性值只能是預(yù)定義的保留字。實(shí)數(shù)的小數(shù)點(diǎn)前必須有數(shù)字,例如.1是錯(cuò)的,應(yīng)為0.1。字符串是由雙引號(hào)括起的文本,與AutoLISP一樣,用做轉(zhuǎn)義符。預(yù)定義的保留字有true、false、left、centered、right、top和bottom,它們必須小寫。AutoLISP程序在運(yùn)行中可以改變控件的一

42、些屬性。 控件的類型不同,其屬性的數(shù)量也不同。有些屬性在所有的控件中的含義是相同的,有些屬性在不同的控件中含義也不同。AutoCAD為用戶預(yù)定義了35個(gè)屬性。44凌云書屋按字母順序依次是:1. action 確定控件的活動(dòng),活動(dòng)是是用雙引號(hào)括起的AutoLISP表達(dá)式或函數(shù)。表達(dá)式中不能含有AutoCAD的命令。當(dāng)選中該控件時(shí),執(zhí)行相應(yīng)的AutoLISP表達(dá)式或函數(shù)。AutoLISP驅(qū)動(dòng)程序可以設(shè)置控件的一些屬性,且覆蓋DCL定義時(shí)的該屬性。 相關(guān)的控件有:button、edit_box、image、image_button、list_box、popup_list、radio_button、s

43、lider、toggle。 默認(rèn)值:無2. alignment 確定控件自身的定位方式。列類型的控件可選left(左對(duì)齊)、centered(中間對(duì)齊)和right(右對(duì)齊);行類型的控件可選top(頂對(duì)齊)、centered(中間對(duì)齊)和bottom(底對(duì)齊)。相關(guān)的控件有:全部控件。 默認(rèn)值:列類型控件為left,行類型控件為centered45凌云書屋3. allow_accept 若該屬性的值為true,按下接受鍵(如Enter鍵),就如同單擊了默認(rèn)按鈕(is_default 為 true的按鈕)。 相關(guān)的控件有:edit_box、image_button、list_box 默認(rèn)值:f

44、alse4. aspect_ratio 圖像控件的寬與高之比,與寬、高之一確定圖像控件的大小。若該屬性的值為零,則默認(rèn)為將圖像控件調(diào)整為最合適的寬與高之比。 相關(guān)的控件有:image、image_button 默認(rèn)值:無5. big_increment 確定滑動(dòng)條最大增量的整數(shù)值,取值范圍在屬性min_value和屬性max_value之間。 相關(guān)的控件有:slider 默認(rèn)值:整個(gè)范圍的1/10。46凌云書屋6. children_alignment 與屬性alignment的功能基本相同,區(qū)別在于它只針對(duì)子控件組群而言,確定組群內(nèi)部控件的定位方式,控件自身的alignment屬性優(yōu)先于該屬

45、性。 相關(guān)的控件有:boxed_column、boxed_radio_column、boxed_radio_row、boxed_row、column、radio_column、radio_row、row 默認(rèn)值:列類型控件為left,行類型控件為centered7. children_fixed_height 功能與fixed_height相同,不過它是控件組群的屬性,僅作用于組群內(nèi)所有的控件并作為它們的默認(rèn)值,低于屬性fixed_height的優(yōu)先級(jí)。 相關(guān)的控件有:boxed_column、boxed_radio_column、boxed_radio_row、boxed_row、colum

46、n、radio_column、radio_row、row 默認(rèn)值:false47凌云書屋8. children_fixed_width 功能與fixed_ width相同,不過它是控件組群的屬性,僅作用于組群內(nèi)所有的控件并作為它們的默認(rèn)值,默認(rèn)值為flase,低于屬性fixed_ width的優(yōu)先級(jí)。 相關(guān)的控件有:boxed_column、boxed_radio_column、boxed_radio_row、boxed_row、column、radio_column、radio_row、row 默認(rèn)值:false9. color 確定圖像背景、矢量或填充塊的顏色。普通顏色與AutoCAD的標(biāo)

47、準(zhǔn)顏色名(red、yellow等)和顏色號(hào)所定義的顏色含義相同,此外還有表12-1所示的特殊顏色。 相關(guān)的控件有:image、image_button。 默認(rèn)值:7(白色)48凌云書屋表12-1 特殊的顏色 顏色值 預(yù)定義 含 義 -2 Graphics_background 當(dāng)前圖形屏幕的背景色 -15 Dialog_background 當(dāng)前對(duì)話框背景色 -16 Dialog_foreground 當(dāng)前對(duì)話框前景色 -18 Dialog_line Current 當(dāng)前對(duì)話框線條顏色10. edit_limit 確定編輯框可容納的最多字符數(shù),最大值為256。 相關(guān)的控件有:edit_box。

48、 默認(rèn)值:13249凌云書屋11. edit_width 確定編輯框的寬度,以字符為單位。若該屬性的值默認(rèn)為0,編輯框的寬度將是不固定的,布局時(shí)可自動(dòng)擴(kuò)充到整個(gè)可用空間。 相關(guān)的控件有:edit_box、popup_list 默認(rèn)值:擴(kuò)充到整個(gè)可用空間。12. fixed_height 當(dāng)該屬性的值為true時(shí),屬性height有效,否則做相關(guān)調(diào)整。 相關(guān)的控件有:全部控件。 默認(rèn)值:flase13. fixed_width 當(dāng)該屬性的值為true時(shí),屬性width有效,否則做相關(guān)調(diào)整。 相關(guān)的控件有:全部控件。 默認(rèn)值:flasefixed_width = true;width = 10;f

49、ixed_width = false;width = 10;50凌云書屋12. fixed_width_font 當(dāng)該屬性的值為true時(shí),對(duì)于列表框或下拉列表框內(nèi)的字符,在行距、列距不變的情況下減小字符之間的間隔(字符盡可能地大)。 相關(guān)的控件有:list_box、popup_list。 默認(rèn)值:flase15. height 確定控件的最小高度,數(shù)值類型是整數(shù)或?qū)崝?shù)型。單位為屏幕字符的最大高度。如果屬性fixed_height的值為ture,height是控件的實(shí)際高度,否則,在自動(dòng)布局時(shí),控件的實(shí)際高度會(huì)超出該值。通常,不需指定該值,系統(tǒng)能自動(dòng)采用合適的數(shù)值(圖像及圖像按鈕除外)。 相關(guān)

50、的控件有:全部控件。 默認(rèn)值:無16. initial_focus 確定對(duì)話框內(nèi)初始被聚焦的控件。 相關(guān)的控件有:dialog。 默認(rèn)值:無Flase ture51凌云書屋17. is_bold 若該屬性為true,該控件的字符用黑體顯示。 相關(guān)的控件有:text。 默認(rèn)值:false18. is_cancel 若該屬性為true,所選中的按鈕與按取消鍵(如Esc)的作用相同。對(duì)話框中只能有一個(gè)按鈕的is_cancel為true,且點(diǎn)取該按鈕后,取消施加在對(duì)話框上的操作并終止對(duì)話框。 相關(guān)的控件有:button。 默認(rèn)值:false19. is_default 若該屬性為true,單擊該按鈕與

51、按接收受鍵(如Enter)的作用相同。對(duì)話框中只能有一個(gè)按鈕將該屬性設(shè)置為true。 相關(guān)的控件有:button。 默認(rèn)值:false52凌云書屋20. is_enabled 若該屬性為true,控件有效,否則,控件失效(變灰)。 相關(guān)的控件有:button、edit_box、image、image_button、list_box、popup_list、radio_button、toggle。 默認(rèn)值:true21. is_tab_stop 確定控件是否可以用Tab選擇聚焦,若該屬性為false時(shí),按Tab鍵時(shí),將跳過該控件到下一個(gè)控件。 相關(guān)的控件有:button、edit_box、imag

52、e、image_button、list_box、popup_list、radio_button、toggle。 默認(rèn)值:trueflase ture53凌云書屋22. key 確定控件的關(guān)鍵字,關(guān)鍵字是控件的標(biāo)識(shí),在一個(gè)對(duì)話框中的關(guān)鍵字必須是唯一的。關(guān)鍵字的值為字符串,且大小寫不等價(jià)。AutoLISP程序根據(jù)控件的關(guān)鍵字施加相應(yīng)控件的操作。 相關(guān)的控件有:Button、edit_box、image、image_button、list_box、popup_list、radio_button、slider、text、toggle。默認(rèn)值:無23. Label 確定控件的標(biāo)簽,label的值是一個(gè)由

53、雙引號(hào)括起來的字符串。它的顯示位置取決于控件的類型。例如,對(duì)話框的標(biāo)簽是顯示在頂部的標(biāo)題,按鈕的標(biāo)簽顯示在按鈕上,編輯框的標(biāo)簽顯示在編輯框的左邊,切換開關(guān)、互鎖按鈕的標(biāo)簽在顯示開關(guān)按鈕的右邊,行、列的標(biāo)簽顯示在行、列的左上方。 相關(guān)的控件有:boxed_column、boxed_radio_column、boxed_radio_row、boxed_row、button、dialog、edit_box、list_box、popup_list、radio_button、slider、text、text_part、toggle。 默認(rèn)值:無54凌云書屋24. layout 確定slider(滑動(dòng)條)

54、的方位是horizontal(水平)還是vertical(垂直),默認(rèn)值為horizontal。 相關(guān)的控件有:slider。 默認(rèn)值:horizontal25. list 確定列表框或下拉列表框內(nèi)的初始內(nèi)容(字符串),行之間用n分隔,行內(nèi)用制表符t分隔。 相關(guān)的控件有:list_box、popup_list。 默認(rèn)值:無26. max_value 確定滑動(dòng)條返回的最大值,是-3276832767之間的整數(shù)。 相關(guān)的控件有:slider。 默認(rèn)值:1000055凌云書屋27. min_value 確定滑動(dòng)條返回的最小值,是-3276832767之間的整數(shù)。 相關(guān)的控件有:slider。 默認(rèn)值

55、:028. mnemonic 定義控件的熱鍵,即助記符。助記符是控件標(biāo)簽中帶下劃線的字符。也可以在屬性label中用&定義助記符。 若助記符是為控件組群設(shè)置的,則焦點(diǎn)自動(dòng)落在第一個(gè)is_tab_stop屬性為true的控件上。 相關(guān)的控件有:button、edit_box、image、list_box、popup_list、radio_button、slider、toggle。 默認(rèn)值:無29. multiple_select 若該屬性的值為true,允許在列表中選擇多個(gè)選項(xiàng)。 相關(guān)的控件有:list_box。 默認(rèn)值:false56凌云書屋30. password_char 確定用于屏蔽用戶

56、輸入的字符,即用該字符代替實(shí)際輸入的字符顯示在編輯框內(nèi),達(dá)到為輸入內(nèi)容保密的目的。 相關(guān)的控件有:edit_box 默認(rèn)值:無31. small_increment 確定滑動(dòng)條最小增量的整數(shù)值,取值范圍在min_value和max_value之間。 相關(guān)的控件有:slider 默認(rèn)值:整個(gè)范圍的1/100。32. tabs 確定列表框或下拉列表框內(nèi)的制表符t停止的位置(字符個(gè)數(shù))。 相關(guān)的控件有:list_box、popup_list 默認(rèn)值:無57凌云書屋33. tab_truncate 若該屬性的值為true,超出tabs屬性指定的字符被截掉(從第tabs個(gè)字符起被截掉)。 相關(guān)的控件有:

57、list_box、popup_list 默認(rèn)值:false34. value 控件初始狀態(tài)時(shí)的值。值的含義由控件類型所決定。例如,對(duì)話框的value可以作為標(biāo)題,編輯框的value作為它的初始值,互鎖按鈕或切換開關(guān)的value為1則表示處于打開的狀態(tài),列表或下拉列表的value確定了初始被選中的狀態(tài)。該屬性的值可通過AutoLISP程序被訪問、設(shè)置或修改。 相關(guān)的控件有:dialog、edit_box、image、list_box、popup_list、radio_button、slider、text、toggle。 默認(rèn)值:無58凌云書屋35. width 確定控件的最小寬度,數(shù)值類型是整數(shù)

58、或?qū)崝?shù)型。寬度單位為大小寫字符的平均寬度。如果屬性fixed_width的值為ture,width是控件的實(shí)際寬度,否則,在自動(dòng)布局時(shí),控件的實(shí)際寬度會(huì)超出該值。通常,不需特別指定該值,系統(tǒng)能自動(dòng)采用合適的數(shù)值(圖像及圖像按鈕除外)。 相關(guān)的控件有:全部控件。 默認(rèn)值:無59凌云書屋12.4 對(duì)話框設(shè)計(jì)的原則與規(guī)范 設(shè)計(jì)一個(gè)對(duì)話框除了考慮它的功能外,還應(yīng)該考慮它的外觀和是否便于操作,需要遵循一定的設(shè)計(jì)準(zhǔn)則。12.4.1 一般原則1. 美觀 對(duì)話框的外觀是非常重要的。雜亂無章的對(duì)話框會(huì)使操作人員難以操作。因此,必須從用戶的觀點(diǎn)出發(fā),設(shè)計(jì)既美觀又實(shí)用的對(duì)話框。2. 便于操作 用戶關(guān)心的是控件的位置

59、和使用是否便于操作。經(jīng)常用到的控件,應(yīng)盡可能安排在較為突出的位置。相關(guān)數(shù)據(jù)的控件,例如點(diǎn)的X、Y、Z坐標(biāo),應(yīng)盡量位于相鄰的位置。3. 語言文字 盡管對(duì)話框可采用圖形界面,但大部分的信息還是需要文字描述的,如對(duì)話框的標(biāo)題,按鈕的標(biāo)簽等。因此文字說明既要準(zhǔn)確,又要便于理解。 60凌云書屋4. 控件設(shè)計(jì)一致性 對(duì)話框的樣式、風(fēng)格不僅在具體的應(yīng)用程序內(nèi)部保持一致,而且應(yīng)該與相關(guān)的應(yīng)用程序保持一致,應(yīng)盡量與AutoCAD系統(tǒng)的對(duì)話框風(fēng)格一致,以便操作人員容易掌握。圖12-26插入圖塊對(duì)話框5. 便于操作控制 對(duì)話框相對(duì)于命令行的優(yōu)點(diǎn)是操作順序不受限制,例如圖12-26所示插入圖塊的對(duì)話框,圖塊的名字、插

60、入基點(diǎn)、比例、旋轉(zhuǎn)角度的輸入順序是隨意的。但有些數(shù)據(jù)存在著一定的制約關(guān)系,例如圖塊的插入基點(diǎn)、比例、旋轉(zhuǎn)角既可以用鼠標(biāo)在屏幕上確定,也可以在相應(yīng)的編輯框輸入數(shù)據(jù),但不需要同時(shí)采用這兩種方式。利用切換開關(guān)的狀態(tài),即可很好地解決這個(gè)問題。若打開切換開關(guān),相應(yīng)的編輯框被禁用(變灰),就只能采用通過鼠標(biāo)在屏幕上確定的方法。61凌云書屋 若嵌套式地打開多個(gè)對(duì)話框,應(yīng)采用層疊方式,保留已打開的對(duì)話框,且最后打開的對(duì)話框位于最上層。這樣便于了解這些對(duì)話框之間的關(guān)聯(lián)狀況,也表明每個(gè)對(duì)話框來自何處,歸于何處。6. 實(shí)時(shí)反饋 必須確保操作人員實(shí)時(shí)看到施加到對(duì)話框上的每一步操作,例如數(shù)據(jù)更新、顏色改變。當(dāng)某一選擇排

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論