對話框設計技術_第1頁
對話框設計技術_第2頁
對話框設計技術_第3頁
對話框設計技術_第4頁
對話框設計技術_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

對話框設計技術第一頁,共五十七頁,編輯于2023年,星期日6.1對話框的組成對話框的特點:對話框是用對話框控制語言DCL(dialogcontrollanguage)編寫的ASCII文件定義的。使用DCL描述對話框的組成構件、構件布局形式和構件的初始狀態(tài),形成一個對話框定義文件(擴展名為DCL)。對話框的設計是以約束條件為基礎的,框的尺寸及布局均遵循統(tǒng)一規(guī)則,用戶不需指定每一部分尺寸大小及定位關系,系統(tǒng)自動進行布置。一個對話框由位于其中的構件組成,構件(tile)就是構成對話框的部件。這些構件按其功能可以分為六類。第二頁,共五十七頁,編輯于2023年,星期日表構件的類型及其相應的構件類型組成構件預定義動作構件button,dialog,editbox,imagebutton,listbox,popuplist,radiobutton,slide,toggle構件組column,boxedcolumn,row,boxedrow,radiocolumn,boxedradiocolumn,radiorow,boxedradiorow修飾和說明列image,text,spacer正文聚合textpart,concatenation,paragraph對話框退出按鈕ok,okandcancel,okcancelhelp,okcanelhelpinformation出錯構件errortile,okcancelhelperrortile下表按構件的字母順序列出了各類構件。表中各類預定義構件定義在\support\base.dcl文件中。第三頁,共五十七頁,編輯于2023年,星期日1.預定義的有效動作構件在構件組成中相當一部分構件的作用是供操作人員作出一定的決定并產生相應的操作,稱為動作構件。(1)按鈕(button)(2)編輯框(edit_box)(3)圖象按鈕(image_button)(4)列表框(list_box)(5)彈出表(popup_list)(6)單選按鈕(radio_button)(7)滾動條(slider)(8)切換開關(toggle)第四頁,共五十七頁,編輯于2023年,星期日(1)按鈕(button)

按鈕是一種類似下壓鍵的有效構件,其標號(label)指出按鈕內出現(xiàn)的提示文本,適用于用戶立即產生可視的操作,如退出對話框、進入子對話框及其它特定操作。三個常用按鈕功能及產生的相應操作:OK,Cancel,Help。若要創(chuàng)建與OK相應的構件,該構件的關鍵字應為“accept”,并將其屬性is_default設定為真(True)。

(2)編輯框(edit_box)

編輯框用于輸入或編輯一行文字,其提示標號(label)顯示在該框左邊,當輸入文本比編輯框長度長時,文本能自動水平向左滾動。

(3)圖象按鈕(image_button)

圖象按鈕是一種顯示圖象而不是文字的按鈕,也稱icon,pictrue或graph;按鈕上的圖象由AutoLISP或ADS程序驅動。AutoCAD中SETTING菜單下PointStyle所彈出的對話框中包含了與點類型相對應的圖象按鈕應用實例。第五頁,共五十七頁,編輯于2023年,星期日(4)列表框(list_box)

該構件包含若干行可供選擇的文字所組成的表,供用戶單擊選擇。通常表長是變的,當使用自動布局的對話框占用較大空間時,常將該構件制作成固定長度的列表框。用戶選擇表中的某一行時,該行會以醒目方式顯示,當列表框包含的文本行數(shù)超出列表框縱向長度時,列表框右邊的滾動條會自動激活,可拖動滾動條光標或通過按壓箭頭滾動顯示文本信息。MULTIPLE_SELECT屬性決定是否允許選擇列表框中多行文本;標識(label)是顯示在列表框上方的文字說明。第六頁,共五十七頁,編輯于2023年,星期日(5)彈出表(popup_list)

彈出表結合了編輯框和列表框兩個概念,初始狀態(tài)包括一行文字和一個向下的箭頭,單擊箭頭會彈出包含全部文本的列表,選中后恢復到關閉狀態(tài),并在編輯框中顯示出已選中的列表項內容。第七頁,共五十七頁,編輯于2023年,星期日(6)單選按鈕(radio_button)

單選按鈕為一組按鈕,這些按鈕由radio_column或radio_row組成,具有多選一的功能;該構件適用從一個表中選一項,而表中的各項彼此又是互斥的場合。第八頁,共五十七頁,編輯于2023年,星期日(7)滾動條(slider)

滾動條是一種直觀控制數(shù)值的構件,用戶可左右(上下)拖動滾動條指示器來獲取相應值,返回值是以字符串方式表示的-32768至32767之間的一個整數(shù)。應用程序可根據(jù)需要設置最大值或最小值,如圖為滾動條的應用示例。第九頁,共五十七頁,編輯于2023年,星期日(8)切換開關(toggle)

切換開關控制邏輯布爾值(“0”或“1”)。功能與radio_button相似。但toggle不和其它開關發(fā)生聯(lián)系,因此同一行(或列)的toggle可以同時為“true”或“false”。如圖中目標捕捉方式就是通過切換開關控件設定的。第十頁,共五十七頁,編輯于2023年,星期日2.構件組群彼此功能相關的構件組合在一起可以使對話框的布局更加合理、美觀,通過行、列等組合方式可使原來獨立的構件自動對齊。操作人員不能選擇組群,只能選擇組群中的有效動作構件進行操作,base.dcl文件中定義了幾種標準組合方式供用戶使用。

