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

Edit_box trong dialog

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

Hix hix làm ơn chỉ mình về lấy dữ liệu trong edit_box ra cho biến với. mình lay hoay mà vẫn không gắn được giá trị cho biến từ dialog.

Giá trị của biến của mình gồm 2 giá trị.

- toạ độ của 1 điểm trên cad.

- số dạng real.

Làm ơn chỉ giúp mình nhé. Lay hoay và tìm hiểu mãi không hiểu nên mong các bạn chỉ dùm.

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 đã dùng nhưng k được.

Chào bạn 18011985,

Bạn muốn lấy giá trị của biến trong edit-box thì bạn cần lưu ý tới việc đặt tên biến và sử dụng hàm savevars để lưu biến. Hãy đọc kỹ tài liệu mà mình đã gửi cho bạn.

Chúc bạn thành cô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
Chào bạn 18011985,

Bạn muốn lấy giá trị của biến trong edit-box thì bạn cần lưu ý tới việc đặt tên biến và sử dụng hàm savevars để lưu biến. Hãy đọc kỹ tài liệu mà mình đã gửi cho bạn.

Chúc bạn thành công.

Mình đã đọc nhưng chưa thông. Mình post đoạn lsp lên bạn góp ý hộ mình nhé.

(defun c:a1 ()
(setq dcl_id (load_dialog "Kcd.DCL"))
(while (not (vl-position hanh '(1 0)))
(if (not (new_dialog "Kcd" dcl_id))
(progn
(alert "\n Kh«ng t×m ®­îc file dcl")
(exit)))
(action_tile "diem1" "(done_dialog 2)")
(action_tile "diem2" "(done_dialog 3)")
(setq hanh (start_dialog))
(if (= hanh 2) (setq diem1 (getpoint)) )
(if (= hanh 3) (setq diem2 (getpoint)) )
);while
(action_tile "accept" "(savevar)(done_dialog)")
(setq dcl_id (unload_dialog dcl_id))
)
(defun savevar()
   (setq tyleD1 (atof (get_tile "tyleD")))
   (setq tyleN1 (atof (get_tile "tyleN")))
   (setq Mss1 (atof (get_tile "Mss")))
)  

Còn đây là đoạn DCL

Kcd : dialog { label = "----------------------------";
:column {
	:boxed_column {
	   :text {
	   	label = "------------------------";
		alignment = centered;
		}
	   :boxed_column {
	   	label = "Lùa chän tû lÖ";
	   	:edit_box {
	   	key = "tyleD";
	   	label = "Tû lÖ ®øng: ";
	   	edit_width = 10;
	   	value = "100";
	   	}
	   	:edit_box {
	   	key = "tyleN";
	   	label = "Tû lÖ ngang: ";
	   	edit_width = 10;
	   	value = "100";
	   	}
	   	:edit_box {
	   	key = "Mss";
	   	label = "Møc so s¸nh: ";
	   	edit_width = 10;
	   	value = "0";
	   	}
	   }
	   :boxed_column {
	   	label = "Lùa chän ®­êng giãng";
	   	:row {
	   	   :text {
	   	   label = "§iÓm ®Çu ®­êng giãng: ";
	   	   }
	   	   :button {
	   	   key = "diem1";
	   	   label = "Chän ®iÓm";
	   	   }
	   	}
	   	:row {
	   	   :text {
	   	   label = "§iÓm cuèi ®­êng giãng: ";
	   	   }
	   	   :button {
	   	   key = "diem2";
	   	   label = "Chän ®iÓm";
	   	   }
	   	}
	   }
	:spacer {height=1;}
	ok_cancel;
	}
}
}

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 đã đọc nhưng chưa thông. Mình post đoạn lsp lên bạn góp ý hộ mình nhé.

(defun c:a1 ()
(setq dcl_id (load_dialog "Kcd.DCL"))
(while (not (vl-position hanh '(1 0)))
(if (not (new_dialog "Kcd" dcl_id))
(progn
(alert "\n Kh«ng t×m ®­îc file dcl")
(exit)))
(action_tile "diem1" "(done_dialog 2)")
(action_tile "diem2" "(done_dialog 3)")
(setq hanh (start_dialog))
(if (= hanh 2) (setq diem1 (getpoint)) )
(if (= hanh 3) (setq diem2 (getpoint)) )
);while
(action_tile "accept" "(savevar)(done_dialog)")
(setq dcl_id (unload_dialog dcl_id))
)
.......................

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

Hàm get_tile phải đặt trong vòng lặp WHILE

chú ý giải phóng biến cục bộ.

code :

(defun c:a1 (/ dcl_id diem1 diem2 hanh Mss1 tyleD1 tyleN1)
 (setq dcl_id (load_dialog "Kcd.DCL"))
 (while (not (vl-position hanh '(1 0)))
   (if (not (new_dialog "Kcd" dcl_id))
     (progn
(alert "\n Kh≪ng t×m R-ic file dcl")
(exit)))
   (action_tile "diem1" "(done_dialog 2)")
   (action_tile "diem2" "(done_dialog 3)")

   (action_tile "accept" "(savevar)(done_dialog)")
   (setq hanh (start_dialog))
   (if (= hanh 2) (setq diem1 (getpoint)) )
   (if (= hanh 3) (setq diem2 (getpoint)) )
   );while
 (setq dcl_id (unload_dialog dcl_id))
 (princ))

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 gia_bach mình chưa thử lại bài mình post lên. Trước đấy mình bị lỗi ở chỗ get_tile vì mình lấy biến là số thực mà cứ get_tile trả về giá trị STR hì hì. Mình phải dùng thêm atof nữa giờ đã hiểu hơn. Cảm ơn bạn lần nữa.

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ì vừa xem bóng đá vừa làm, nhưng vướng mắc không có giải đáp, anh em chỉ cho mình nhé.

đối với đầu vào của editbox là số VD: 123

(action_tile "so" "(setq so1 $value)")

Nhưng đầu vào của mình nhập vào là chữ và số VD 1a thì

(action_tile "so" "(setq so1 $value)")

Không còn đúng nữa. Các bạn chỉ cho mình nhé.

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ì vừa xem bóng đá vừa làm, nhưng vướng mắc không có giải đáp, anh em chỉ cho mình nhé.

đối với đầu vào của editbox là số VD: 123

(action_tile "so" "(setq so1 $value)")

Nhưng đầu vào của mình nhập vào là chữ và số VD 1a thì

(action_tile "so" "(setq so1 $value)")

Không còn đúng nữa. Các bạn chỉ cho mình nhé.

- Bạn lấy ra giá trị của "so" qua một dòng lệnh theo kiểu sau:

(setq so 3); biến này là biến toàn cục của Chtrình chính tức đặt trên DEFUN C: ..., không đưa vào danh sách biến cục bộ.

(setq stt3 (rtos so)); biến này được đặt sau DEFUN C:... nhưng trước chương trình con dành cho Dialog.

(action_tile "so" "(setq stt3 (get_tile\"so\"))(setq so (atoi $value))")

- Sau khi nhập bất kỳ Str, hay Real, ... bạn đều được Editbox ghi lại qua biến "so". và việc chạy tiếp dialog sẽ thực hiện qua giá trị mới của "so" này.

- CT sẽ bị lỗi nếu "so" không hợp lệ. Vậy trước đó phải lập một ct con ktra tính hợp lệ của "so". Nên nhớ (rtos Str) luôn < 0. Do vậy lập ctc ktra như sau:

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

(DEFUN xuly33 ()

(if (<= (atof so) 0)(loaibo))

)

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

(DEFUN loaibo ()

(setq DCLID (load_dialog "DUYLISP\\chaohoi.dcl"))

(new_dialog "traloi6" DCLID)

(start_dialog)(unload_dialog DCLID)(exit)

)

File DCL trong DuyLisp\chaohoi.dcl:

traloi6 : dialog {

label = "Ph¹m Duy Anh - ThÊy lçi !";

: text {label = "";

}: text {

label = "- B¹n nhËp tû lÖ b¶n vÏ kh«ng hîp lÖ !";

alignment = left;

}: text {label = "- H·y nhËp gi¸ trÞ tû lÖ > 0 vµ lµm l¹i.";

alignment = left;}: text {label = " ";}ok_only;}

 

Chúc vui vẻ !

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

×