Đến nội dung


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

[Đã xong] - Tự động bật - tắt chế độ gõ tiếng việt trong CAD


  • Please log in to reply
94 replies to this topic

#21 Hoan1111

Hoan1111

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2587 Bài viết
Điểm đánh giá: 692 (tốt)

Đã gửi 16 December 2012 - 01:45 PM

Mình nói đáp ứng khoảng 98% nhu cầu mà, chứ mình không nói đáp ứng 98% các trường hợp sảy ra.
Hàm trên chạy tốt với tất cả các font TTF của bảng mã TCVN và VNI. Còn với riêng Unicode, bạn nghĩ thử xem: trong cad bạn có thường xuyen dùng các font khác ngoài 3 font: Arial, Time new roman và Tahoma để gõ Tiếng Việt không?

Mình không mong viết hoàn thiện 100% chương trình này bởi ngay cách giải quyết vấn đề đã chỉ ra rằng nó chẳng bao giờ có thể hoàn thiện 100% cả. Trên net có đến hàng nghìn font Unicode, cứ bổ sung như vậy thì đến bao giờ cho xong. Dùng đến đâu thì đưa vào đến đó thôi. Con số 98% là ước lượng đa số người dùng theo nhu cầu thường xuyên của họ.

Chương trình này được viết dành cho những kẻ lười, và mình chỉ cần nó đảm bảo cho mình hay những người khác lười như mình, sử dụng nó sẽ đỡ mất thời gian bận tâm đến bảng mã hay bộ gõ là được. còn viec bổ sung cho hoàn thiện thì được chừng nào hay chừng đó, dù có khi chẳng bao giờ đụng đến những font đó ^^

Hoằn là người lười nhưng Hoằn sợ phải nhớ lệnh lisp và Ap lisp nên Hoằn không sử dụng lisp, thực tế là trên bản vẽ kỹ thuật cũng ít khi sử dụng vài dòng chữ tiếng Anh, thường là chỉ một hay 2 từ là cùng nên Hoằn luôn để chữ V, dẫu sao Hoằn cũng vẫn Like This vì bác đã nhiệt tình giúp những kẻ lười!
  • 0

66 Câu Phật Học Cho Cuộc Sống : http://ngocchinh.com...-cho-cuoc-song/

Gió đưa cây cải về trời / Rau răm ở lại chịu lời đắng cay...

 

 


#22 Skywings

Skywings

    biết lệnh erase

  • Members
  • PipPipPip
  • 102 Bài viết
Điểm đánh giá: 46 (tàm tạm)

Đã gửi 16 December 2012 - 11:10 PM

Mình dùng thử thì bị báo lỗi này "_ddedit ; error: no function definition: SENDKEYS"

- Calibri không phải là 1 font Unicode (hay 1 font hỗ trợ Tiếng Việt) DVH ạ.

Ở đây mình đính chính một chút Calibri (đi kèm trong win7) là một font hỗ trợ đầy đủ Unicode nên có thể gõ tiếng Việt thoải mái :).
  • 1

#23 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 17 December 2012 - 06:03 AM

vậy nó có hổ trợ cad 2012 ko chị ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#24 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 17 December 2012 - 07:09 AM

Mình dùng thử thì bị báo lỗi này "_ddedit ; error: no function definition: SENDKEYS"
Ở đây mình đính chính một chút Calibri (đi kèm trong win7) là một font hỗ trợ đầy đủ Unicode nên có thể gõ tiếng Việt thoải mái :).

Có lẽ bạn ThuyLinh quên chép hàm con SENDKEYS vào lisp, chứ cad2013 cũng không có hàm này.
  • 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.


#25 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 17 December 2012 - 07:56 AM

em thử chạy trên cad 2012 thì nó thông báo như thế này chị ah
error: no function definition: VLR-REACTORS
Chị có thề viết thêm vài dòng hỗ trợ cad 2012 ko chị, chủ yếu em xài cad2012. Em thấy công dụng lsp này hay rất tiện cho công việc của em.Nếu đc em cám ơn rất nhìu :D
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#26 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 17 December 2012 - 04:50 PM

Hihi, cảm ơn DVH, mình chưa có nhiều kinh nghiệm post bài nên thiếu lung tung hết cả.
@Nhoclangbat. em down lại ver2.0 nhé. lần này đảm bảo chạy ngon. hỗ trợ tốt từ cad 2009 trở đi :D
  • 2

#27 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 18 December 2012 - 07:31 AM

lsp đã dùng tốt chị ah, thank chị nhiều, nhưng em thấy còn 1 xíu nữa ^^, vd em đang để mã unicode khi đánh text trong cad font "vni-" đúng là nó tự chuyển sang mã vni windowns nhưng khi đánh xong ok, theo lsp của chị giải thích nó sẽ tự trả về ban đầu là unicode nhưng của em nó ko trả về nó nằm ở mã vni windowns lun, tại máy em hả chị :D
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#28 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 18 December 2012 - 03:15 PM

