Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
khanh10

SỬA GIÚP MÌNH LISP DÙNG HỘP THOẠI DIALOG?

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

Rảnh rỗi mình làm cái lisp xong rồi, thấy cái hộp thoại dialog hay hay nên thử làm xem thế nào. Khi gọi hộp thoại lên thì được nhưng không điều khiển được hộp thoại. Các bạn giúp mình nhé!Untitled1.png.41d649ad8a1446eb8725746bdede000b.png

Vân đề thứ nhất là trong file .dcl các edit_button có value là "0" nhưng hộp thoại lại không có. Thứ hai là khi chọn các radio_button thì mình muốn các tham số nào cần khai báo thì sẽ hiển thị, cái nào không cần thì mờ đi (ví dụ: khi chọn "side elevation" thì "roof slope" và "canopy width" sẽ hiển thị, còn "canopy length" sẽ mờ đi, không nhập được). Và cái quan trọng là khi nhấn ok thì sẽ thực hiện lệnh vẽ mặt cạnh, mặt đứng hoặc mặt bằng tương ứng vợi sự lựa chọn ở radio_button ở trên. Các pro giúp mình với nhé! Cám ơn nhiều!

Đây là file .dcl:

canopy: dialog { label = "&Lisp ve canopy";
   	: boxed_radio_row { 
		label = "Select drawing type"; key = "dt";
		: radio_button { label = "&Side elevation"; value = "0"; key = "se";}
		: radio_button { label = "&Front elevation"; value = "0"; key = "fe";}
		: radio_button { label = "&plan"; value = "0"; key = "pl";}
	}
	: column {
	: edit_box { label = "Roof slope (%)"; edit_width = 6; key = "slope";}
	: edit_box { label = "Canopy length"; edit_width = 6; key = "length";}
	: edit_box { label = "Canopy width"; edit_width = 6; key = "width";}
	}
  ok_cancel;
}

Còn file .lsp dưới file đính kèm1

canopy of dialog.lsp

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

- Vấn đề thứ nhất: value = "0" mà bạn khai báo đối với radio_button chả có tác dụng gì. Nói chung cũng không hiểu ý đồ của bạn muốn ở đây là gì. Còn với cách sắp xếp thế kia thì nhóm 3  radio_button sẽ tự động hoạt động bình thường mà không cần bất kì sự điều khiển nào. Tức là khi bạn chọn bất kì 1 trong 3 cái thì 2 cái còn lại tự động tắt.

- Vấn đề thứ 2: Bạn phải viết hàm điều khiển nhúng vào trong action của từng ratio_button. Dùng hàm (mode_tile "key" "giá trị 0 hoặc 1") để thiết lập trạng thái bật tắt edit_box.

ví dụ của bạn: khi chọn side elevation thì hàm nhúng trong action của key = "se" sẽ thực hiện đủ các bước sau: (mode_tile "slope" "1") (mode_tile "length" "0") (mode_tile "width" "1")

- Vấn đề thứ 3: Tương ứng với lựa chọn nào thì vẽ theo lựa chọn đó: Cái này thuần túy là về lisp rồi. Khi đóng hộp thoại bạn phải lấy ra 1 list gồm các giá trị của các ratio trên. Action của key = "accept" phải dùng hàm get_tile để lập list này: 

(

(ratio1 (box1 box3))

(ratio2 (box1 box2))

(ratio3 (box2 box3))

)

trong mọi trường hợp thì chỉ 1 trong 3 ratio trên có giá trị là 1. Như vậy dùng if mà xử lý nó cho các bước tiếp theo.

 

key = "accept" hình như là key mặc định khi bạn dùng ok_cancel thì phải. mình chưa từng dùng cái này nên không rõ. cơ bản là vì dùng nó thì khó thiết kế cái hộp thoại cho đẹ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

Cám ơn bạn đã góp ý! mình có một số thắc mắc giải đáp của bạn:

- Vấn đề 1: value ="0" là mình chỉ muốn có giá trị ban đầu của edit_box khi mình mở hộp thoại lên thôi.

- Vấn đề 2: Mình cũng đã thiết lập trạng thái bật tắt edit_box rồi :

