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

Mở và đóng một thư mục của file bản vẽ hiện hành

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

- Trong quá trình làm việc với file bản vẽ không ít lần chúng ta cần mở thư mục chứa file bản vẽ đang mở. Theo cách thông thường thì chúng ta sẽ vào thư mục một cách thủ công, đôi khi thư mục để ở một nơi "thâm sâu bí hiểm" nên việc tìm đến nó khá mệt mỏi. Có một số cách để làm nhẹ nhàng đi như: tạo shortcut file hay thư mục... Tuy nhiên có một cách mà mình muốn bàn ở đây là mở bằng Autolisp:

+ Cad có một biến lưu đường dẫn thư mục chứa file đó là: "DWGPREFIX"

+ Vấn đề còn lại là Explorer thư mục này. Có một cách đơn giản là dùng hàm (startapp "explorer.exe"(getvar "DWGPREFIX")) . Tuy nhiên cách này không chơi được với những thư mục có dấu , (phẩy)-> hiện tại mới test được lỗi này

+ Cách nữa có thể chơi được với mọi loại tên thư mục:

(defun C:QE ()
(Explore (getvar "DWGPREFIX"))
)
(defun Explore ( Directory / Shell result )
 (setq Shell  (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application"))
 (setq result (vl-catch-all-apply 'vlax-invoke (list Shell 'Explore Directory)))
 (vlax-release-object Shell)
 (not (vl-catch-all-error-p result))
)

-> Cách này rất ổn. Nó dùng "Shell.Application" để liên kết với windows.

- Tiếp theo là vấn đề thứ 2 của topic: Mở ra được rồi nhưng làm cách nào để đóng một thư mục đang mở hoặc để không mở trùng một thư mục đã mở trước. Mình thử tìm hiểu nhưng chưa nghĩ ra cách. Mọi người thử nghĩ tiếp xem sao. :)

  • 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

Bạn tìm được 1 Func khá hay đó.

Đây cũng là vấn đề thường gây khó chịu cho người vẽ. Mình cũng thử nhiều lần mà không được, có lẽ do Lisp cắt liên lạc sau lệnh Open.

Nhờ sự gợi nhớ của Bạn Mình đã thử lại với VBA thì được. Cũng đơn giản thôi, Mình dùng hơi dân giả là như sau:

(defun Open()

(setq file1 (acet-ui-getfile "Open file" (getvar "DWGPREFIX") "dwg" "Drawing files" 0))

(If File1

(Progn

(setq kq (open "c:/windows/temp/open.txt" "w"))

(write-line file1 kq) (close kq)

(Command "vbarun" "module1.mofile_Open")

)

)

)

...Sau đó Bạn viết Module1 bằng VBA để đọc tên file và mở bản vẽ, cái này chắc Bạn viết được.

(dùng hàm ThisDrawing.Application.Documents.Open (tenfile))

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ách này rất ổn. Nó dùng "Shell.Application" để liên kết với windows.

- Tiếp theo là vấn đề thứ 2 của topic: Mở ra được rồi nhưng làm cách nào để đóng một thư mục đang mở hoặc để không mở trùng một thư mục đã mở trước. Mình thử tìm hiểu nhưng chưa nghĩ ra cách. Mọi người thử nghĩ tiếp xem sao. :)

 

Ban thu nghien cuu doan ma xem thu nhe

 

http://forums.augi.com/showthread.php?t=60673

  • 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

(defun Open()

(setq file1 (acet-ui-getfile "Open file" (getvar "DWGPREFIX") "dwg" "Drawing files" 0))

(If File1

(Progn

(setq kq (open "c:/windows/temp/open.txt" "w"))

(write-line file1 kq) (close kq)

(Command "vbarun" "module1.mofile_Open")

)

)

)

...Sau đó Bạn viết Module1 bằng VBA để đọc tên file và mở bản vẽ, cái này chắc Bạn viết được.

(dùng hàm ThisDrawing.Application.Documents.Open (tenfile))

Không biết mình có nhầm hay không, nhưng hình như bạn đã hiểu nhầm ý của nataca

Vuvuzela: Mình cũng không tìm thấy đoạn code đóng 1 thư mục trong link bạn gửi.

 

Ban đầu thì ý tưởng của bọn mình là kiểm tra xem window có đang mở thư mục chứa file bản vẽ hiện hành hay không? nếu có thì khi gõ lệnh QE sẽ không mở thêm nữa bởi sau khi dùng lệnh này 1 thời gian sẽ nảy sinh tính lười, không chịu đưa con chuột xuống start bar để mở thử mục có sẵn lên, vài lần QE là start bar đã chật kín. các bạn thử giải quyết theo hướng này xem thế nào.

PS: nếu dùng (startapp "explorer.exe"(getvar "DWGPREFIX")) thì không fải lăn tăn gì về vấn đề này.

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

Không biết mình có nhầm hay không, nhưng hình như bạn đã hiểu nhầm ý của nataca

Vuvuzela: Mình cũng không tìm thấy đoạn code đóng 1 thư mục trong link bạn gửi.

 

