[已解決]下拉式選單的預設值寫法---AutoLISP
2 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
[已解決]下拉式選單的預設值寫法---AutoLISP
(setq list0 '("S50" "S100" "S200" "S400" "S500" "S600" "S800" "S1000"))
(show_list "pop0" list0)
(set_tile "list0" (nth 1 list0))
各位大大好 我又來發問了
我想請問 在上列式子中 我在下拉式選單中 設定了s50~s1000
今天我在程式執行中 我想要有個預設值 也就是s100
那請問 我這樣寫對嗎
請各位大大指教
(show_list "pop0" list0)
(set_tile "list0" (nth 1 list0))
各位大大好 我又來發問了
我想請問 在上列式子中 我在下拉式選單中 設定了s50~s1000
今天我在程式執行中 我想要有個預設值 也就是s100
那請問 我這樣寫對嗎
請各位大大指教
swcforest 在 2009-11-12, 18:35 作了第 1 次修改
swcforest- 初級會員
- 文章總數 : 113
年齡 : 45
來自 : 台中市南區
職業 : 土木工程設計
愛好 : 遊山玩水及AutoLISP
個性 : 開朗活潑
使用年資 : 六七年了
使用版本 : AutoCAD 2016
積分 : 1
經驗值 : 6243
威望值 : 10
注冊日期 : 2008-07-27
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
你將這行(set_tile ”list0” (nth 1 list0))
改為下列試試看
(set_tile ”list0” ”1”)或是直接從對話框程式給value=1;。
下拉式清單中是使用項次編號,編號起始值是0。
改為下列試試看
(set_tile ”list0” ”1”)或是直接從對話框程式給value=1;。
下拉式清單中是使用項次編號,編號起始值是0。
張譽璋- 榮譽顧問
- 文章總數 : 304
年齡 : 54
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 7520
威望值 : 641
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
報告老師
我兩個方法都試過了
兩種皆不可行
所以我想 是否因為他是下拉式選單
所以無法給預設值哩
我看吳永進老師書上的範例
他是再下拉式選單前 再多一個編輯框 edit_box
才有辦法設定預設值是下拉式的第幾個
我兩個方法都試過了
兩種皆不可行
所以我想 是否因為他是下拉式選單
所以無法給預設值哩
我看吳永進老師書上的範例
他是再下拉式選單前 再多一個編輯框 edit_box
才有辦法設定預設值是下拉式的第幾個
swcforest- 初級會員
- 文章總數 : 113
年齡 : 45
來自 : 台中市南區
職業 : 土木工程設計
愛好 : 遊山玩水及AutoLISP
個性 : 開朗活潑
使用年資 : 六七年了
使用版本 : AutoCAD 2016
積分 : 1
經驗值 : 6243
威望值 : 10
注冊日期 : 2008-07-27
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
我想你先檢查一下你控制下拉式選單的副程式,看看是否有問題,我幾乎很少使用下拉式清單,所以我請教我同事,他是這樣寫的,至於為何我很少用下拉式清單,主要原因是它不方便操作,由其是項次多時應儘量避免使用,不過下拉清單也是有一個優點就是較省對話框版面,我再嘗試幫你找看看解決方法。
張譽璋- 榮譽顧問
- 文章總數 : 304
年齡 : 54
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 7520
威望值 : 641
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
找到方法了,你將對話框程式的選單部分改寫成如下:
加入以下這兩行參數
list = "S50\nS100\nS200\nS400\nS500\nS600\nS800\nS1000";
value = 1;
如此設訂打開對話框時就可預設制S100的項次了。
但是你的程式就必須改寫
(setq list0 (get_tile "list0"))
改寫成這樣時取回"的資料會是"1"
再用多條件是選項的方式去執行該項次的對應的表示式
例如 (cond ((= list0 "0") (setq ........))
((= list0 "1") (setq.........))
(t (setq........))
);cond
加入以下這兩行參數
list = "S50\nS100\nS200\nS400\nS500\nS600\nS800\nS1000";
value = 1;
如此設訂打開對話框時就可預設制S100的項次了。
但是你的程式就必須改寫
(setq list0 (get_tile "list0"))
改寫成這樣時取回"的資料會是"1"
再用多條件是選項的方式去執行該項次的對應的表示式
例如 (cond ((= list0 "0") (setq ........))
((= list0 "1") (setq.........))
(t (setq........))
);cond
張譽璋- 榮譽顧問
- 文章總數 : 304
年齡 : 54
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 7520
威望值 : 641
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
請問老師 你的意思是說 當我程式寫
dcl程式
:popup_list{label="文字型式";edit_width=7;key="k0";value="1";}
(set_tile "k0" (nth (atoi $v) list0)) 所得出來的
lisp程式
(setq list0 '("S50" "S100" "S200" "S400" "S500" "S600" "S800" "S1000"))
"k0" 會是0~7
:popup_list{label="文字型式";edit_width=7;key="k0";}
(set_tile "k0" (nth (atoi $v) list0)) 所得出來的
lisp程式
(setq list0 '("S50" "S100" "S200" "S400" "S500" "S600" "S800" "S1000"))
"k0" 會是s50~s1000
是這樣的意思嗎
dcl程式
:popup_list{label="文字型式";edit_width=7;key="k0";value="1";}
(set_tile "k0" (nth (atoi $v) list0)) 所得出來的
lisp程式
(setq list0 '("S50" "S100" "S200" "S400" "S500" "S600" "S800" "S1000"))
"k0" 會是0~7
:popup_list{label="文字型式";edit_width=7;key="k0";}
(set_tile "k0" (nth (atoi $v) list0)) 所得出來的
lisp程式
(setq list0 '("S50" "S100" "S200" "S400" "S500" "S600" "S800" "S1000"))
"k0" 會是s50~s1000
是這樣的意思嗎
swcforest- 初級會員
- 文章總數 : 113
年齡 : 45
來自 : 台中市南區
職業 : 土木工程設計
愛好 : 遊山玩水及AutoLISP
個性 : 開朗活潑
使用年資 : 六七年了
使用版本 : AutoCAD 2016
積分 : 1
經驗值 : 6243
威望值 : 10
注冊日期 : 2008-07-27
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
應該這樣寫才對
(setq k0 (get_tile "k0"))此行須放置於按下確定鍵的副程式中
以下這段程式置於按下確定後所執行的程式範圍中
- 代碼:
:popup_list{label="文字型式";edit_width=7;key="k0";list = "S50\nS100\nS200\nS400\nS500\nS600\nS800\nS1000";value="1";}
(setq k0 (get_tile "k0"))此行須放置於按下確定鍵的副程式中
以下這段程式置於按下確定後所執行的程式範圍中
- 代碼:
(cond ((= k0 "0") (setq list0 "S50"))
((= k0 "1") (setq list0 "S100"))
((= k0 "2") (setq list0 "S200"))
((= k0 "3") (setq list0 "S400"))
((= k0 "4") (setq list0 "S500"))
((= k0 "5") (setq list0 "S600"))
((= k0 "6") (setq list0 "S800"))
((= k0 "7") (setq list0 "S1000"))
)
張譽璋 在 2009-11-12, 10:22 作了第 1 次修改
張譽璋- 榮譽顧問
- 文章總數 : 304
年齡 : 54
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 7520
威望值 : 641
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
可是我看吳永進老師書上的範例 不用這麼做耶
只是我模擬她的作法 卻做不出來
不知道是哪邊有出了問題
只是我模擬她的作法 卻做不出來
不知道是哪邊有出了問題
swcforest- 初級會員
- 文章總數 : 113
年齡 : 45
來自 : 台中市南區
職業 : 土木工程設計
愛好 : 遊山玩水及AutoLISP
個性 : 開朗活潑
使用年資 : 六七年了
使用版本 : AutoCAD 2016
積分 : 1
經驗值 : 6243
威望值 : 10
注冊日期 : 2008-07-27
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
這個問題我就不方便回答你了,因為我沒有看過吳永進老師的範例,所以我無從得知程式出了什麼問題,其實對話框的預設方式是有兩種方法,我提供給你的解決方式是直接在對話框程式中設定清單內容以及預設值,這種方式比較容易,另一種方式就是在lisp程式中設定並將設定值丟回對話框中去設定,使用的時機和狀況兩者不盡相同,但是從程式中去設定對話框會比較複雜,會增加程式的編寫困難度,問題大都會出現資料的轉換上,所以你的狀況不是很複雜所以建議你直接從對話框中設定會比較合適也比較單純,對話框中的選項主要是提供你,操作者選了那個項目,對話框就將選的項目丟回來給程式告訴程式該執行那個動作,
所以項次號碼就是一個訊號一樣,一般我設計的習慣是編輯框的預設值我才會由程式去控制他,清單的話還是以對話框中預設比較理想,我在網站中有提供一支型鋼的程式,那支程式中的選台鈕就屬於比較複雜的操作設計所以一定要由程式去設定預設值.
所以項次號碼就是一個訊號一樣,一般我設計的習慣是編輯框的預設值我才會由程式去控制他,清單的話還是以對話框中預設比較理想,我在網站中有提供一支型鋼的程式,那支程式中的選台鈕就屬於比較複雜的操作設計所以一定要由程式去設定預設值.
張譽璋- 榮譽顧問
- 文章總數 : 304
年齡 : 54
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 7520
威望值 : 641
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
回復: [已解決]下拉式選單的預設值寫法---AutoLISP
謝謝張老師指導
感激不盡
感激不盡
swcforest- 初級會員
- 文章總數 : 113
年齡 : 45
來自 : 台中市南區
職業 : 土木工程設計
愛好 : 遊山玩水及AutoLISP
個性 : 開朗活潑
使用年資 : 六七年了
使用版本 : AutoCAD 2016
積分 : 1
經驗值 : 6243
威望值 : 10
注冊日期 : 2008-07-27
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章