(1)列(column)、行(row)

列(行)是按照構件在DCL文件(對話框控制語言)中的順序垂直(水平)列出的構件集合,可以包括別的構件組群和有效構件。

(2)有界列(boxed_column)、有界行(boxed_row)

該構件與列(行)功能相同,只不過有界列(行)四周有邊框并可以帶標識(單純的列(行)不能帶標識)。

(3)單選列(radio_column)、單選行(radio_row)

單選列(行)與其它組合方式不同,該構件應包括一定數(shù)目的單選鈕,各單選鈕之間互相排斥,其中只能有一個單選鈕為“true”。

(4)有界單選列(boxed_radio_column)、有界單選行(boxed_radio_row)

有界單選列(行)概念與單選列(行)相同,但其四周可以有邊框和標識。第十一頁,共五十七頁,編輯于2023年,星期日3.裝飾性和信息性構件裝飾性和信息性構件無任何操作,也不能被選擇,主要用于顯示信息、加強視覺效果或幫助對話框布局。

(1)圖象(image)

圖象構件是在一個矩形區(qū)域內顯示向量、色彩填充或顯示幻燈等圖形的構件。如EntileSelectSetting對話框中的目標選擇框是顯示向量;Grips中的顏色選擇是色彩填充;Points則是各種點標記的幻燈。

(2)文本(text)

文本構件通常用于標題或信息提示,大多數(shù)的報警框均包含該類構件。

(3)空白襯框(spacer)

此構件用于布局對所需的空間進行調整,它會影響鄰接構件的相互位置及尺寸布局,由于PDB具有自動處理空白的能力,故通常不使用,僅在最終局部調整布局時才使用該構件。第十二頁,共五十七頁,編輯于2023年,星期日4.標準退出按鈕

DCL文件中定義了四個常用的標準退出按鈕,即缺省按鈕“OK”,廢棄退出按鈕“Cancel”、求助對話框彈出按鈕“Help…”和附加信息對話框彈出按鈕“Info…”,如圖所示。它們的標準原型由BASE.DCL文件定義如下:ok_button:retirement_button{label="OK";

key="accept";

is_default=true;

}cancel_button:retirement_button{label="Cancel";

key="cancel";

is_cancel=true;

}help_button:retirement_button{label=“Help…”;

key="help";

mnemonic="H";

}info_button:retirement_button{label="Info…";

key="info";

mnemonic="I";

}第十三頁,共五十七頁,編輯于2023年,星期日

用戶在設計對話框時,應盡量選用標準退出組件,如果不能滿足需要,可由標準退出按鈕進行組合,生成對話框退出組件。下面介紹的四種標準退出組件,用戶可以在設計對話框時直接引用。它們是“ok_only”、“ok_cancel”、“ok_cancel_help”和“ok_cancel_help_info”。通過下面的介紹,可以了解利用退出按鈕定義退出組件的方法。(1)退出組件ok_only的定義如下:

ok_only:column{fixed_width=true;

alignment=centered;:ok_button{is_cancel=true;

}}(2)退出組件ok_cancel的定義如下:

ok_cancel:column{

:row{fixed_width=true;

alignment=centered;

ok_button;:spacer{width=2;}cancel_button;

}}第十四頁,共五十七頁,編輯于2023年,星期日(3)退出組件ok_cancel_help的定義如下:ok_cancel_help:column{

:row{fixed_width=true;

alignment=centered;

ok_button;:spacer{width=2;}cancel_button;:spacer{width=2;}help_button;

}}(4)退出組件ok_cancel_help_info的定義如下:

ok_cancel_help_info:column{

:row{fixed_width=true;

alignment=centered;

ok_button;:spacer{width=2;}cancel_button;:spacer{width=2;}help_button;:spacer{width=2;}info_button;

}}第十五頁,共五十七頁,編輯于2023年,星期日6.2對話框構件的屬性

屬性(attribute)用來控制對話框構件的設置,如同編程語言中的變量,包含名字和值兩部分內容。屬性的數(shù)據(jù)類型必須是下列四種數(shù)據(jù)類型之一。

(1)整型:通常表示距離,如構件高度和寬度,用字符高度和寬度單位的整數(shù)倍表示。

(2)實數(shù)型:也可表示距離屬性,注意實數(shù)的小數(shù)點前一定要有數(shù)字,例如0.1,不能表示為.1。

