Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2850 replies to this topic

#1641 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 01 May 2013 - 06:13 PM

Thanks! Lúc đầu tôi đã đi theo hướng dùng tab để chỉ còn 1 list_box rồi, nhưng chương trình của tôi có 3 cái dialog như vậy. Mà trong mỗi cái, vì các string này chưa xác định được nên strlen của nó dài ngắn bất thường => khi đó dùng tab đôi lúc các column nó nhảy sole coi chướng mắt, sau đó mới chuyển qua nhiều list_box như trên dù biết rằng nó chậm là cái chắc.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1642 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 01 May 2013 - 06:58 PM

Nhảy thì sửa. Chỉ cần thêm 1 hàm con justify cho text trong cột. Mách có chứng, đây là chương trình tôi viết bằng Lisp và DCL.

22980_tktroot_1.png

Thêm 1 ví dụ về việc phân trang để nhóm dữ lieu

22980_tkttral.png


  • 2

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#1643 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 01 May 2013 - 09:53 PM

DCL xấu xí thì đành chịu, nhưng tôi nghĩ câu hỏi này có thể giải được. Bởi tôi có thể đưa chúng lên thẳng hàng được nhưng phải kèm điều kiện là chúng cùng trượt lên đầu hoặc cuối list_box, còn khi item nằm lưng chừng thì đang bí. Có cách gì để xác định item được chọn đang nằm ở hàng thứ mấy (từ trên xuống) trong list_box không ta?

 

Tue_NV hiểu ý bác vì trường hợp này Tue_NV đã từng gặp rồi, chắc không có cách giải khi đang ở listbox này điều khiển thanh trượt của List box kia. Khi các thanh trượt bằng nhau (phần đầu và phần cuối bằng nhau) thì bác mới đưa về thẳng hàng được. Khi nó nằm ở lưng chừng giữa nhưng nếu các thanh trượt có phần đầu và phần cuối bằng nhau thì có thể đưa chúng thẳng hàng được. Bác đẩy các thanh trượt cùng về đầu hay cùng về cuối chính là làm cho phần đầu và phần cuối của các thanh trượt bằng nhau rồi đấy thôi

Một khi giữa các thanh trượt đã bị lệch dù chỉ 1 hàng thôi cũng sẽ làm cho chúng mất "cân đối" rồi

 

Thật đáng tiếc trong DCL chẳng có cái nào để điều khiển thanh trượt cả.


  • 1

#1644 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 01 May 2013 - 10:05 PM

@Tue_NV: Thôi kệ! Chắc DCL chỉ thế.

@Thaistreetz:Dù sao cũng cám ơn vì đã nhận được những chia sẻ. Xin dừng câu hỏi tại đây.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1645 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 02 May 2013 - 08:20 AM

Nhảy thì sửa. Chỉ cần thêm 1 hàm con justify cho text trong cột. Mách có chứng, đây là chương trình tôi viết bằng Lisp và DCL.

22980_tktroot_1.png

Thêm 1 ví dụ về việc phân trang để nhóm dữ lieu

22980_tkttral.png

@Thaistreetz có thể cho mình xin code DCL 1 trong 2 hộp thoại này được không? Cả hàm con Justify nữa ^^


  • 0

#1646 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 02 May 2013 - 09:26 AM

Bác Thái làm sao mà cái nút ok nó lại có chiều cao nút vượt mặt mấy thèn nút kia thế? Mình làm nó toàn có độ cao bằng nhau.


  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1647 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 May 2013 - 09:36 AM

Bác Thái làm sao mà cái nút ok nó lại có chiều cao nút vượt mặt mấy thèn nút kia thế? Mình làm nó toàn có độ cao bằng nhau.

 

Dùng Tile Height thôi anh ạ


  • 1

#1648 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 May 2013 - 10:40 AM

Có ai biết vì sao button với label chỉ 1 ký tự và đã dùng width rất nhỏ nhưng nó vẫn dài lòng thòng không ? (win8;cad2007)


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1649 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 May 2013 - 11:47 AM

Có ai biết vì sao button với label chỉ 1 ký tự và đã dùng width rất nhỏ nhưng nó vẫn dài lòng thòng không ? (win8;cad2007)

 

Bác gửi DCL lên xem thử. 

 