(defun select()
(cond 
	((= sec1 1) ((mode_tile "slope" 0) (mode_tile "length" 1) (mode_tile "width" 0) (mode_tile "slope" 2) (mode_tile "slope" 3)))
	((= sec2 1) ((mode_tile "slope" 0) (mode_tile "length" 0) (mode_tile "width" 0) (mode_tile "slope" 2) (mode_tile "slope" 3)))
	((= sec3 1) ((mode_tile "slope" 1) (mode_tile "length" 0) (mode_tile "width" 0) (mode_tile "length" 2) (mode_tile "length" 3)))
)
)

tương ứng với khi chọn radio: 

(setq sec1 (atoi (get_tile "se")))
(setq sec2 (atoi (get_tile "fe")))
(setq sec3 (atoi (get_tile "pl")))

nhưng sao nó vẫn không hoạt động! @@

- Vấn đề 3: Mình cũng đã action key "accept" cho các hành động vẽ mb, mc, mc rồi:

(if (= sec1 1)
	(progn
	(action_tile "se" "(select $value)")
	(action_tile "slope" "(getise $reason)")
	(action_tile "width" "(getb $reason)")
	(action_tile "accept" "(mc) (done_dialog)")
	)
)
(if (= sec2 1)
	(progn
	(action_tile "fe" "(select $value)")
	(action_tile "slope" "(getife $reason)")
	(action_tile "length" "(getlfe $reason)")
	(action_tile "width" "(getb $reason)")
	(action_tile "accept" "(md) (done_dialog)")
	)
)
(if (= sec3 1)
	(progn
	(action_tile "pl" "(select $value)")
	(action_tile "length" "(getlpl $reason)")
	(action_tile "width" "(getb $reason)")
	(action_tile "accept" "(mb) (done_dialog)")
	)
)

Nói thật mình không rành về cái hộp thoại này nên có nhiều lỗi mình không biết. Nếu có thể bạn sữa giúp mình được không! Cám ơn nhiều. 

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ác giả (TG) đã code lisp, sau 10 ngày vẫn nằm nguyên vị trí. Không bổ sung được thêm kiến thức gì??????????????????

Mình mạo muội đưa ra mấy ý kiến dựa theo vấn đề tác giả nêu:

1. Vấn đề thứ nhất: Ở dialog của TG chẳng có edit_button  nào có value = 0 (nó nằm ở  radio_button) - Cái này có thể gọi là râu bà nọ cắm nhầm phải cằm ông kia. Nhưng chẳng sao, may là ông bà này thuần tính (có thể xử lý ở lisp).

2. Vấn đề thứ 2: Các hàm được goi khi action_tile (pick chuột), chẳng giống ai (Vấn đề cơ bản về lisp).

3. Vấn đề thứ 3: Cũng là action_tile. VD từ lisp của TG: (action_tile "accept" "(mc) (done_dialog)"), Hàm mc không thể thực hiện được (lý do: getpoint khi dialog đang nằm phơi ra), phải là: (action_tile "accept" "(done_dialog)(mc)") (tất nhiên trước đó phải lấy được các thông số cần thiết).

P/s: Cách diễn giải của mình không được tường minh cho lắm. (văn kém).

  • 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
