Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Giao diện hộp thoại trong AutoLisp

Các bài được khuyến nghị

..............

Gửi Tue_NV code có thay thế nội dung biến ten bằng danh sách các Layer trong bản vẽ.

(defun c:lb3 (/ a dcl_id phepchon ten)
 (defun GetLayerLst(/ tbl tbl_lst)
   (setq tbl (tblnext "layer" 1) tbl_lst nil)
   (while tbl
     (setq tbl_lst (cons (cdr (assoc 2 tbl)) tbl_lst))
     (setq tbl (tblnext "layer"))    )
   (vl-sort tbl_lst ';main
 (setq dcl_id (load_dialog "listbox.dcl"))
 (setq ten (GetLayerLst)
a "0")

 (while (not (vl-position phepchon '(0 1)))    
   (if (not (new_dialog "LB" dcl_id))
     (exit))
   (start_list "C")
   (mapcar 'add_list ten)
   (end_list)    
   (set_tile "C" a)
   (action_tile "C" "(setq a $value)")    
   (action_tile "cancel" "(done_dialog 0)")
   (action_tile "accept" "(done_dialog 1)" )
   (action_tile "th" "(done_dialog 3)")
   (setq phepchon (start_dialog))
   (if (= phepchon 3)
     (alert (nth (atoi a) ten)))
   );while
 (unload_dialog DCL_ID)
 (if (= phepchon 1) (alert (strcat "Ban da chon Layer : "(nth (atoi a) ten))))
 (princ))

Cảm ơn anh gia_bach thật nhiều.

Tue_NV còn 1 vấn đề này nữa ạ :

Sau khi tạo 1 popup_list trong dialog : đó là danh sách tên các Layer thì phát sinh thêm 1 vấn đề nữa là Tue_NV muốn tạo thêm 1 popup_list nữa. Popup_list này chứa thuộc tính Color và Linetype từ tên Layer mà ta đã chọn ở trên.

Kết quả là trong dialog có 2 Popup_list. Một popup_list thể hiện tên Layer. Sau khi mình chọn tên Layer ở popup_list đầu thì popup_list thứ 2 tự động cập nhật thuộc tính Color và Linetype vào.

Đây là file .dcl

////////file dcl : Listbox.dcl
LB : dialog {
label = "Layer va thuoc tinh Color , Linetype ";
:boxed_row {
label = "Layer va thuoc tinh Color , Linetype ";
width = 50;
: row {
  : column {

   	: popup_list {
		label = "Layer_Name		";
		 key  = "LA";
		allow_accept = true;
		  }

   	: popup_list {
		label = "Color and Linetype";
		 key  = "T";
		allow_accept = true;
		  }

	}
  }
}
ok_cancel;			//OK and Cancel Buttons
}

Việc tạo list ten Layer và add vào popup_list thì như anh gia_bach đã hướng dẫn và Tue_NV đã hiểu, nhưng còn việc chọn 1 phần tử trong popup_list 1 để các thuộc tính tự động cập nhật vào popup_list 2 thì Tue_NV chưa biết cách

 

Minh họa theo hình vẽ cụ thể sau :

popup_1.jpg

2 : chính là số màu của Layer

Continuous : chính là Linetype

 

Rất mong sự giúp đỡ của anh gia_bach và các bác.

Tue_NV xin chân thành cảm ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cảm ơn anh gia_bach thật nhiều.

Tue_NV còn 1 vấn đề này nữa ạ :

Sau khi tạo 1 popup_list trong dialog : đó là danh sách tên các Layer thì phát sinh thêm 1 vấn đề nữa là Tue_NV muốn tạo thêm 1 popup_list nữa. Popup_list này chứa thuộc tính Color và Linetype từ tên Layer mà ta đã chọn ở trên.

Kết quả là trong dialog có 2 Popup_list. Một popup_list thể hiện tên Layer. Sau khi mình chọn tên Layer ở popup_list đầu thì popup_list thứ 2 tự động cập nhật thuộc tính Color và Linetype vào.

.............

Bạn cần viết hàm đáp ứng với sự kiện USER click vào popup_list tên Layer.

(action_tile "C" "(setq a $value)(GetColorLineType)(UpdatePopup_list2)")

 

1. từ biến a ta có thể tính đuợc tên Layer (Layer_name).

 

2. hàm (GetColorLineType) trả về màu và kiểu đuờng nét của Layer tưong ứng.

+ màu : (cdr (assoc 62 (tblsearch "layer" Layer_name)))

+ kiểu đuờng nét : (cdr (assoc 6 (tblsearch "layer" Layer_name)))

 

3. hàm (UpdatePopup_list2) : có màu (color) và kiểu đuờng nét (linetype), bạn có thể chuyển qua kiểu danh sách và cập nhật trên popup_list thứ 2.

(start_list "Popup_list2")

(mapcar 'add_list (list color linetype))

(end_list)

 

Vài dòng, hy vọng hữu ích với bạn.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào các bác trên diễn đàn, có chút thắc mắc mong giải đáp: Em có tạo được một số tiện ích dùng hộp thoại, nhưng khi sử dụng thì em không hiểu lý do vì sao khi dùng ở máy mình thì hộp thoại khá cân đối, mang sang máy khác hoặc dùgn các CAD khác đời thì đôi khi cái hộp thoại nó bị kéo dài ra trông rất xấu, đôi khi các nút button kích thước cũng khác nhau, mình không hiểu...

Mong các bác trên diễn đàn giải đáp hộ là phải giới hạn bằng cách nào.

@Bonus: nhờ các bác giải thích tí về loại:

+ Spacer_0; Spacer_1;

+ Sự khác nhau giữa đối tượng image và image_button;

Cảm ơn các bác.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nghỉ xem WC 5 phút giải đáp với các bác ơi, Các cao thủ đau hết rồi ta, bế quan luyện công hết nà tết em gòi...............

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nghỉ xem WC 5 phút giải đáp với các bác ơi, Các cao thủ đau hết rồi ta, bế quan luyện công hết nà tết em gòi...............

Hề hề hề,

Chào bác dkkx3a,

Cái vụ này muốn cứu bồ, nhưng cứu không nổi vì lực bất tòng tâm.

Trong các lệnh về hộp thoại, mình thấy có các lệnh width và height để xác định kích thước các nút lệnh và các ô nhập liệu. Tuy nhiên khi sử dụng thì mình lại thấy lúc có lúc không.

Bác thử xài nó xem có hiệu quả gì không nhé.

Đây là một khúc lệnh tạo kích thước cho button:

: button {

key = "button1;

label = "Okay";

is_tab_stop = true;

is_cancel = false;

is_default = true;

width = 15;

height = 10;

mnemonic = "B";

}

 

Còn cái space_0 ý muốn nói là nó cần có một khoảng cách nhất định giữa các button hay các cell trong hộp thoại. Sử dụng cái space này để hiệu chỉnh cái giao diện của dialog cho ngon mắt.

space_1 ý muốn nói là khoảng cách giữa các button hay các cell trong hộp thoại được sử dụng ở mức độ tối thiểu và không điều chỉnh chi được nữa

 

Ấy là mấy thứ mà mình mót được của các cụ bề trên, còn xài thì chửa xài được bao nhiêu. Bác dùng thử coi nhé....

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình trình bày dialog chưa đẹp, các bạn cho mình hỏi, mình có lsp sau:

(defun c:aaa (/ dcl_id namefile fn1 fn)
(setvar "cmdecho" 0)
(dialog)
 (princ)
); End defun
;;;;;;---------------------------Xu ly du lieu dau vao-------------------------------
(defun Value ()
 (setq fn1 namefile)
 )
(defun Get_value ()
 (set_tile "fn" fn1)
 )
(defun namefile1 ()
 (setq namefile "abc")
 )
(defun dialog ()
(namefile1)
(Value)
(setq dcl_id (load_dialog "123.DCL"))
(if (not (new_dialog "a123" dcl_id))
(exit))
(Get_value)
(action_tile "cancel" "(done_dialog)")
(action_tile "accept" "(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
)

Và DCL

a123 : dialog { label = "Test dialog";
:column {
	:boxed_column {
	      	label = "Xö lý ®iÓm";
		:row {
		:toggle {
		key = "xf";
	   		}
	   	:text {
	   	label = "";
	   	edit_width = 50;
	   	key = "fn";
	   	}
	   	:button {
	   	key = "br";
	   	label = "§æi";
	   		}
	   	}
	   	}
	   	:spacer {height=1;}
	ok_cancel;
	}
}

Mình muốn chữ abc gần ngay sát nút toggle các bạn chỉ cho mình cách trình bày nhé. Cảm ơn các bạn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Hề hề hề,

Chào bác dkkx3a,

Cái vụ này muốn cứu bồ, nhưng cứu không nổi vì lực bất tòng tâm.

Trong các lệnh về hộp thoại, mình thấy có các lệnh width và height để xác định kích thước các nút lệnh và các ô nhập liệu. Tuy nhiên khi sử dụng thì mình lại thấy lúc có lúc không.

..........

Ấy là mấy thứ mà mình mót được của các cụ bề trên, còn xài thì chửa xài được bao nhiêu. Bác dùng thử coi nhé....

 

Vấn đề hôm trước mình hỏi các bác, nay tham khảo cái này cũng giải quyết được chút vấn đề, Cái DCL này:

about : dialog{

label="Gioithieu";

width=53;height=18;

spacer;

spacer;

 

Nhưng vẫn còn chút thắc mắc, nay mong các anh chị (các Bác) giải đáp hộ: các giá trị số trong WIDTH hay HEIGHT là 53 và 18 là chọn như thế nào, giá trị đơn vị nhỏ nhất của no tương quan ra sao, do có khi ở máy mình thì nhìn cái Dialog đẹp đẹp nhưng mang sang máy khác (nhất là màn hình tinh thể) thì nó biến dạng. Mong các bác giải đáp để em hoàn thiện tiện ích của mình, cảm ơn các bác. Thanks

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Anh gia_bach và các bác trên diễn đàn cho Tue_NV hỏi thêm là : để tạo 1 dialog tự động trải ra ở bên phải khi nhấn button thì mình làm thế nào ạ?. Ví dụ như trong dialog của lệnh Hatch này, khi nhấn button (được khoanh tròn màu đỏ) thì 1 dialoag tự động ở bên phải trải ra. Và khi ta nhấn button thì dialoag trải ra đó được tự động thu vào.

 

hatchmain.gif

 

- Một vấn đề nữa mà Tue_NV băn khoăn muốn hỏi là làm sao ta có thể tạo được nhiều TAB trong 1 dialog?. Ví dụ như trong dialog Hatch and Gradient thì gồm có Tab Hatch và Tab Gradient. Làm thế nào để tạo được 2 Tab như vầy? Mình thấy nếu tạo được dialog như vậy thì sẽ có nhiều chức năng hơn, có ích hơn

Rất mong nhận được sự giúp đỡ.

Tue_NV chân thành cảm ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Anh gia_bach và các bác trên diễn đàn cho Tue_NV hỏi thêm là : để tạo 1 dialog tự động trải ra ở bên phải khi nhấn button thì mình làm thế nào ạ?. Ví dụ như trong dialog của lệnh Hatch này, khi nhấn button (được khoanh tròn màu đỏ) thì 1 dialoag tự động ở bên phải trải ra. Và khi ta nhấn button thì dialoag trải ra đó được tự động thu vào.

 

hatchmain.gif

 

- Một vấn đề nữa mà Tue_NV băn khoăn muốn hỏi là làm sao ta có thể tạo được nhiều TAB trong 1 dialog?. Ví dụ như trong dialog Hatch and Gradient thì gồm có Tab Hatch và Tab Gradient. Làm thế nào để tạo được 2 Tab như vầy? Mình thấy nếu tạo được dialog như vậy thì sẽ có nhiều chức năng hơn, có ích hơn

Rất mong nhận được sự giúp đỡ.

Tue_NV chân thành cảm ơn.

Theo em thì bác đang hỏi đúng điểm yếu của Autolisp rồi đấy. Em cũng mày mò thử nhưng cuối cùng đành chấp nhận sự thật phũ phàng này

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Theo em thì bác đang hỏi đúng điểm yếu của Autolisp rồi đấy. Em cũng mày mò thử nhưng cuối cùng đành chấp nhận sự thật phũ phàng này

Cảm ơn Nataca đã reply. Nhưng theo Tue_NV nghĩ rằng chắc phải có 1 cách nào đấy để tạo ra nhiều TAB trong 1 dialog, hay là tạo ra 1 buton như Tue_NV đã trình bày. Nếu tạo được 1 dialog như thế sẽ có nhiều tiện ích hơn, có ích cho nhiều người sử dụng hơn. Cảm ơn Natâc đã quan tâm và rất mong có bác trên diễn đàn mình biết về cái này xin cho một chút ý kiến về vấn đề này chút ạ.

Tue_NV xin cảm ơn

Anh gia_bach và các bác trên diễn đàn cho Tue_NV hỏi thêm là : để tạo 1 dialog tự động trải ra ở bên phải khi nhấn button thì mình làm thế nào ạ?. Ví dụ như trong dialog của lệnh Hatch này, khi nhấn button (được khoanh tròn màu đỏ) thì 1 dialoag tự động ở bên phải trải ra. Và khi ta nhấn button thì dialoag trải ra đó được tự động thu vào.

 

hatchmain.gif

 

- Một vấn đề nữa mà Tue_NV băn khoăn muốn hỏi là làm sao ta có thể tạo được nhiều TAB trong 1 dialog?. Ví dụ như trong dialog Hatch and Gradient thì gồm có Tab Hatch và Tab Gradient. Làm thế nào để tạo được 2 Tab như vầy? Mình thấy nếu tạo được dialog như vậy thì sẽ có nhiều chức năng hơn, có ích hơn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cảm ơn Nataca đã reply. Nhưng theo Tue_NV nghĩ rằng chắc phải có 1 cách nào đấy để tạo ra nhiều TAB trong 1 dialog, hay là tạo ra 1 buton như Tue_NV đã trình bày. Nếu tạo được 1 dialog như thế sẽ có nhiều tiện ích hơn, có ích cho nhiều người sử dụng hơn. Cảm ơn Natâc đã quan tâm và rất mong có bác trên diễn đàn mình biết về cái này xin cho một chút ý kiến về vấn đề này chút ạ.

Tue_NV xin cảm ơn

Ssg cũng đồng quan điểm với bạn Nataca. Bó tay bạn ơi, không thể được chứ không phải là khó!

Lisp có những ưu thế tuyệt vời và cũng có những nhược điểm... đáng buồn, chính là cái mà bạn đã nêu. Nếu có nhu cầu đa dạng và phức tạp về giao diện người dùng như vậy thì nên dùng các công cụ lập trình khác, như VB, VBA, C++... Tuy nhiên, những công cụ "non-lisp" cũng có những nhược điểm rất lớn khi làm việc với AutoCAD (trên diễn đàn cũng có nhiều bài phân tích rồi). Được cái này thì mất cái kia!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Anh gia_bach và các bác trên diễn đàn cho Tue_NV hỏi thêm là : để tạo 1 dialog tự động trải ra ở bên phải khi nhấn button thì mình làm thế nào ạ?. Ví dụ như trong dialog của lệnh Hatch này, khi nhấn button (được khoanh tròn màu đỏ) thì 1 dialoag tự động ở bên phải trải ra. Và khi ta nhấn button thì dialoag trải ra đó được tự động thu vào.

 

- Một vấn đề nữa mà Tue_NV băn khoăn muốn hỏi là làm sao ta có thể tạo được nhiều TAB trong 1 dialog?. Ví dụ như trong dialog Hatch and Gradient thì gồm có Tab Hatch và Tab Gradient. Làm thế nào để tạo được 2 Tab như vầy? Mình thấy nếu tạo được dialog như vậy thì sẽ có nhiều chức năng hơn, có ích hơn

Rất mong nhận được sự giúp đỡ.

Tue_NV chân thành cảm ơn.

*Cái nút dùng mở rộng thì thay đổi cách nghỉ 1 chút đừng chăm chú là phải mở rộng mà đi theo con đường hơi bá đạo 1 chút:

-Thiết kế 1 hộp thoại 1 trước khi mở rộng, 1 sau khi mở rộng.

-Trong trong hộp thoại trước khi mở rộng thì nút đó dùng để gọi hộp thoại sau khi mở rộng.

-Trong trong hộp thoại sau khi mở rộng thì nút đó dùng để gọi hộp thoại trước khi mở rộng.

Hiệu ứng cũng tương đương không đến nổi nào. Tuệ đã thử cái lisp tổng hợp của mình thì thấy phần thư viện nút next và Previous là dùng cách này.

*Cái nhiều TAB trong 1 dialog thì hồi bộ lisp hổ trợ cho cad12 của anh kia dùng mình thấy có nên chắc là viết được nhưng đúng là mình tìm sách ko thấy nói thèn này. Bí lắm thì cũng dùng cách trên:

-Thiết kế 1 Nhiều hộp thoại trong đó có cái chung là có hàng button ngang hay dọc gì tùy.

-Khi nhấn vào button nào thì gọi hộp thoại đó lên.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
*Cái nút dùng mở rộng thì thay đổi cách nghỉ 1 chút đừng chăm chú là phải mở rộng mà đi theo con đường hơi bá đạo 1 chút:

-Thiết kế 1 hộp thoại 1 trước khi mở rộng, 1 sau khi mở rộng.

-Trong trong hộp thoại trước khi mở rộng thì nút đó dùng để gọi hộp thoại sau khi mở rộng.

-Trong trong hộp thoại sau khi mở rộng thì nút đó dùng để gọi hộp thoại trước khi mở rộng.

Hiệu ứng cũng tương đương không đến nổi nào. Tuệ đã thử cái lisp tổng hợp của mình thì thấy phần thư viện nút next và Previous là dùng cách này.

*Cái nhiều TAB trong 1 dialog thì hồi bộ lisp hổ trợ cho cad12 của anh kia dùng mình thấy có nên chắc là viết được nhưng đúng là mình tìm sách ko thấy nói thèn này. Bí lắm thì cũng dùng cách trên:

-Thiết kế 1 Nhiều hộp thoại trong đó có cái chung là có hàng button ngang hay dọc gì tùy.

-Khi nhấn vào button nào thì gọi hộp thoại đó lên.

 

Cái này cũng ko phải là không cách, bác dùng hỗ trợ ngoài xem, có cái phần mềm này nè, bác nghiên cứu nếu thấy IPÓC thì nghiên cứu và chia sẽ lại với anh em:

http://www.objectdcl.com/downloads/ObjectD...7.3.0-Setup.zip

  • Vote tăng 4

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cái này cũng ko phải là không cách, bác dùng hỗ trợ ngoài xem, có cái phần mềm này nè, bác nghiên cứu nếu thấy IPÓC thì nghiên cứu và chia sẽ lại với anh em:

http://www.objectdcl.com/downloads/ObjectD...7.3.0-Setup.zip

Cám ơn bạn đã gợi ý một hướng đi mới cho các anh em đã "lỡ" mê lisp nhưng cứ tức anh ách vì những công cụ DCL cực kỳ... nghèo nàn của nó! Theo gợi ý của bạn, ssg đã làm thử được cái này:

objdcl.jpg

Bấm vào button "Đi Nam Phi..." -> hiện ra lời chào của FIFA!

 

Lisp Code:

;;;-------------------------------------------------
(defun ObjectDCL_LoadArx()
(if (not (member "objectdcl.17.arx" (arx)))
 (arxload "objectdcl.17.arx" "ObjectDCL.17.arx not found.")
)
)
;;;-------------------------------------------------
(defun c:DclForm1_TextButton1_onclicked ()
(Odcl_MessageBox "WELCOME TO WORLD CUP 2010!" "FIFA MESSAGE"))
;;;-------------------------------------------------
(defun C:VD()
(objectDCL_LoadArx)
(Odcl_LoadProject "Hello.odc" T)
(Odcl_Form_Show Hello_DclForm1)
(princ)
)
;;;-------------------------------------------------

 

Qua đó, ssg có vài nhận xét sau:

Link bạn post mới chỉ là phần ObjectDCL Editor, tức là chỉ tạo được cái "vỏ". Muốn có cả cái "ruột" phải thêm phần ObjectDCL ARX nữa (cũng trong website đó luôn).

 

Trình tự thực hiện tổng quát như sau:

1- Dùng ObjectDCL Editor để tạo form và các control tùy thích. Bước này khỏe re, chỉ việc drag and drop rồi chỉnh sửa, y như các công cụ mang tính "visual" khác. Kết quả là file *.odc

2- Trong ObjectDCL có các công cụ hỗ trợ để viết code chèn vào file *.lsp. Thao tác chủ yếu là: hiểu công dụng của các event và method, copy và paste, sau đó sửa chút ít theo ý riêng.

3- Load lisp và chạy. Trong code lisp phải có thao tác load "ObjectDCL.xx.arx" (ví dụ của ssg là function ObjectDCL_LoadArx), trong đó nó đã định nghĩa sẵn các functions để ta gọi. Ví dụ: (Odcl_MessageBox "WELCOME TO WORLD CUP 2010!" "FIFA MESSAGE"))

 

Không muốn làm các bạn nản, nhưng sau một hồi "vọc phá", ssg thấy có 2 vấn đề chẳng mê chút nào:

1- Cái mà ssg down được chỉ là bản trial, dùng 15 ngày là die, muốn dùng nghiêm chỉnh phải có $!

2- Trong ObjectDCL.xx.arx nói trên, xx là chữ số biểu diễn version của ObjectDCL, phù hợp với version của AutoCAD tương ứng. Mà đã phân biệt version tức là sẽ có sự phiền toái khi chạy: chương trình có thể chạy tốt trên máy này nhưng có thể sẽ không chạy được ở máy kia. Tóm lại, dùng ObjectDCL cũng không hơn gì những công cụ "non-lisp" khác. Nhìn ở mức tổng quan (và cũng có phần hơi chủ quan), ssg thấy có khi "chơi" bằng VB hoặc VBA còn sướng hơn!

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cái này dễ lắm Tàu ơi

Chú cứ vào thư mục C:\Design\MY-TOOL\WALL-SEC.LSP mà 533 có mà nghiên cứu

chỉ cần thêm vài lệnh con khi action vào ô nhập dữ liệu là OK

 

Làm 533 thì nhớ giữ 1 chút đồ nghề mà phòng thân nhé, không thì có ngày "tay không trắng tay lại về không" và đâu đâu cũng thấy nhà nhà xài phần mềm (của tui), người người xài phần mềm (cũng của tui) ... HACKER nhiều lắm chú ạ

Chú đọc thêm bài này nhé

http://www.cadviet.com/forum/index.php?showtopic=21680

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cái này bạn chỉ cần khai báo trong câu lệnh mà thôi

Ví dụ như :

- Chạy file. Bấm câu lệnh ===> vô hộp thoại (input)

- Khi bấm phím OK thì sẽ về màn hình AutoCad chọn đối tượng

- Xong ==> thêm dòng câu lệnh vô lại hộp thoại (input) lại

(defun c:1 (/)

(input)

(setq ss (ssget))

;;; cập nhật dữ liệu mới vô hộp thoại

(input)

)

Tham khảo tại C:\Design\MY-LISP\ddgrid.lsp

Có gì chưa hiểu thì pm tiếp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em có 1 thắc mắc liên quan đến hộp thoại thế này, ko biết trong topic đã có chưa, em tạo một hộp thoại để lấy dữ liệu đầu vào, theo thói quen dùng cad thi thoảng nhấn escape 1 phát (^^) thế là Cad nó treo luôn, hum trước vứt đấy lượn đi chơi cả tiếng về vẫn thấy Cad chết ngẻo! Kiểm tra lại nút Cancel thì tình trạng cũng tương tự, ko bít là nguyên nhân do đâu nữa. hX, Các bác giúp em mấy :undecided:. Thank so so much! Ah` đây là đoạn Code điều khiển nút cancel :(action_tile "cancel" "(done_dialog)(exit)") (ko sai sót gì phải ko ah?!)

;----------------------------------------------------

Chẹp, em giải quyết xong roài, bỏ phứt cái dòng điều khiển nút cancel đi, (chả hiểu sao cái lệnh exit lại ko dùng được?!)

Giá mà chèn được ảnh minh họa với hình cho button như cái hình này thì quá tuyệt nhỉ :leluoi:

744980698_607d970b43_o.png

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nhân tiện đây cho hỏi về dcl một chút nữa (vì mình còn gà DCL lắm)

Làm thế nào để thực hiện lệnh của một Button xong thì sẽ quay trở lại hộp thoại để khai báo tiếp các tham số khác

Ví dụ: mình có dcl trong đó có button chọn đối tượng, khi nhấn button này thì sẽ chuyển sang màng hình cad để chọn đối tượng => chọn xong sẽ hiện lại hộp thoại (tất nhiên dữ liệu của các đối tượng vừa chọn đó sẽ lưu lại làm đối tượng chọn khi nhấn nút button OK)

Thanks and regards

 

Bạn sử dụng vòng lặp cho hộp thoại.

 

(setq butt 2)
(while (> butt 1)

(new_dialog...)
(action_tile "butt1" "(done_dialog 2)")
(action_tile "butt2" "(done_dialog 3)"

(setq butt (start_dialog))
(cond
 ((= butt 2) (thuchienlenh2))
 ((= butt 3) (thuchienlenh3))
)
)
(unload_dialog)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào các bác

Xin các bác cho Tue_NV hỏi :

Có cách nào thiết lập 1 biến khi mình nhấn vào Button/ hay không nhấn vào Button hay không?

Ví dụ : Có 1 Button B trong hộp thoại DCL

Khi ta nhấn vào Button B -> Thiết lập 1 biến a=1

Còn không nhấn vào Button B -> Xem như biến a=NIL

 

Mong các bác chỉ giúp. (Gợi ý cách làm cũng được ạ)

Tue_NV xin cảm ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào các bác

Xin các bác cho Tue_NV hỏi :

Có cách nào thiết lập 1 biến khi mình nhấn vào Button/ hay không nhấn vào Button hay không?

Ví dụ : Có 1 Button B trong hộp thoại DCL

Khi ta nhấn vào Button B -> Thiết lập 1 biến a=1

Còn không nhấn vào Button B -> Xem như biến a=NIL

 

Mong các bác chỉ giúp. (Gợi ý cách làm cũng được ạ)

Tue_NV xin cảm ơn.

Bạn Tue_NV hãy khai báo biến a là biến cục bộ. Sau đó viết dòng lệnh (setq a 1) vào trong hàm action_tile.

VD:

(defun TEST ( / a)

...

(action_tile "nutB" "(setq a 1)")

...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bạn Tue_NV hãy khai báo biến a là biến cục bộ. Sau đó viết dòng lệnh (setq a 1) vào trong hàm action_tile.

VD:

(defun TEST ( / a)

...

(action_tile "nutB" "(setq a 1)")

...

Cảm ơn bạn.

Mình quên nói thêm là trước đó mình đã thiết lập giá trị a là giá trị nào đó. Ví dụ a=6, chẳng hạn

Ví dụ :

(defun TEST ( / a)

̣̣(setq a 6)

...

(action_tile "nutB" "(setq a 1)")

...

 

Biến a khi kết thúc chương trình là biến lưu. Kết thúc chương trình là 1 phép gán => Nên không thể khai báo a là biến cục bộ đươc.

Nhấn vào Button "nutB" để thiết lập biến a =1 thì mình đã biết cách

Vấn đề làm sao là khi khởi động hộp thoại lên rồi. Mình không nhấn vào Button "nutB" thì biến a được thiết lập là NIL (hoặc 1 giá trị nào đó) (khi kết thúc lệnh)

Ví dụ không nhấn vào button B thì a được gán là giá trị NIL (setq a NIL), hoặc 1 giá trị nào đó (setq a 8) (khi kết thúc lệnh)=> Nên không thể khai báo a là biến cục bộ đươc. a là biến được lưu lại khi kết thúc chương trình.

a=NIL hoặc 1 giá trị nào đó khi User không nhấn vào Button B

 

Các bác có cách nào không?

Thành thật xin lỗi vì mình trình bày chưa được rõ ràng

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cảm ơn bạn.

Mình quên nói thêm là trước đó mình đã thiết lập giá trị a là giá trị nào đó. Ví dụ a=6, chẳng hạn

Ví dụ :

(defun TEST ( / a)

̣̣(setq a 6)

...

(action_tile "nutB" "(setq a 1)")

...

 

Biến a khi kết thúc chương trình là biến lưu. Kết thúc chương trình là 1 phép gán => Nên không thể khai báo a là biến cục bộ đươc.

Nhấn vào Button "nutB" để thiết lập biến a =1 thì mình đã biết cách

Vấn đề làm sao là khi khởi động hộp thoại lên rồi. Mình không nhấn vào Button "nutB" thì biến a được thiết lập là NIL (hoặc 1 giá trị nào đó) (khi kết thúc lệnh)

Ví dụ không nhấn vào button B thì a được gán là giá trị NIL (setq a NIL), hoặc 1 giá trị nào đó (setq a 8) (khi kết thúc lệnh)=> Nên không thể khai báo a là biến cục bộ đươc. a là biến được lưu lại khi kết thúc chương trình.

a=NIL hoặc 1 giá trị nào đó khi User không nhấn vào Button B

 

Các bác có cách nào không?

Thành thật xin lỗi vì mình trình bày chưa được rõ ràng

Mình hơi khó hiểu lời giải thích của bạn, nhưng có phải thế này không?

(defun TEST ()

̣̣(setq a nil)

...

(action_tile "nutB" "(setq a 6)")

...

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Cảm ơn bạn.

Mình quên nói thêm là trước đó mình đã thiết lập giá trị a là giá trị nào đó. Ví dụ a=6, chẳng hạn

Ví dụ :

(defun TEST ( / a)

̣̣(setq a 6)

...

(action_tile "nutB" "(setq a 1)")

...

 

Biến a khi kết thúc chương trình là biến lưu. Kết thúc chương trình là 1 phép gán => Nên không thể khai báo a là biến cục bộ đươc.

Nhấn vào Button "nutB" để thiết lập biến a =1 thì mình đã biết cách

Vấn đề làm sao là khi khởi động hộp thoại lên rồi. Mình không nhấn vào Button "nutB" thì biến a được thiết lập là NIL (hoặc 1 giá trị nào đó) (khi kết thúc lệnh)

Ví dụ không nhấn vào button B thì a được gán là giá trị NIL (setq a NIL), hoặc 1 giá trị nào đó (setq a 8) (khi kết thúc lệnh)=> Nên không thể khai báo a là biến cục bộ đươc. a là biến được lưu lại khi kết thúc chương trình.

a=NIL hoặc 1 giá trị nào đó khi User không nhấn vào Button B

 

Các bác có cách nào không?

Thành thật xin lỗi vì mình trình bày chưa được rõ ràng

Đọc một hồi em luân nó ra thế này anh xem có đuợc không nhé.

(defun c:test ()

(setq a 6)

....

(action_tile "nutB" "(setq a 1)")

(action_tile "cancel" "(setq a nil)(done_dialog)")

(action_tile "accept" "(setq a 8)(done_dialog)")

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
........................

Các bác có cách nào không?

Thành thật xin lỗi vì mình trình bày chưa được rõ ràng

hề hề ...

Thành thật xin lỗi vì mình chưa hiểu ... !

 

Có thể vấn đề của Tue_NV là ý tưởng chứ không phải cách thể hiện ?!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×