(3)字符串:由雙括號括起的文本或轉義符,下表給出了DCL識別的轉義符意義。轉義符字符意義\"引號\\反向斜杠\t水平制表符\n換行符(4)保留字:DCL語言預定義的具有特殊意義的字符串,需用小寫字母表示,并對字母的大小寫敏感。預定義屬性是已經定義了的、在對話框設計過程中可直接使用的屬性。下表給出了部分預定義屬性的分類。第十六頁,共五十七頁,編輯于2023年,星期日類屬性名相關構件說明關鍵字和值屬性Key所有構件構件名稱Value文本、激活的構件(除去按鈕和圖象按鈕)構件的初始值布局與尺寸屬性List列表、彈出表顯示表中的初始值max_value滾動條滾動條最大值min_value滾動條滾動條最小值Alignment全部構件組群中水平、垂直方向對齊方式aspect_ratio圖象、圖象按鈕圖象長寬比Color圖象、圖象按鈕圖象背景色edit_limit編輯框用戶可輸入的最大字符串長度edit_width編輯框、彈出表構件中編輯部分的寬度Height全部構件構件高度Width全部構件構件高度布局與尺寸觀感屬性is_bold文本是否用黑體方式Label單選行、單選列、有界行、有界列、有界單選行、有界單選列、對話框、列表框、彈出表、單選按鈕、文本、切換開關構件的標記動作響應屬性Action全部構件AutoLISP操作表達式allow_accept編輯框、圖象按鈕、列表框當選中該構件時,激活is_default按鈕is_default按鈕接受按鈕,當輸入Enter按鈕時有效表預定義的構件屬性分類第十七頁,共五十七頁,編輯于2023年,星期日1.關鍵字和值屬性關鍵字和值屬性是對話框設計中最重要的屬性,它們提供了約束構件功能的數(shù)值。

(1)關鍵字(key)

關鍵字是一個包含在引號內的字符串。用戶指定一個AutoLISP或ADS程序引用此特定構件的ASCII碼,在一特定的對話框中,每個key值都是唯一的。

(2)值(value)

一個用于初始化構件的字符串,其值的含義由構件類型所決定。該屬性值的變化不會影響到構件的尺寸和位置,在構件運行過程中,該值可通過用戶輸入或通過調用set_tile函數(shù)來改變,除按鈕(包括圖象按鈕)以外的動作構件(如:text,list等)均需指定構件的初始化值。第十八頁,共五十七頁,編輯于2023年,星期日2.布局屬性和尺寸屬性此類屬性值用于構件的布局和形狀,下面對相應的屬性作出說明。(1)寬度(width)和高度(height)該值表示構件的最小寬度和高度,數(shù)值類型是整數(shù)或實數(shù)型。(2)對齊屬性(alignment)控制構件在組群空間內垂直或水平方向的定位方式。(3)子控件對齊屬性(children_alignment)與alignment功能基本相同,只不過它只確定所有子組群內部的定位方式,構件自身的alignment屬性優(yōu)先于該值。(4)固定高度(fixed_height)和固定寬度(fixed_width)當這二個屬性值為true時,布局時將保持構件的大小固定不變,默認值為false。(5)子控件固定高度(chileren_fixed_height)和子控件固定寬度(children_fixed_width)功能與(4)相同,不過它是構件組群的屬性,只作用于組群內所有的構件并作為缺省值,默認值為false,優(yōu)先級較(4)的屬性低。第十九頁,共五十七頁,編輯于2023年,星期日3.功能屬性功能屬性定義了動作構件的用途和操作。因為修飾和說明構件是非動作構件,故不需要功能屬性。(1)action

該屬性包含一個AutoLISP有效表達式組成的字符串,當選中構件時,執(zhí)行相應的AutoLISP表達式操作,AutoCAD提供AutoLISP和ADS驅動程序來設定構件的動作。注意不能用C語言指定action屬性。(2)is_enabled

該屬性設置構件的有效性,默認值為true。當is_enabled屬性為false時,構件無效(變灰),只可見而不可選。(3)is_tab_stop

該屬性控制一個部件是否可以用制表鍵(Tab)選擇聚焦,默認值為true。(4)mnemonic

該屬性定義了快速聚焦于相應構件的熱鍵(即助記符),助記符通常是構件標識中帶下劃線的字母。助記符須符合下列規(guī)則:該屬性值必須是ASCII的單個字符,如“A”。同時該字符必須是構件標識中的字符。助記符在DCL文件中必須用大寫字母。第二十頁,共五十七頁,編輯于2023年,星期日4.預定義構件屬性(1)獨立構件1)按鈕(button)

包含三個屬性:label,is_cancel,is_default。

label是一個由引號括起來的字符串,出現(xiàn)的按鈕框內的文本標記(無缺省)。

is_cancel可為true或false。若為true,則所選中的按鈕與按取消鍵(如ESC或CTRL+C)作用相同;對話框中只能有一個按鈕的is_cancel為true,且該按鈕應在操作回調動作完成后終止對話框。

is_default值也可為true或false。若為true,其作用與按接受鍵(如Enter)相同;通常該按鈕應以一種與眾不同的方式顯示。對話框中只能有一個按鈕可置is_default為真(true)?!鐖D所示對話框中的按鈕定義如下::button{key="accept";

label="按此按鈕";

is_default=true;

}第二十一頁,共五十七頁,編輯于2023年,星期日2)對話框(Dialog)

包含三個屬性:label,value,initial_focus。

label顯示對話框的標題文本,缺省為空。

value與label一樣,值屬性將字符串當作一個可選擇的對話框標題顯示,該值在布局時不作檢查,因此應確定對話框有足夠的寬度來滿足該值的要求。使用set_tile函數(shù)可以動態(tài)地改變對話框的標題。