(defun c:df ( / dcl_code dcl_id file_dcl temp)
 (if (not *canopy*) (setq *canopy* (list "1" "0" "0" "0" "0" "0")))
 (setq dcl_code (list (strcat
"canopy : dialog { label = \"&Lisp ve canopy\";"
" : boxed_radio_row { label = \"Select drawing type\"; key = \"dt\";"
"		 : radio_button { label = \"&Side elevation\"; key = \"se\";}"
"		 : radio_button { label = \"&Front elevation\"; key = \"fe\";}"
"		 : radio_button { label = \"&plan\"; key = \"pl\";}}"
"	: column {"
"	   : edit_box { label = \"Roof slope (%)\"; edit_width = 6; key = \"slope\";}"
"	   : edit_box { label = \"Canopy length\"; edit_width = 6; key = \"length\";}"
"	   : edit_box { label = \"Canopy width\"; edit_width = 6; key = \"width\";}}"
" ok_cancel;}")))
 (setq temp (vl-filename-mktemp "canopy.dcl")	file_dcl (open temp "W"))
 (foreach l dcl_code (write-line l file_dcl))
 (close file_dcl)
 (setq dcl_id (load_dialog temp))
 (vl-file-delete temp)
 (new_dialog "canopy" dcl_id)
 (mapcar 'set_tile (list "se" "fe" "pl" "slope" "length" "width") canopy)
 (cond ((= (car *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(0 1 0)))
			 ((= (cadr *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(0 0 1)))
			 ((= (caddr *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(1 0 0))))
 (action_tile "se" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\") '(0 1 0))")
 (action_tile "fe" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\") '(0 0 1))")
 (action_tile "pl" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\") '(1 0 0))")
 (action_tile "accept" "(setq *canopy* (mapcar 'get_tile '(\"se\" \"fe\" \"pl\" \"slope\" \"length\" \"width\"))) (done_dialog)")
 (start_dialog) (unload_dialog dcl_id)
 (cond ((= (car *canopy*) "1") (alert "Viet code ve mat cat vao day"))
			 ((= (cadr *canopy*) "1") (alert "Viet code ve mat dung vao day"))
			 ((= (caddr *canopy*) "1") (alert "Viet code ve mat bang vao day")))
 (princ))

Đây bạn. Viết hết luôn cho rồi nhé. Nhúng luôn DCL vào lisp luôn. mình toàn viết thế. test các hàm điều khiển DCL tiện hơ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
Vào lúc 17/11/2017 tại 19:57, quocmanh04tt đã nói:

Tác giả (TG) đã code lisp, sau 10 ngày vẫn nằm nguyên vị trí. Không bổ sung được thêm kiến thức gì??????????????????

Mình mạo muội đưa ra mấy ý kiến dựa theo vấn đề tác giả nêu:

1. Vấn đề thứ nhất: Ở dialog của TG chẳng có edit_button  nào có value = 0 (nó nằm ở  radio_button) - Cái này có thể gọi là râu bà nọ cắm nhầm phải cằm ông kia. Nhưng chẳng sao, may là ông bà này thuần tính (có thể xử lý ở lisp).

2. Vấn đề thứ 2: Các hàm được goi khi action_tile (pick chuột), chẳng giống ai (Vấn đề cơ bản về lisp).

3. Vấn đề thứ 3: Cũng là action_tile. VD từ lisp của TG: (action_tile "accept" "(mc) (done_dialog)"), Hàm mc không thể thực hiện được (lý do: getpoint khi dialog đang nằm phơi ra), phải là: (action_tile "accept" "(done_dialog)(mc)") (tất nhiên trước đó phải lấy được các thông số cần thiết).

P/s: Cách diễn giải của mình không được tường minh cho lắm. (văn kém).

Cám ơn bạn đã góp ý! Để mình xem lạ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

Mình có sửa lisp theo sự giúp đỡ của bạn @Thaistreetz nhưng có vài điều mình không hiểu, mong được các bạn giúp đỡ.

Trong biến danh sách dùng *canopy* và canopy thì khác nhau chổ nào vậy? Mục đích của đoạn code này là gì:  (foreach l dcl_code (write-line l file_dcl)).

Với thêm nhờ các bạn bổ sung giúp mình khi nhập dữ liệu tại edit_box này xong thì enter sẽ nhảy con trỏ xuống edit_box dưới, mình sửa hoài mà không được.

Ah, thêm cái nữa là sao mình dùng lệnh: (setq i (atof  (get_tile "slope"))) thì lại không lấy được giá trị của "slope trong hộp thoại nhỉ? Cám ơn các bạn nhiều!

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/170843-s%E1%BB%ADa-gi%C3%BAp-m%C3%ACnh-lisp-d%C3%B9ng-h%E1%BB%99p-tho%E1%BA%A1i-dialog/
(defun mc (/ p q1 q2 q3 q4 q5 q6 q7 oldos tana a sec1 sec2 c d1 d2)
(setq p (getpoint "\nNhap chon vi tri dat:"))
(setq tana (/ i 100))
(setq a (atan tana))
	(setq p1 (polar p 0 b))
	(setq p2 (polar p1 (/ (* pi 90) 180) 200))
	(setq p0 (polar p2 pi 150))
	(setq p3 (polar p0 (/ (* pi 90) 180) 200))
	(setq p4 (polar p3 (/ (* (- 180 (/ (* a 180) pi)) pi) 180) (/ (- b 150) (cos a))))
  	(command "pline" p p1 p2 "a" p3 "l" p4 "c")
	(setq sec1 (entlast))
	(command "change" sec1 "" "p" "la" "thay" "")
	(command "hatch" "ANSI32" 600 45 sec1 "")
	(command "change" "l" "" "p" "la" "hatch" "")    
    (setq n1 1 ch1 "canopy")
    (setq bl1 (strcat ch1 (itoa n1)))
    (while (tblsearch "block" bl1)
	(progn
        (setq n1 (1+ n1))
        (setq bl1 (strcat ch1 (itoa n1)))
        )
    )
	(command "-block" bl1 p "c" "non" p1 "non" p4 "")
	(command "-insert" bl1 p "" "" "" )
)
(defun md (/ p h h1 q1 q2 q3 q4 q5 q6 q7 oldos tana a sec1 sec2 c d1 d2)
(setq p (getpoint "\nNhap chon vi tri dat:"))
(setq tana (/ i 100))
(setq a (atan tana))
   	
	(setq h (+ 400 (* tana (- b 150))))
	(setq p1 (polar p 0 l))
	(setq p2 (polar p1 (/ (* pi 90) 180) h))
	(setq p3 (polar p 0 150))
	(setq p4 (polar p3 (/ (* pi 90) 180) h))
	(setq p5 (polar p1 pi 150))
	(setq p6 (polar p5 (/ (* pi 90) 180) h))
	(setq p7 (polar p3 (/ (* pi 90) 180) 200))
	(setq p8 (polar p5 (/ (* pi 90) 180) 200))
	(setq p9 (polar p7 (/ (* pi 45) 180) 200))
	(command "rectangle" p p2)
  	(command "line" p3 p4 "")
	(command "line" p5 p6 "")
	(command "line" p7 p8 "")
	(command "-hatch" "p" "ANSI32" 600 45 p9 "")
	(command "change" "l" "" "p" "la" "hatch" "")
    (setq n2 1 ch2 "canopy")
    (setq bl2 (strcat ch2 (itoa n2)))
    (while (tblsearch "block" bl2)
	(progn
        (setq n2 (1+ n2))
        (setq bl2 (strcat ch2 (itoa n2)))
        )
    )
	(command "-block" bl2 p "c" "non" p2 "non" p "")
	(command "-insert" bl2 p "" "" "" )
)
(defun mb (/ p p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 sec1 n3 ch3 bl3)
(setq p (getpoint "\nNhap chon vi tri dat:"))
	(setq p1 (polar p 0 l))
	(setq p2 (polar p1 (/ (* pi 90) 180) b))
	(setq p3 (polar p 0 150))
	(setq p4 (polar p3 (/ (* pi 90) 180) b))
	(setq p5 (polar p1 pi 150))
	(setq p6 (polar p5 (/ (* pi 90) 180) b))
	(setq p7 (polar p3 (/ (* pi 45) 180) 300))
	(setq p8 (polar p (/ (* pi 90) 180) b))
	(setq p9 (polar p8 (/ (* pi 270) 180) 150))
	(setq p10 (polar p9 (/ (* pi 270) 180) 200))
	(setq p11 (polar p10 (/ (* pi 270) 180) 300))
	(setq p12 (polar p11 (/ (* pi 270) 180) 500))
	(command "rectangle" p p2)
  	(command "line" p3 p4 "")
	(command "line" p5 p6 "")
	(command "-hatch" "p" "ANSI32" 700 45 p7 "")
	(command "change" "l" "" "p" "la" "hatch" "")
	(command "line" p4 p6 "")
	(setq sec1 (entlast))
	(command "move" sec1 "" p8 p9)
	(command "copy" "l" "" p9 p10 "")
	(command "copy" "l" "" p10 p11 "")
	(command "copy" "l" "" p11 p12 "")
    (setq n3 1 ch3 "canopy")
    (setq bl3 (strcat ch3 (itoa n3)))
    (while (tblsearch "block" bl3)
	(progn
        (setq n3 (1+ n3))
        (setq bl3 (strcat ch3 (itoa n3)))
        )
    )
	(command "-block" bl3 p "c" "non" p2 "non" p "")
	(command "-insert" bl3 p "" "" "" )
)
(defun c:can ( / dcl_code dcl_id file_dcl temp)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq old_layer (getvar "clayer"))
(setq lay1 (tblsearch "layer" "roof"))
(if (= lay1 nil) (command "-layer" "n" "roof" "c" "252" "roof" "lw" 0.15 "roof" ""))
(setq lay2 (tblsearch "layer" "hatch"))
(if (= lay2 nil) (command "-layer" "n" "hatch" "c" "8" "hatch" "lw" 0.09 "hatch" ""))
(setq lay3 (tblsearch "layer" "thay"))
(if (= lay3 nil) (command "-layer" "n" "thay" "c" "4" "thay" "lw" 0.15 "thay" ""))
(setq lay4 (tblsearch "layer" "block"))
(if (= lay4 nil) (command "-layer" "n" "block" "c" "21" "block" "lw" 0.09 "block" ""))
(setq lay5 (tblsearch "layer" "gutter"))
(if (= lay5 nil) (command "-layer" "n" "gutter" "c" "6" "gutter" "lw" 0.3 "gutter" ""))
(setvar "clayer" "roof")
 (if (not *canopy*) (setq *canopy* (list "1" "0" "0" "0" "0" "0")))
 (setq dcl_code (list (strcat
"canopy : dialog { label = \"&Lisp ve canopy\";"
" : boxed_radio_row { label = \"Select drawing type\"; key = \"dt\";"
"		 : radio_button { label = \"&Side elevation\"; key = \"se\";}"
"		 : radio_button { label = \"&Front elevation\"; key = \"fe\";}"
"		 : radio_button { label = \"&plan\"; key = \"pl\";}}"
"	: column {"
"	   : edit_box { label = \"Roof slope (%)\"; edit_width = 6; key = \"slope\";}"
"	   : edit_box { label = \"Canopy length\"; edit_width = 6; key = \"length\";}"
"	   : edit_box { label = \"Canopy width\"; edit_width = 6; key = \"width\";}}"
" ok_cancel;}")))
 (setq temp (vl-filename-mktemp "canopy.dcl")	file_dcl (open temp "W"))
 (foreach l dcl_code (write-line l file_dcl))
 (close file_dcl)
 (setq dcl_id (load_dialog temp))
 (vl-file-delete temp)
 (new_dialog "canopy" dcl_id)
 (mapcar 'set_tile (list "se" "fe" "pl" "slope" "length" "width") canopy)
 (cond ((= (car *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(0 1 0)))
			 ((= (cadr *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(0 0 0)))
			 ((= (caddr *canopy*) "1") (mapcar 'mode_tile '("slope" "length" "width") '(1 0 0))))
 (action_tile "se" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\" \"slope\") '(0 1 0 2))")
 (action_tile "fe" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\" \"slope\") '(0 0 0 2))")
 (action_tile "pl" "(mapcar 'mode_tile '(\"slope\" \"length\" \"width\" \"length\") '(1 0 0 2))")
 (action_tile "accept" "(setq *canopy* (mapcar 'get_tile '(\"se\" \"fe\" \"pl\" \"slope\" \"length\" \"width\"))) (done_dialog)")
 (action_tile "cancel" "(done_dialog) (exit)")
 (start_dialog) (unload_dialog dcl_id)
	(setq i (atof (cadddr *canopy*)))
	(setq l (atof (nth 4 *canopy*)))
	(setq b (atof (last *canopy*)))
 (cond ((= (car *canopy*) "1") (mc))
			 ((= (cadr *canopy*) "1") (md))
			 ((= (caddr *canopy*) "1") (mb)))
(setvar "clayer" old_layer)
(setvar "osmode" oldos)
 (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

- *canopy* : Mình có thói quen sử dụng biến toàn cục với dấu hiệu 2 dấu sao 1 trước 1 sau tên biến. Ví dụ *abc*. Nó chỉ là quy ước cá nhân thôi. Vì là biến nên bác muốn sửa thế nào tùy bác.

 

- (foreach l dcl_code (write-line l file_dcl)): Đoạn code này đứng 1 mình thì hơi khó hiểu. Nôm na thì như thế này

Bác có 1 đoạn chuỗi gồm nhiều dòng string chính là code của DCL nhúng trong code lisp phía trên.

Vì hộp thoại DCL chỉ có thể được gọi khi cad đã được load file code DCL, file này tất nhiên phải có đuôi mở rộng là *.dcl

Do vậy chúng ta tạo ra 1 file tạm có tên là "canopy.dcl" và ghi vào đó toàn bộ code của hộp thoại chúng ta cần. Đoạn code bạn trích dẫn trên là hàm lặp ghi từng dòng code DCL vào file "canopy.dcl" đó. Sao khi ghi xong thì load file DCL rồi xóa nó đi.

 

- Enter để tự động nhảy từ edit box này sang edit box khác thì thôi tốt nhất là bác từ bỏ đi. Chả làm được đâu, Chắc chắn! Tab thì hình như được. có 1 thông số có tên là tabstop trong code DCL thì phải, mình không nhớ lắm đâu.

 

- (get_tile "slope") trả về kết quả là 1 string.

  • 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
Vào lúc 4/12/2017 tại 01:19, Thaistreetz đã nói:

- *canopy* : Mình có thói quen sử dụng biến toàn cục với dấu hiệu 2 dấu sao 1 trước 1 sau tên biến. Ví dụ *abc*. Nó chỉ là quy ước cá nhân thôi. Vì là biến nên bác muốn sửa thế nào tùy bác.

 

- (foreach l dcl_code (write-line l file_dcl)): Đoạn code này đứng 1 mình thì hơi khó hiểu. Nôm na thì như thế này

Bác có 1 đoạn chuỗi gồm nhiều dòng string chính là code của DCL nhúng trong code lisp phía trên.

Vì hộp thoại DCL chỉ có thể được gọi khi cad đã được load file code DCL, file này tất nhiên phải có đuôi mở rộng là *.dcl

Do vậy chúng ta tạo ra 1 file tạm có tên là "canopy.dcl" và ghi vào đó toàn bộ code của hộp thoại chúng ta cần. Đoạn code bạn trích dẫn trên là hàm lặp ghi từng dòng code DCL vào file "canopy.dcl" đó. Sao khi ghi xong thì load file DCL rồi xóa nó đi.

 

- Enter để tự động nhảy từ edit box này sang edit box khác thì thôi tốt nhất là bác từ bỏ đi. Chả làm được đâu, Chắc chắn! Tab thì hình như được. có 1 thông số có tên là tabstop trong code DCL thì phải, mình không nhớ lắm đâu.

 

- (get_tile "slope") trả về kết quả là 1 string.

Cám ơn bạn nhiều nhé!

Nhưng cho mình hỏi: (atof  (get_tile "slope")), như vậy là mình chuyển kiểu string về real rồi mà bạn, sao lại không được 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
Vào lúc 4/12/2017 tại 01:19, Thaistreetz đã nói:

Enter để tự động nhảy từ edit box này sang edit box khác thì thôi tốt nhất là bác từ bỏ đi. Chả làm được đâu, Chắc chắn!

Câu trên chắc chắn không chắc chắn... hehe...

@Chủ thớt:

1. Thay tất cả biến canopy thành *canopy* để thấy sự khác biệt (do Mr Thái quên).

2. get_tile khi đang ở đâu??? Sau khi xem lại lisp đầu tiên, có ý này: Nếu đã done_dialog thì không thể get_tile được.

  • 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
21 giờ trước, quocmanh04tt đã nói:

Câu trên chắc chắn không chắc chắn... hehe...

@Chủ thớt:

1. Thay tất cả biến canopy thành *canopy* để thấy sự khác biệt (do Mr Thái quên).

2. get_tile khi đang ở đâu??? Sau khi xem lại lisp đầu tiên, có ý này: Nếu đã done_dialog thì không thể get_tile được.

vậy ah! cám ơn bạn nhé.

mình có thử làm để enter sẽ chuyển sang edit_box khác, có làm được nhưng mỗi khi chuyển sang radio khác thì nó phải nhảy hết các edit_box trong radio đó đã mới chuyển con trỏ sang radio mới, với lại mình không thể áp điều kiện if để thay đổi trạng thái cho từng edit_box. Không biết có bạn pro nào có phương pháp làm cái này thì có thể giúp mình với nhé! tks!

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
Đăng nhập để thực hiện theo  

×