@Thaistreetz : Bạn cho chiêm ngưỡng chương trình Thống kê thép của bạn với (bằng video cũng được). Có gì mình góp ý cho.  :)


  • 0

#1650 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 May 2013 - 12:30 PM

LSP+DCL đây! Button "L" và "M" không thể hẹp hơn?

http://www.cadviet.c.../3/67029_ha.zip

67029_untitled_5.png


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1651 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 May 2013 - 01:03 PM

LSP+DCL đây! Button "L" và "M" không thể hẹp hơn?

http://www.cadviet.c.../3/67029_ha.zip

67029_untitled_5.png

 

Bác xem thử có đẹp hơn không?

4652_dcl_1.jpg

 

 
//-----
HA : dialog { label = "T\U+00EDnh c\U+00E1c b\U+1EA3ng t\U+00EDnh";
  : boxed_column { label = "Ch\U+1ECDn b\U+1EA3ng t\U+00EDnh";
  children_fixed_width=true;
    : row {
      : boxed_row { label = "L\U+1EF1c [B3] ";
        : toggle { key = "bang3"; label = "B3"; }
        : row {
          : text { label = "Th\U+00F4ng s\U+1ED1 l\U+1EF1c "; }
          : button { label = "L"; key = "luccd"; }
          : button { label = "M"; key = "luccdx"; }
        }
      }
}  
    : row {
      : boxed_row { label = "C\U+00E1c b\U+1EA3ng c\U+00F2n l\U+1EA1i [B6->B12]";
   : column {
          : toggle { key = "bang6"; label = "B6"; }
          : toggle { key = "bang10"; label = "B10";}
}
   : column {
          : toggle { key = "bang7"; label = "B7"; }
          : toggle { key = "bang11"; label = "B11"; }
}
   : column {
          : toggle { key = "bang8"; label = "B8"; }
          : toggle { key = "bang12"; label = "B12"; }
}
   : column {
          : toggle { key = "bang9"; label = "B9"; }
}
      }
    }
  }
  Ghi_Exit_Help;
  errtile;
}
//----- T\U+1EA1o n\U+00FAt b\U+1EA5m "Exit_Help".
HA_button : button { width = 8; alignment = centered; }
Ghi_button : HA_button { label = "Ghi file"; key = "ghi"; is_cancel = true; }
Exit_button : HA_button { label = "Tho\U+00E1t"; key = "cancel"; is_cancel = true; }
Help_button : HA_button { label = "Gi\U+00FAp ð\U+1EE1"; key = "xemhd"; is_help = true; }
Ghi_Exit_Help : column { : row { alignment = centered; Ghi_button; Exit_button; Help_button; } }
//--------------------------------------------------------------------------------------------------------------------------------------

  • 0

#1652 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 May 2013 - 01:35 PM

Cái này Win7 ?

Không nhúc nhích. "Vũ Như Cẫn". Phải chăng là do Win8 ? Hình như cái của Thaistreez là Win8, nhưng vẫn gọn?

Bạn nào dùng Win8 test giùm với!

67029_untitled1.png


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1653 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 03 May 2013 - 12:31 PM

Topic này đông quá, KK góp vui tí bằng một yêu cầu đã cũ của ThuyLinh, đó là yêu cầu chuyển số nguyên trong chuỗi sang số thực. 

Hôm trước KK viết Lisp chuyển Text từ CAD sang Excel có được bác Hà tư vấn cho hàm distof dùng thấy hay nên đã viết lại Lisp theo yêu cầu của ThuyLinh theo 1 hướng khác đơn giản và ngắn gọn hơn nhiều. Lisp cũng đã xử lý được tất cả các trường hợp từ đơn giản đến phức tạp mà không cần phải chia ra trường hợp trong chuỗi có e (E) hay không có e (E). Một số chuỗi như "1...................2" thì Lisp cũng làm tốt.

Mời các bác trên diễn đàn bắt lỗi của Lisp này. Ai tìm ra lỗi sẽ có Like ngay. 

(defun C:Test( / i j a b c)
  (setq a(getstring T "\n Nhap chuoi: " ))
  (setq i 1 a1 "")
  (while (<= i (strlen a))
    (setq j(- (strlen a) i -1))
    (while (> j 0)
      (setq b(substr a i j))
      (if (and (= (vl-string-search "+" b) nil) (= (vl-string-search "-" b) nil) (= (vl-string-search " " b) nil))
	(if (setq c(distof b))
	  (setq a1(strcat a1 (substr a 1 (- i 1)) (rtos c 2 1))
		a(substr a (+ j i))
		i 1 j 0)))
      (setq j(- j 1)))
    (setq i(1+ i)))
  (setq a1(strcat a1 a))
  (princ a1)
  (princ)
  )

  • 1