initial_focus指明對話框內初始聚焦的構件。※例如::dialog{

label="對話框示例";……}第二十二頁,共五十七頁,編輯于2023年,星期日3)編輯框(Edit_box)

包含五個屬性:label,allow_accept,edit_width,edit_limit,value。

label為顯示在編輯框左邊的標識文本。

allow_accept是邏輯型值(true或false)。當該值為true時,用戶按下接受鍵(如Enter或雙擊鼠標等),就如同激活了缺省按鈕(is_default為true的按鈕)。

edit_width控制編輯框的寬度,該值缺省值為0時,寬度不固定,編輯框可根據(jù)需要自動擴充到整個可用空間,當該值為非零值時,該框右對齊,控制編輯框寬度,并在標識和編輯框之間保留一個空格。

edit_limit為編輯框中允許輸入的最多字符數(shù),默認為132個,最大可達256個字符。

value為編輯框中的初始文本字符串?!鐖D所示對話框中的編輯框定義如下::edit_box{

key="test_text";label="編輯框";value="0";edit_limit=12;//限制編輯框最大的輸入字數(shù)

edit_width=25;//輸入?yún)^(qū)寬度

}第二十三頁,共五十七頁,編輯于2023年,星期日4)列表框(List_box)

包含六個屬性:label,allow_accept,list,multiple_select,tabs,value。

label為顯示在列表框上方的標識字符串。

allow_accept意義與Edit_box中allow_accept屬性相同。

list為表中顯示表項內容(字符串),行間用“\n”分隔,行內用制表符“\t”分隔。

multiple_select為是否允許一次選擇表中多個選項的控制邏輯值(true或false),缺省值為false。

tabs包含整數(shù)或實數(shù),并由空格分開的字符串,每一個數(shù)均表示相應的制表站(tabs)所處的位置。以確定制表符“\t”的文本列的位置。

value是初始選擇的列表項的索引值,如value=“02”,分別表示初始選中第1,3行,該值缺省為空“”?!鐖D所示對話框的列表框定義如下::list_box{

key="test_list_box";

multiple_select=true;//顯示選單中能否多選

label="列表框應用";list="軸類零件\n盤蓋類零件\n叉件類零件";}第二十四頁,共五十七頁,編輯于2023年,星期日5)彈出表(Popup_list)

包含五個屬性:label,edit_width,list,tabs,value。

label為顯示在彈出表左邊的標識字符串。

edit_width為編輯框或彈出表的寬度,與edit_box作用相同;缺省或為零時,該構件寬度可擴展到整個可用空間。

list、tabs、value與list_box相應屬性意義作用相同。

6)圖象按鈕(Image_button)

包含三個屬性:allow_accept,aspect_ratio,color。

allow_accep是一邏輯型值(true或false)。當為true時,選中該構件等同于同時選中缺省按鈕;缺省為false。

aspect_ratio為圖象的長寬比,若為零,則構件即為圖象的原有大小。

color為圖象的背景色(填充色)?!鐖D所示對話框中的彈出表定義如下::popup_list{key="test_popup_box";

edit_width=20;

label="選擇零件";

list="軸類零件\n盤蓋類零件\n叉架類零件";

}第二十五頁,共五十七頁,編輯于2023年,星期日7)單選按鈕(radio_button)

包含二個屬性:label,value。

label為單選按鈕右邊的標記文本。

value為單選鈕是否被選中的標志:“1”表示被選中;“0”表示不選中。當用戶將多個單選鈕置為“1”時,只有最后一個單選鈕被選中。

8)單選列組(radio_column)、有界單選列組(boxed_radio_column)

包含二個屬性:value,label(只有boxed_radio_column有此屬性)。

value為當前被選中(value=“1”)的關鍵字字符串。

label為顯示在boxed_radio_column左上方的標記文本。

9)單選行組(radio_row)、有界單選行組(boxed_radio_row)

包含二個屬性:value,label(只有boxed_radio_row有此屬性)。

value為當前被選中(value=“1”)的關鍵字字符串。

label為顯示在boxed_radio_row左上方的標記文本?!纾?boxed_radio_column{label="選擇零件";:radio_button{label="軸類零件";value="1";}:radio_button{label="盤蓋類零件";}:radio_button{label="叉件類零件";}}第二十六頁,共五十七頁,編輯于2023年,星期日10)滾動條(slide)

包含六個屬性:big_increment,small_increment,layout,max_value,min_value,value。

big_increment,small_increment控制滾動條增量使用值的整數(shù),取值范圍在min_value和max_value之間。其中big_increment的缺省值是整個范圍的1/10;small_increment的缺省值是整個范圍的1/100。

layout為滾動條的放置方向(水平或垂直),缺省為水平方向。

max_value,min_value是-32768~32767之間的整數(shù),表示滾動條返回值的范圍。缺省min_value為0;缺省max_value為10000。

value為包含當前滾動條數(shù)值(整數(shù))字符串?!纾?slider{ key="slider_abc";min_value=1; //滑動條最小值

max_value=26; //滑動條最大值

width=30; //滑動條寬度

height=1; small_increment=1; //滑動條外箭頭位移量

big_increment=1; //滑動條內位移量

}第二十七頁,共五十七頁,編輯于2023年,星期日(2)修飾及說明構件