Ban đầu thì ý tưởng của bọn mình là kiểm tra xem window có đang mở thư mục chứa file bản vẽ hiện hành hay không? nếu có thì khi gõ lệnh QE sẽ không mở thêm nữa bởi sau khi dùng lệnh này 1 thời gian sẽ nảy sinh tính lười, không chịu đưa con chuột xuống start bar để mở thử mục có sẵn lên, vài lần QE là start bar đã chật kín. các bạn thử giải quyết theo hướng này xem thế nào.

PS: nếu dùng (startapp "explorer.exe"(getvar "DWGPREFIX")) thì không fải lăn tăn gì về vấn đề này.

 

Vô mục này theo dõi tiếp nhé

http://www.cadtutor.net/forum/showthread.php?58129-How-to-open-and-close-a-Folder-by-visual-lisp

:rolleyes:

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ủ topic đó là 1 thằng tây tên nataca bác ạ. Chả biết nó có họ hàng gì với mod nataca của cadviet không nữa :D

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

Không biết mình có nhầm hay không, nhưng hình như bạn đã hiểu nhầm ý của nataca

:) à vấn đề là thế này. Trong quá trình làm việc Mình cũng hay gặp khó chịu như Nataca đó là đang vẽ bản vẽ nằm ở thư mục d:\ve\nha1 nhưng khi dùng lệnh open để mở thêm 1 bản vẽ trong thư mục đó nhưng nó lại hiện lên 1 thư mục khác ví dụ c:\nha1\nha2... làm mât công phải bật đi tìm thư mục d:\ve\nha1 nên hơi lâu. bạn Nataca định dùng pp Explore để mở thư mục d:\ve\nha1 lên và mở file từ Explore đó xong rồi muốn đóng Explore lại nhưng chưa làm được. Mình hiểu như vậy không biết có đúng ý Nataca không?

Hôm qua Mình vừa tìm thấy trên Cadviet đoạn chương trình nyà hy vọng giải quyết trọn vẹn đước vấn đề mà không cần DVB

(defun c:openFile (/ doc file-opened fileName openflag)

(vl-load-com)

(setq doc (vla-get-documents (vlax-get-acad-object)) openFlag F

fileName (getfiled "File to Open" (getvar "DWGPREFIX") "dwg" 16)

)

(vlax-for dwg doc

(if (= (vla-get-FullName dwg) fileName)(setq file-opened dwg openFlag T))

)

(if (not openFlag) (setq file-opened (vla-open doc fileName)))

(vla-activate file-opened)

(princ)

)

...các Bạn thử xem 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ấn đề là thế này. Trong quá trình làm việc Mình cũng hay gặp khó chịu như Nataca đó là đang vẽ bản vẽ nằm ở thư mục d:\ve\nha1 nhưng khi dùng lệnh open để mở thêm 1 bản vẽ trong thư mục đó nhưng nó lại hiện lên 1 thư mục khác ví dụ c:\nha1\nha2... làm mât công phải bật đi tìm thư mục d:\ve\nha1 nên hơi lâu. bạn Nataca định dùng pp Explore để mở thư mục d:\ve\nha1 lên và mở file từ Explore đó xong rồi muốn đóng Explore lại nhưng chưa làm được. Mình hiểu như vậy không biết có đúng ý Nataca không?

Hôm qua Mình vừa tìm thấy trên Cadviet đoạn chương trình nyà hy vọng giải quyết trọn vẹn đước vấn đề mà không cần DVB

(defun c:openFile (/ doc file-opened fileName openflag)

(vl-load-com)

(setq doc (vla-get-documents (vlax-get-acad-object)) openFlag F

fileName (getfiled "File to Open" (getvar "DWGPREFIX") "dwg" 16)

)

(vlax-for dwg doc

(if (= (vla-get-FullName dwg) fileName)(setq file-opened dwg openFlag T))

)

(if (not openFlag) (setq file-opened (vla-open doc fileName)))

(vla-activate file-opened)

(princ)

)

...các Bạn thử xem nhé!

Đoạn code trên có thể viết lại bằng autolisp rất đơn giản. đúng là bạn đã hiểu sai ý của nataca cũng như mục đích của việc làm này.

ý của nataca đơn thuần chỉ là đóng cái cửa sổ Explorer nếu nó đang mở ở thư mục chứa bản vẽ hiện hành. nghĩa là khi gõ lệnh QE thì chương trình sẽ đóng thư mục ấy rồi lại mở nó lên. nghe thì ngớ ngẩn nhưng việc này nhằm tránh mở 1 thư mục bằng nhiều cửa sổ.

Việc tạo ra lệnh mở thư mục này mục đích cũng không như bạn nghĩ. trong quá trình làm việc có thể chúng ta fải truy xuất một số file khác nữa ngoài dwg (excel, word...) cùng nằm trong thư mục bản vẽ hoặc trong 1 thư mục cùng cấp với thư mục bản vẽ. khi đó lệnh này giúp ta đỡ được 1 chút mệt mỏi vì fải dò dẫm đi tìm cái thư mục mình cầ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

minh có doạn con nay ai huong dan minh với cảm ơn mọi ng nhiu nhá

minh dang rat can

("open" ("d:\\kqdd\\gcn_to1\\23.dwg")(1)

minh muon sửa

("open" ("d:\\kqdd\\gcn_i\\j.dwg")(2)

i.j la 2 bien nhap tu command de mo linh

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

×