#1654 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 03 May 2013 - 01:29 PM

Hơi bị gan! :lol:

Test

1+2 >> 1+2


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1655 KangKung

KangKung

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 227 (khá)

Đã gửi 03 May 2013 - 01:56 PM

Máy bác Hà thế nào ấy chứ. KK test ra thế này: 1.0+2.0>>1.0+2.0 :lol:  :lol:  :lol:


  • 0

#1656 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 03 May 2013 - 02:04 PM

1). Cứ "like" cái đã nhé!

2). Cái này là "trách nhiệm" của KK:

67029_untitled2.png


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1657 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 03 May 2013 - 02:07 PM

Biến Dimzin ban ạ. phải xét dimzin = 0

@KK: Cảm ơn bạn. Trường hợp này không ra kết quả như mình mong muốn sqrt(4000000000000000)

Trường hợp trên hơi đặc biệt, bỏ đi 1 số 0 nó vẫn chạy đúng, không hiểu vì sao nữa. mình ăn may test đúng vào trường hợp đặc biệt.

Bạn cũng nên để đối số precision của hàm rtos lên 9 hoặc cao hơn thay vì để 1 như code trên, tránh việc số thực bị làm tròn: 1.23 -> 1.2 làm mất tính đúng đắn của phép tính. Tham khảo trả lời của bạn Tue_NV ở trang trước nhé.

 

@ĐVH: Mình thử code DCL của bạn Tue_VN sửa, thấy các nút thu gọn rất tốt. Cad2010, Win XP


  • 1

#1658 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 03 May 2013 - 03:17 PM

Chẳng lẽ không kiếm được like nào của KK thì buồn lắm.

test

2/3 >> 0.7

@TL:

1). Nhìn cái của Thaistreez mường tượng là win8 nhưng nhỏ gọn nên mới hỏi. Nếu win8 nó phình ra thì sẽ vỡ mộng rất nhiều dialog cũ của mọi người.

2). Về hàm canh lề mà TL hỏi có 2 cách (không biết cách của Thaistreetz thế nào):

- Dùng fixed_width_font = true; rồi thay ký tự trống vào cho đủ tùy theo phía.

- Dùng Pixel của từng ký tự rồi cũng thay bằng ký tự trống (space).


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1659 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 03 May 2013 - 04:00 PM

Mình cũng đoán Thaistreetz viết hàm đó dựa vào việc bổ sung các ký tự space cho đủ. 

Nhưng làm như thế nào? viết ra sao để có 1 hàm tổng quát? đối số cần những gì? để ra được 1 một list_box gọn gàng và chính xác, có đủ canh trái, phải, giữa như thế chắc không phải đơn giản. Bạn cũng đã có ý định làm phương án này cho chương trình trên của bạn nhưng rồi cũng nghĩ là không làm được đành bỏ cuộc đấy thui. Mình thích ý tưởng độc này của Thaistreetz, nhưng mới nghĩ đến 1 hàm như thế đã thấy ngại rồi.

 

PS: Ngoài ra thì mình quan tâm đến 2 hộp thoai trên của Thaistreetz hơn, có khá nhiều điều mình thấy lạ! Nó khác hẳn những gì mình có thể viết. Thanh menu của list_box ở đâu ra? hay hình silde chẳng hạn.


  • 0

#1660 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 03 May 2013 - 04:32 PM

Chẳng lẽ không kiếm được like nào của KK thì buồn lắm.

test

2/3 >> 0.7

.....

 

Bác KK phải thay cái này mới được

Thay : 

(if (and (= (vl-string-search "+" b ) nil) (= (vl-string-search "-" b ) nil) (= (vl-string-search " " b ) nil))

Bằng dòng :

(if (and (= (vl-string-search "+" b ) nil) (= (vl-string-search "-" b ) nil) (= (vl-string-search "/" b ) nil) (= (vl-string-search " " b ) nil))

 

Kiếm được chổ lỗi rồi bác KK   :)


  • 1