1)文本(text)

包含三個屬性:label,value,is_bold。

label為顯示的文本內容。

value如label一樣也表示文本構件的顯示內容,但它對構件的布局不發(fā)生影響。若試圖將文本信息靜態(tài)表示,直接在label中指定內容即可,若試圖在運行過程改變這些信息,可用value指定它,并用一足夠長的width來包含將來可能賦給value的字符串長度;一旦布局完成,該文本的尺寸就不能改變,當發(fā)生大于限定寬度的字符串對value賦值時,顯示文本將被自動截斷。

is_bold為一邏輯值(true或false),控制是否以黑體字顯示,缺省為false?!纾?text{label="A←英文字→Z";}第二十八頁,共五十七頁,編輯于2023年,星期日2)圖象(image)

包含二個屬性:color,aspect_radio。有關的屬性與Image_button說明相同。

3)空白襯框(spacer)

只具有“布局屬性和尺寸屬性”。

※例如:

:image_button{key="test_image_button";aspect_ratio=1.5;//圖象高度/寬度比值

color=1;alignment=right;}(3)聚合構件組群屬性列(column)、行(row)

此二構件只具有“布局屬性和尺寸屬性”。有界列(boxed_column)、有界行(boxed_row)

屬性label表示顯示在該構件左上方的標記文本。其余屬性均為“布局屬性和尺寸屬性”。第二十九頁,共五十七頁,編輯于2023年,星期日6.3對話框控制語言和設計原則

在AutoCAD環(huán)境下運行的面向對話框的應用程序由兩部分組成:①DCL對話框文件:用對話框控制語言(DCL)來描述對話框的組成構件、構件的布局形式和構件的初始狀態(tài),形成一個對話框定義文件。②LISP驅動程序:用擴充了對話框操作語句的AutoLISP語言編寫對話框及其構件的驅動程序,負責對話框定義文件的裝入、對話框的彈出、隱藏和退出,以及當用戶激活構件時每個構件所產生的動作,建立一個對話框驅動文件(.LSP)。第三十頁,共五十七頁,編輯于2023年,星期日1.DCL文件結構對話框是由構件組成的樹狀結構,對話框控制語言DCL是描述樹的ASCII文本文件(擴展名為.DCL)。文件中可以包括一個或多個對話框的描述及其構件的定義,也可以包含來自其它DCL文件的構件定義。BASE.dcl文件是標準對話框,也是用戶定義對話框的標準零部件庫或工具箱。對話框文件ACAD.dcl包含了AutoCAD所使用的大部分標準對話框定義。DCL文件可以由以下三個部分組成:(1)引用其它DCL文件。格式為@include“user.dcl”用戶應用程序不能直接引用ACAD.DCL文件,如果用戶要定義類似的對話框,可用文本編輯程序把其中的相應部分剪貼到自己的DCL文件中。第三十一頁,共五十七頁,編輯于2023年,星期日(2)對話框的定義。格式為

dlgname:dialog{

對話框屬性定義語句原型和子組件引用語句

}

其中,對話框的名字dlgname是必須指定的,可以由字母數(shù)字下劃線組成,并由字母開頭。字母一般全部使用小寫,并不應與系統(tǒng)定義的用@include語句嵌入的其它DCL文件以及當前DCL文件定義的子組件和對話框重名。(3)構件的定義。格式為

tilename:item{attribute1=value1;

attribute2=value2;

…;

}

其中,tilename為構件名稱,item表示構件原型名稱,attribute是對構件的屬性賦值。構件除了直接定義外,還可通過引用的方式來繼承,新構件可根據(jù)需要修改或繼承原先的屬性。第三十二頁,共五十七頁,編輯于2023年,星期日例如,標準構件button的內部定義為:

button:tile{fixed_height=true;

is_tab_stop=true;

}

而BASE.DCL中default_button引用button的定義如下:

default_button:button{is_default=true;

}

例中default_button不僅繼承了button的fixed_height及is_tab_stop屬性外,又加入了新的屬性is_default。注釋方式有兩種:第一種注釋方式為:/*注釋內容*/

系統(tǒng)把注釋起始符“/*”到結束符“*/”的全部內容看作注釋;

第二種注釋方式為://注釋內容系統(tǒng)把從“//”開始到本行結束的全部內容看作注釋。這種注釋方式比第一種方便,僅僅用于單行注釋。第三十三頁,共五十七頁,編輯于2023年,星期日2.對話框設計的基本原則(1)一般原則1)美觀2)便于操作3)語言文字準確4)控件設計一致性5)便于操作控制6)實時反饋7)寬容性(errtile)8)提供幫助9)測試(2)通用規(guī)范1)布局2)對話框的尺寸和放置位置3)構件禁止4)嵌套對話框5)隱藏對話框6)缺省值7)鍵盤輸入8)顏色9)標準化(3)預定義構件設計原則1)按鈕2)編輯框3)列表框4)彈出表5)圖象按鈕和圖象構件6)單選按鈕及單選行或單選列7)滾動條8)組群框9)文本10)切換開關(也稱checkbox)第三十四頁,共五十七頁,編輯于2023年,星期日3.對話框實例例:設計如圖所示的對話框,用來輸入繪制一個圓環(huán)所需要的參數(shù):圓環(huán)內徑、外徑和圓心坐標。當用戶按“OK”按鈕后,退出對話框,調用AutoCAD內部命令DONUT繪出圓環(huán)。首先用對話框控制語言在對話框定義文件sample.dcl中描述對話框的組成和布局,其內容如下:

第三十五頁,共五十七頁,編輯于2023年,星期日練習:1.繪出在AutoCAD編輯狀態(tài)中下述文件在屏幕上顯示的對話框內容test1:dialog{ label="輸入圓心坐標和直徑"; :edit_box{ value="0.00"; key="x"; label="X:"; } :edit_box{ value="0.00"; key="y"; label="Y:"; } :edit_box{ value="0.00"; key="z"; label="Z:"; } :edit_box{ value="0.00"; key="d"; label="D:"; } ok_cancel; }第三十六頁,共五十七頁,編輯于2023年,星期日2.在AotuCAD編輯狀態(tài)中,在屏幕上顯示的對話框內容如下圖,編寫dcl文件。test2:dialog{label="熱處理";:list_box{key="test_list_box";label="熱處理方法";list="淬火\n調質\n回火\n正火\n退火";}ok_cancel;}第三十七頁,共五十七頁,編輯于2023年,星期日3.在AotuCAD編輯狀態(tài)中,在屏幕上顯示的對話框內容如下圖,編寫dcl文件。test:dialog{label="選擇零件";:row{:list_box{label="選擇零件";width=15;list="軸類零件\n盤蓋類零件\n叉件類零件";}:boxed_radio_column{label="數(shù)量";:radio_button{label="10";}:radio_button{label="20";value="1";}:radio_button{label="30";}:edit_box{label="設計者";value="工程師";}}}spacer_1;ok_cancel;}第三十八頁,共五十七頁,編輯于2023年,星期日6.4對話框驅動程序設計

AutoCAD的對話框驅動程序可由AutoLISP及ADS二種方式完成,為了便于學習和理解驅動程序的主要構造過程和程序內容,下面介紹AutoLISP驅動程序以及對話框處理函數(shù)。

1.驅動程序的結構如圖所示給出了對話框驅動程序的常規(guī)流程。第三十九頁,共五十七頁,編輯于2023年,星期日圖示對話框的驅動程序通常應包含以下內容:(1)加載對話框DCL文件(load_dialogfilename)

使用對話框的第一件事就是通過load_dialog函數(shù)載入DCL文件(可省略擴展名.dcl),若加載成功則返回一個大于零的整數(shù)值,通常該值應由一內存變量保存以便將來被new_dialog和unload_dialog函數(shù)所調用。同時當檢測到該值不大于零時,可以及時地顯示出錯信息并返回系統(tǒng)。(2)顯示特定的對話框(new_dialogdialog_nameload_dcl_id)

該函數(shù)中dialog_name指DCL文件中所包含的某一對話框名稱(不是label),不是DCL文件名(一個DCL文件可以同時定義多個對話框);load_dcl_id是(load_dialog)的返回值。當對話框顯示成功時,該函數(shù)返回true,否則返回false。第四十頁,共五十七頁,編輯于2023年,星期日(3)設置必要的構件初始值

new_dialog成功后,系統(tǒng)自動根據(jù)DCL文件中的內容對構件進行初始化;此時用戶也可根據(jù)自己的需要利用程序對構件作相應的初始化設置:如函數(shù)set_tile和mode_tile可改變構件的初始值及構件的初始狀態(tài);函數(shù)start_list,add_list,endlist可以變更列表框表項內容;函數(shù)start_image,vector_image,fill_image,slide_image和end_image均用于初始化圖象構件的顯示內容。同時用戶可以通過函數(shù)action_tile對構件設置動作和回調函數(shù),也可通過調用client_data_tile將應用程序中的特定數(shù)據(jù)與對話框中某些組成部分相聯(lián)系。(4)激活對話框(start_dialog)

此函數(shù)將控制權交給對話框,并可開始交互操作。此時對話框中的構件均成為可選擇構件(用mode_tile“禁止”的構件除外),并始終處于活動狀態(tài);直至執(zhí)行done_dialog關閉對話框為止,對話框選中的構件會自動執(zhí)行由action_tile設定的動作。第四十一頁,共五十七頁,編輯于2023年,星期日(5)處理用戶操作激活對話框后,根據(jù)用戶的交互動作,應同時執(zhí)行相應的動作函數(shù),此過程被稱為回調(callback)。通常用戶須使用get_tile,get_attr函數(shù)返回構件的value及相應的屬性值,再通過set_tile,mode_tile進行相應的處理。(6)卸載對話框文件(unload_dialog)