Lisp này chỉ trả lại chế độ gõ Tiếng Anh cho Unikey thôi, không trả lại thiết lập bảng mã nhoclangbat ạ.
  • 1

#29 thoxayncp

thoxayncp

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 19 January 2013 - 10:56 AM

Tớ chưa dùng, nhưng thật là tuyệt vời! hehe down ngay!
;) ;)
  • 0

#30 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 21 January 2013 - 10:23 AM

Thanks.
Trong lisp của Bạn chuyển chế độ gõ Anh/Việt bằng cách sendkey CTRL+SHIFT. Tuy nhiên trên máy người sẽ còn các úng dụng khác, cac ứng dụng này có các lệnh dùng phím CTRL+SHIFT. Do đó họ sẽ chọn theo cách ALT+Z cho chương trình Unikey

Vì vậy Bạn có thể thêm cách ALT+Z vào lisp được không hoặc cho mình biết mã của phím ALT+Z trong lisp là gì để mình điều chỉnh cho phù hợp với cách sử dụng
p/s: Theo mình là thêm dòng lệnh sendkey ALT+Z sau lệnh sendkey CTRL+SHIFT,vì lisp chỉ có tác dụng trên AuotoCAD, nếu CTRL+SHIFT không được thì ALT+Z cũng đã sẵn sàng ^_^

àh, co thêm vấn đề này nữa:
Nếu có 3 text 3 kiểu font khác nhau thì khi dùng lệnh của lisp (chỉ trong 1 lần enter lênh) để sửa cho từng text thì nó sẽ hiểu và chọn bảng mã cho text đầu tiên, đến text 2, 3 thi có bẩng mã khác nhưng nó vẫn dùng bẩng mã của text đầu). Nếu được Bạn cho kiểm tra bảng mã trong từng text được chọn thì sẽ hay hơn
  • 0

#31 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 21 January 2013 - 03:13 PM

Cú pháp cho Alt+Z như sau: (sendkeys "%{Z}")
Bạn có thể tham khảo thêm trong link này: http://msdn.microsof...s.sendkeys.aspx

Vấn đề thứ 2 bạn đề cập mình cũng đã gặp phải và vẫn đang tìm cách bổ sung nhưng chưa làm được. Có thể sẽ không bao giờ làm được :'(
  • 1

#32 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 21 January 2013 - 04:18 PM

Hihi, cảm ơn DVH, mình chưa có nhiều kinh nghiệm post bài nên thiếu lung tung hết cả.
@Nhoclangbat. em down lại ver2.0 nhé. lần này đảm bảo chạy ngon. hỗ trợ tốt từ cad 2009 trở đi :D

Hề hề hề,
Không ai muốn hỗ trợ cho CAD2004 ư??? Khổ cái thân tui quá. Thôi thì .... ráng kiếm tiền để chơi dời mới vậy...... Hề hề hề ,....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#33 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 21 January 2013 - 04:35 PM

Oh, anh Bình còn xài 2004 ah :D, chắc anh Bình tính xài lun bản quyền mới cần để dành xiền nhỉ ^^, cho nhoc hỏi tí nếu mình mua bản quyền thì nhiu xiền nhỉ ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#34 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 21 January 2013 - 05:07 PM

Hề hề hề,
Không ai muốn hỗ trợ cho CAD2004 ư??? Khổ cái thân tui quá. Thôi thì .... ráng kiếm tiền để chơi dời mới vậy...... Hề hề hề ,....

Nếu viết để hỗ trợ cho cad 2004 thì phải viết theo 1 cách khác hoàn toàn khác bạn ạ. Mình chưa thử nên cũng không dám chắc có viết được hay không. Còn lisp trên mình viết dựa vào việc theo dõi sự thay đổi của biến hệ thống TEXTEDITOR. Biến hệ thống này chỉ có trên các bản cad 2009 trở lên thôi.
Bạn cứ thử dùng cad cao hơn đi, nếu ngại giao diện Ripbon thì bạn có thể chuyển về giao diện classic là sẽ thấy môi trường làm việc quen thuộc ngay thôi mà. Mình biết là bạn có khả năng viết lisp hỗ trợ công việc. nhưng dù sao thì dùng cad2004 vẫn rất khổ cực nếu so với các bản cad mới. Đôi khi còn gây phiền hà đến đồng nghiệp nếu họ dùng cad cao hơn, mỗi lần chuyển file cho bạn lại mất công lưu thành cad 2004.
  • 0

#35 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 21 January 2013 - 05:11 PM