對話框完成操作并且不再使用時,應從內存中釋放對話框文件。這是對話框操作的最后一個步驟,注意:若DCL文件中有多個對話框(dialog)定義,其中有的對話框仍在使用時,不應卸載DCL文件。第四十二頁,共五十七頁,編輯于2023年,星期日2.對話框回調用戶選中某一構件,就開始了回調過程,通常用action_tile完成相應的動作。為了在回調響應過程中及時獲取用戶的操作信息,常需通過以下六個變量來獲取回調數(shù)據(jù):

1)$key:被選中構件的關鍵字。

2)$value:被選中構件的當前值。

3)$data:初始化過程中所設置的相關數(shù)據(jù)。

4)$reason:指明用戶操作細節(jié),常用于處理編輯框、列表框、圖象和滑塊。對不同的構件其值也有不同的含義:

=1:用戶選中了該構件。

=2:用戶退出編輯框,但尚未作最后決定,此時聚焦已在其它的構件上,但編輯框的內容仍有可能再次被修改,因此,此時不能將編輯框中的內容存為永久性全局變量。

=3:用戶已改變滑塊值,但尚未作最后決定。此時也不宜將滑塊的值保存為永久性全局變量。

=4:用戶在該構件(列表框、圖象按鈕)上連擊,連擊的意義由用戶設定。

5)$x:返回圖象構件中的x坐標值。該值以圖象內部坐標系為參照系,介于0~dimx_tile_1之間。

6)$y:返回圖象構件中的y坐標值。該值以圖象內部坐標系為參照系,介于0~dimy_tile_1之間。第四十三頁,共五十七頁,編輯于2023年,星期日

(1)接受鍵的回調對話框通常包含二組變量:隨構件回調而變化的局部變量以及對應于對話框最終構件取值的全局變量。當用戶選擇接受鍵以后,應用程序需調用一個函數(shù)將局部變量永久性地賦給相應的全局變量。接受鍵的另一個重要調用函數(shù)是(done_dialog1)。注意此時的狀態(tài)值一定為1。接受鍵的回調函數(shù)可按以下二種方式進行:

(action_tile"accept""(set_variables)(done_dialog1)")(action_tile"cancel""(done_dialog0)")

(action_tile"accept""(done_dialog1)")(action_tile"cancel""(done_dialog0)")(setqresult(start_dialog))(if(=1result)(set_varibles))

式中set_varibles是用戶自定義的將局部變量賦給永久性全局變量的函數(shù)。第四十四頁,共五十七頁,編輯于2023年,星期日(2)對話框活動期間禁止使用的AutoLISP函數(shù)1)AutoCAD中還包含許多由AutoLISP基本函數(shù)組成的復雜函數(shù)。2)在對話框活動期間要使用上述禁用函數(shù),應首先將對話框隱藏,完成操作后,再將對話框重新顯示。函數(shù)名禁止原因command,osnap不能使用命令行Entdel,Entmak,Entmod,Entsel,Entnpd,Nentsel因對話框中的所有操作均可能被取消,不能使用可改變圖形數(shù)據(jù)的函數(shù)Getangle,Getcorner,Getdist,Getint,Getkword,Getorient,Getpoint,Getreal,Getstring,Ssget,Graphscr,Grclear,Grdraw,Grread,Grtext,Grvecs,Menucmd,Prompt,Redraw,Textpage,Textscr這些函數(shù)須通過屏幕或命令行進行交互操作,均會影響到屏幕顯示對話框活動期間被禁止的AutoLISP函數(shù)第四十五頁,共五十七頁,編輯于2023年,星期日3.對話框特殊處理

(1)嵌套對話框,圖示為嵌套對話框常規(guī)流程圖?!鶠榱耸蛊聊槐3智逦?,嵌套層次應控制在三或四層之內。第四十六頁,共五十七頁,編輯于2023年,星期日(2)隱藏對話框對話框有效時,用戶只能對對話框操作而不能對圖形屏幕作交互操作,也不能進行命令行操作。(3)移動對話框系統(tǒng)可通過done_dialog返回對話框位置坐標(x,y),應用程序可將該點記錄供下一次new_dialog指明顯示位置。(4)設置顏色可通過調用acad_colordlg函數(shù)返回所選的顏色值供應用程序使用。(5)幫助對話框調用acad_helpdlg可調用acad幫助文件對話框,用戶可生成自己的幫助文件。第四十七頁,共五十七頁,編輯于2023年,星期日4.對話框驅動函數(shù)下面按函數(shù)功能對PDB軟件包中的函數(shù)進行分類介紹,包括函數(shù)的名稱、變元、功能及示例。為了便于說明,字符變量前用“c”引導,整數(shù)變量前用“i”引導,變量類型為表的用“1”引導。(1)打開、關閉DCL文件1)(load_dialogcDclfile)此函數(shù)載入一個DCL文件,該DCL文件可同時包含多個對話框定義,cDclfile為載入的DCL文件名(可省略擴展名dcl),函數(shù)返回一整數(shù)值(iDcl_id)供new_dialog或unload_dialog函數(shù)使用。例如:

(setqiDcl_id(load_dialog"示例.dcl"))

若返回值大于0,則表示載入成功;若小于0,則表示載入失敗。2)(unload_dialogiDcl_id)

該函數(shù)卸載一個與iDcl_id相關聯(lián)的dcl文件,其iDcl_id為load_dialog的返回值,不論成功與否,該函數(shù)返回值均為nil。例如:

(unload_dialogiDcl_id)第四十八頁,共五十七頁,編輯于2023年,星期日(2)打開、關閉對話框1)(new_dialogcDialog_name,iDcl_id[cAction_expression][1Screen_pt])

此函數(shù)顯示對話框,并初始化對話框構件,如缺省值或缺省操作。變元cDialog_name為字符串,指DCL文件中已定義的對話框名稱,iDcl_id是load_dialog函數(shù)的返回值;cAction_expression是一個字符串,可包含一個AutoLISP表達式作為缺省操作。lScreen_pt是一個二維表,指定對話框在屏幕中顯示的位置(x,y)。2)(start_dialog)

激活由new_dialog顯示對話框,在調用該函數(shù)之前,應完成對話框的初始化,該函數(shù)沒有變參,其返回值由done_dialog函數(shù)設定。3)(done_dialogiStatus)

該函數(shù)關閉對話框,變元iStatus指明關閉對話框的原因。該值將返回給start_dialog函數(shù)。第四十九頁,共五十七頁,編輯于2023年,星期日(3)初始化操作表達式或回調函數(shù)

(action_tilecKeycAction_expression)

此函數(shù)指定構件的相應動作。變元cKey為構件的關鍵字,cAction_expression為對構件初始動作表達式,同時,可對回調值進行相應的處理。例如:

(action_tile"accept""(set_varible)(done_dialog1)")(4)構件屬性處理

1)(mode_tilecKeyiMode)

設置關鍵字為cKey構件的狀態(tài),iMode表示的狀態(tài)碼如下:

0——啟動構件;1——禁止構件動作;

2——聚焦于該構件;3——選擇編輯框的內容;

4——變換圖象按鈕或圖象構件的顯示狀態(tài)。

2)(get_attrcKeycAttribute)

此函數(shù)返回DCL文件中關鍵字為cKey構件的相應屬性設定值。cAttribute表示需返回的屬性名稱。

3)(get_tilecKey)

此函數(shù)用于獲取由cKey指定的構件值,由于它能返回不是當前聚焦的構件值,較常見于回調函數(shù)的應用中。

4)(set_tilecKeycValue)

此函數(shù)用cValue的值轉換由cKey所指定的構件值。第五十頁,共五十七頁,編輯于2023年,星期日(5)建立列表框和彈出表1)(start_listcKeyiOperation[iIndex])

此函數(shù)打開關鍵字為cKey的表并進行由iOperation所指定的表項操作。1——編輯表項;2——增加表項;3——創(chuàng)建新表,若cKey指定的構件已有舊表,則舊表被刪除。iOperation缺省值為3,iIndex參數(shù)值指明編輯的表項缺省為0。2)(add_listcItem)

此函數(shù)根據(jù)start_list中的iOperation值不同而有不同功能:

iOperation=3:打開一個新表,并將cItem作為一個表項增加到新表中。

iOperation=1:用cItem內容替換由iIndex所指定的表項內容,若未能定iIndex值,則替換第一個表項的內容。

iOperation=2:在表的末端以cItem內容作為新增加的表項內容。3)(end_list)

結束當前表的處理。顯然,表操作中的創(chuàng)建表、編輯表項及增加表項均可通過start_list中的iOperation參數(shù)值不同而進行。第五十一頁,共五十七頁,編輯于2023年,星期日(6)建立圖象

1)(start_imagecKey)(end_image)start_image函數(shù)打開由cKey指定的圖象構件以便對其進行編輯操作(如fill_image,slide_image,vactor_image)。完成圖象構件的編輯操作后應調用end_image函數(shù)關閉圖象的編輯功能。

2)(vector_imagex1y1x2y2color)

該函數(shù)在當前已激活的圖象構件中,從始點(x1,y1)至終點(x2,x2)之間畫一矢量,坐標值為相對坐標,構件左上角為(0,0),右下角由構件尺寸確定,(dimx_tile)及(dimy_tile)可提供構件的寬度和高度尺寸,(x2,y2)的值不能超出構件的寬度和高度值。

3)(fill_imagex1y1x2y2color)

在當前激活的圖象中畫一個填充的矩形,矩形的二個對角坐標分別為第一個角點坐標(x1,y1)與第二個角點坐標(x2,y2)。

4)(slide_imagex1y1x2y2sldname)

該函數(shù)在當前激活圖象中顯示一個幻燈片,(x1,y1)對應于幻燈片的輸入點,(x2,y2)對應于該幻燈顯示后的對角點坐標。第五十二頁,共五十七頁,編輯于2023年,星期日(7)專用數(shù)據(jù)處理(client_data_tilecKeycClientdata)

把應用程序管理數(shù)據(jù)與cKey所指定的構件相聯(lián)系,當構件被選中時,自動將cClientdata數(shù)據(jù)保存在變量$data中。(8)相關的AutoLISP函數(shù)函數(shù)名說明(acad_colordlgcolornum,[flag])顯示setcolor對話框(acad_helpdlghelpfile[topic])顯示help對話框(acad_strsortlist)返回排序后的表(appendex

溫馨提示

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

評論

0/150

提交評論