Mình xin phép lấy code của @ThuyLinh313 sửa lại các nội dung sau:
- Bổ sung thêm chuyển chế độ gõ Anh/Việt bằng phím ATL+Z
- Chuyển đúng bảng mã cho các text có font khác nhau (chỉ trong 1 lệnh ED của lisp, xem bài #30)

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=66851
;===========================================================;
; A U T O U N I K E Y C O N T R O L R O U T I N E ;
;===========================================================;
; ;
; Version 1.0 - 14/12/2012 ;
; - Support Auto change table code (Unicode, TCVN, VNI) ;
; - Support for Text & Mtext objects ;
; ;
; Version 2.0 - 15/12/2012 ;
; - Added Auto toggle (On/Off) Vietnamese keys ;
; - Added support for Dimension objects ;
; - fixed Check-font-code function ;
; ;
;===========================================================;
; Cadviet.com - Le Thuy Linh 313 - Tri Tue Viet.jsc ;
;===========================================================;
(vl-load-com)
;;; Go bo Reactor Auto-Unikey cu truoc khi load
(foreach x (cdar (vlr-reactors :vlr-sysvar-reactor))
(if (= (vlr-data x) "Auto-Unikey") (vlr-remove x)))
;;; Tao Reactor Auto-Unikey
(vlr-sysvar-reactor "Auto-Unikey" '((:vlr-sysvarchanged . callback-Unikey)))
;;; Dinh nghia lai lenh ED de lay ename doi tuong
(defun c:ed (/ textedit font ent)
(while(setq textedit (car (entsel "\nSelect object: ")))
(setq ent (cdr (assoc 0 (entget textedit))))
(if (wcmatch ent "*TEXT,DIMENSION")
(progn
(if(wcmatch ent "*TEXT")
(setq font (vla-get-stylename (vlax-ename->vla-object textedit)))
(setq font (vla-get-textstyle (vlax-ename->vla-object textedit)))
)
(command "ddedit" textedit "")
)
)
)
(princ)
)
;;; Ham callback dieu khien bo go tieng viet
(defun callback-Unikey (reactor sysvar / code Crfont)
(if (= (car sysvar) "TEXTEDITOR") (progn(sendkeys "^+")(sendkeys "%{Z}")))
(if (> (getvar "TEXTEDITOR") 0)
(progn
(if font (setq Crfont font) (setq Crfont (getvar "textstyle")))
(setq code (check-font-code Crfont))
(cond ((= code "TCVN3") (sendkeys "^+{F2}"))
((= code "UNICODE") (sendkeys "^+{F1}"))
((= code "VNI") (sendkeys "^+{F3}"))))))
;;; Ham kiem tra bang ma cua textstyle (su dung true type font)
;;; style: String - ten cua textstlye kiem tra
(defun Check-Font-Code (style / ts font Bold Italic charSet PitchandFamily)
(setq ts (vlax-ename->vla-object (tblobjname "style" style)))
(vla-GetFont ts 'font 'Bold 'Italic 'charSet 'PitchandFamily)
(if (= font "") (setq font (vla-get-fontfile ts)))
(cond ((wcmatch (setq font (strcase font)) "ARIAL*,TAHOMA*,TIMES*,COURIER NEW,CAMBRIA,CONSOLAS,CALIBRI*") "UNICODE")
((wcmatch font ".VN*") "TCVN3")
((wcmatch font "VNI*") "VNI")))
;;; Ham senkeys
(defun SendKeys (keys / wscript)
(vlax-invoke-method (setq wscript (vlax-create-object "WScript.Shell")) 'sendkeys keys)
(vlax-release-object wscript))

  • 3

#36 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 21 January 2013 - 05:34 PM

Haha. Bạn làm mình buồn cười mình quá! Đơn giản thế mà không nghĩ ra, cứ suy nghĩ xa xôi đâu đâu.
Không phải "xin phép" mình khách sáo thế đâu, rất vui vì bạn là người đầu tiên chung tay với mình để hoàn thiện ứng dụng này.

Các moderator cho mình hỏi chút: Làm thế nào để mình có thể sửa tiêu đề của topic. Mình muốn chuyển tiền tố tiêu đề từ Yêu cầu -> Đã xong ^^
  • 0

#37 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 21 January 2013 - 10:36 PM

hồi chiều code lại nhưng vội quá mình chưa kiểm tra lại dòng lệnh (command "ddedit" textedit ""), mình nhớ có 1 biến hệ thống ảnh hưởng đến việc kết thúc lênh bằng dấu "" (biến này autocad đời cao không hiện ra qua việc đánh lệnh setvar). Do đó có khả năng xảy ra lổi nếu autocad của máy nào đã thay đổi giá trị của biến này
Mình lại nhớ ^_^ @Ketxu có nói nếu dùng vl-cmdf thì sẽ không bị lổi kết thúc lệnh bằng dấu "" như trên. @ThuyLinh313 thử thay command bằng vl-cmdf xem. Hiện đang ngồi máy không có autocad nên không thử được
  • 0

#38 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 22 January 2013 - 01:15 AM

Mình thấy cái này hay hay nên edit chút để dùng được cho cad đời thấp. Do vội nên chưa test kỹ không biết có lỗi gì không.


(vl-load-com)
;;; Dinh nghia lai lenh ED de lay ename doi tuong
(defun c:edt (/ textedit font ent)
(SETQ OLDERR *error*
*error* myerror)
(sendkeys "^+")
(while (setq textedit (car (entsel)))
(setq ent (cdr (assoc 0 (entget textedit))))
(if (wcmatch ent "*TEXT")
(progn
(setq font (vla-get-stylename (vlax-ename->vla-object textedit)))
(call font)
)
)
(command "ddedit" textedit "")
)
(back)
(SETQ *error* OLDERR)
(princ))
;;; Ham call dieu khien bo go tieng viet
(defun call (font / code Crfont)
(if font (setq Crfont font) (setq Crfont (getvar "textstyle")))
(setq code (check-font-code Crfont))
(cond ((= code "TCVN3") (sendkeys "^+{F2}"))
((= code "UNICODE") (sendkeys "^+{F1}"))
((= code "VNI") (sendkeys "^+{F3}"))
)
)
;;; Ham tra lai English
(defun back ()
(sendkeys "^+")
)
;;; Ham kiem tra bang ma cua textstyle (su dung true type font)
;;; style: String - ten cua textstlye kiem tra
(defun Check-Font-Code (style / ts font Bold Italic charSet PitchandFamily)
(setq ts (vlax-ename->vla-object (tblobjname "style" style)))
(vla-GetFont ts 'font 'Bold 'Italic 'charSet 'PitchandFamily)
(if (= font "") (setq font (vla-get-fontfile ts)))
(cond ((wcmatch (setq font (strcase font)) "ARIAL*,TAHOMA*,TIMES*,COURIER NEW,CAMBRIA,CONSOLAS") "UNICODE")
((wcmatch font ".VN*") "TCVN3")
((wcmatch font "VNI*") "VNI")))
;;; Ham senkeys
(defun SendKeys (keys / wscript)
(vlax-invoke-method (setq wscript (vlax-create-object "WScript.Shell")) 'sendkeys keys)
(vlax-release-object wscript))
;;;Ham bay loi
(defun myerror (s)
(if (= s "Function Cancelled") (sendkeys "^+"))
(setq *error* OLDERR)
(princ)
)
PS: Mình nghĩ cái này có thể phát triển thêm dùng cho cả block attribute.
  • 2
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#39 VoHoan

VoHoan

    biết lệnh move

  • Members
  • PipPipPip
  • 129 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 22 January 2013 - 07:02 AM

Mình là người lười, hay quên lại gõ text "mổ cò" nữa nên thấy ý tưởng này cũng hay đấy, lấy về dùng xem sao.
Lisp chạy tốt nhưng có vấn đề này mong TL hày Tien2005 xem lại với:
1. Khi dùng lisp đánh lệnh "ed" của lisp thì dùng tốt nhưng bình thường muốn sửa text mình hay kích đúp chuột thì lisp không còn tự chuyển mã gõ nữa.
2. Nên mặc định unikey ở chế độ tiếng Việt khi dùng lisp dù trước đó unikey đang ở chế độ TV hay E.
  • 0

#40 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 22 January 2013 - 08:10 AM

@Vo Hoan: Trong lisp ban đầu của mình (ver2.0) thì kích dupble vẫn được. Lisp do bạn Tien2005 sửa lại thì mới bị mất chức năng này. Để mình kiểm tra lại xem nguyên nhân do đâu.
Lisp này viết bị phụ thuộc hoàn toàn vào các phím tắt của Unikey, Unikey chi cung cấp cho ta 1 cái "công tắc" chuyển đổi on<->off chứ không có nút ON riêng và OFF riêng. Thế nên để làm như bạn muốn là điều không thể. Phải chấp nhận thôi bạn ạ.
;;;---------------------------------------
Đã tìm ra nguyên nhân. Do Tien2005 sửa lại thuật toán gọi hàm senkeys của minh: Từ việc sử dụng hàm callback của reactor liên kết với sự kiện text bị sửa thành hàm thông thường được gọi trong lệnh edt. Phương pháp này không ổn vì:
- Lisp không thực thi nếu sửa text bằng việc kích dup. như Vo Hoan đã nêu
- Không có tác dụng với các lệnh viết text mới như nguyên bản ver2.0 của mình.
Mình có thể sửa được các thiếu sót này trong bài tiếp theo

PS: lisp bạn phamngoctu sửa lại dựa trên lisp bài #35 nên cũng sẽ bị tình trạng tương tự.
  • 0