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

Định vị trí hộp thoại trên màn hình

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

Các bác cho em hỏi khi viết dialog làm sao để cho nó không hiện ngay chính giữa màn hình mà nằm ở các vị trí khác như chệch về góc duới chẳng hạn... Mong các bac giải đáp hộ em, cảm ơn các bác trước...

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ác bác cho em hỏi khi viết dialog làm sao để cho nó không hiện ngay chính giữa màn hình mà nằm ở các vị trí khác như chệch về góc duới chẳng hạn... Mong các bac giải đáp hộ em, cảm ơn các bác trước...

Tham khảo hàm new_dialog

(new_dialog dlgname dcl_id [action [screen-pt]])

vị trí của Dialog đuợc gán giá trị tại tùy chọn screen-pt.

 

Help : screen-pt

A 2D point list that specifies the X,Y location of the dialog box on the screen.

The point specifies the upper-left corner of the dialog box.

If you pass the point as'(-1 -1), the dialog box is opened in the default position (the center of the AutoCAD drawing area).

 

screen-pt là danh sách điểm(X,Y) của kích thuớc màn hình (không phải kích thuớc cửa sổ CAD)

 

VD : (new_dialog dlgname dcl_id "" (list 0 0))

-> dialog sẽ xuất hiện tại góc trên cùng phía trái của màn hình.

  • 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

Ồ, cái này trước đây tôi cũng đau đầu không gải quyết được.

TopLeft thì Ok nhưng các vị trí khác thì chịu do không tính được kích thước Form.

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

Trong hàm new_dialog thì tham số screen-pt theo mình hiểu được tính bằng đơn vị pixel. gốc tại top-left. Như vậy bottom-right sẽ phụ thuộc vào độ phân giải màn hình của bạn.

Trước đây mình có lần định viết code giúp lấy giá trị tọa độ vị trí hiện thời của con trỏ theo hệ tọa độ của màn hình nhưng thất bại vì không làm cách nào để lấy được độ phân giải hiện thời của màn hình.

  • 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

Có nhất thiết lấy theo độ phân giải của màn hình không ạ ?Khi cad không ở chế độ maximize thì sao?Theo e nghĩ thì nên lấy theo viewport,vì e thấy Sceensize trong cad

 

Type: 2D-point

Saved in: Not-saved

Initial value: Varies

 

 

Stores current viewport size in pixels (X and 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
Tham khảo hàm new_dialog

(new_dialog dlgname dcl_id [action [screen-pt]])

vị trí của Dialog đuợc gán giá trị tại tùy chọn screen-pt.

 

Help : screen-pt

A 2D point list that specifies the X,Y location of the dialog box on the screen.

The point specifies the upper-left corner of the dialog box.

If you pass the point as'(-1 -1), the dialog box is opened in the default position (the center of the AutoCAD drawing area).

 

screen-pt là danh sách điểm(X,Y) của kích thuớc màn hình (không phải kích thuớc cửa sổ CAD)

 

VD : (new_dialog dlgname dcl_id "" (list 0 0))

-> dialog sẽ xuất hiện tại góc trên cùng phía trái của màn hình.

 

Cảm ơn GiaBach đã giải đáp, nhưng em chỉ mang được hộp thoại ở góc trên trái thôi, trong khi em muốn nó ở goc trên phải và chếch xuống dưới một tí vì nó nhìn thuận thuận mắt mà, Phiền Giabach và các bác biết chỉ hộ em cụ thể tí nữa không ạ, em lên "sợt" trên "Gu gồ" mà không được, cảm ơn các bác...........

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

Trong VBA thì xơi em này đơn giản hơn vì nó cho phép truy xuất ScreenSize và FormSize nhưng trong Lisp thì tôi cũng đã tìm toét mắt mà không thấy nên không căn được vị tri của Form.

Hy vọng sẽ có người tìm ra.

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 GiaBach đã giải đáp, nhưng em chỉ mang được hộp thoại ở góc trên trái thôi, trong khi em muốn nó ở goc trên phải và chếch xuống dưới một tí vì nó nhìn thuận thuận mắt mà, Phiền Giabach và các bác biết chỉ hộ em cụ thể tí nữa không ạ, em lên "sợt" trên "Gu gồ" mà không được, cảm ơn các bác...........

Hệ trục căn chỉnh dialog trong CAD theo pixels như sau

Hệ trục X O Y vị trí gốc nằm ở góc trái bên trên của màn hình.

Chiều tăng của trục X có chiều từ Trái sang Phải.

Chiều tăng của trục Y có chiều từ trên xuống dưới.

Còn tuỳ thuộc vào chế độ phân giải và kích thước màn hình của bạn mà vị trí cũng khác nhau.

Ví dụ đối với màn hình vuông độ phân giải 1024 x 768 pixels thì vị trí của bạn yêu cầu là '(535 90)

Nhưng bạn chú ý khi bạn thay đổi độ phân giải hoặc đem lsp đến máy khác có độ phân giải không giống như bạn đã cài đặt thì nó sẽ nằm ở vị trí không như ý.

PS: chú ý nhớ chừa diện tích dialog chiếm chỗ nếu dialog không nằm trong màn hình, CAD tự động đưa về giữa màn hình. Chúc bạn mau chóng 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
Cảm ơn GiaBach đã giải đáp, nhưng em chỉ mang được hộp thoại ở góc trên trái thôi, trong khi em muốn nó ở goc trên phải và chếch xuống dưới một tí vì nó nhìn thuận thuận mắt mà, Phiền Giabach và các bác biết chỉ hộ em cụ thể tí nữa không ạ, em lên "sợt" trên "Gu gồ" mà không được, cảm ơn các bác...........

dkkx3a tham khảo VD về cố định vị trí hộp thoại.

Chạy LISP, Bạn thử di chuyển hộp thoại đến vị trí khác -> click OK (đóng hộp thoại)

Chạy lại LISP, hộp thoại sẽ xuất hiện tại vị trí truớc khi thoát LISPhiển thị tọa độ (X,Y) của hộp thoại truớc khi thoát LISP

Chú ý :

- t/hợp sau khi bạn di chuyển mà hộp thoại không nằm toàn bộ trong màn hình, CAD tự động đưa về giữa màn hình.

- VD này sử dụng file DCL tạm (không cần file DCL cũng hiển thị được hộp thoại)

(defun c:DiaPos (/ fil_tmp fn dcl_id)
 (princ "HopThoai : dialog { label = \"Vi tri Hop thoai\"; : text  { key = \"DiaXY\"; }  ok_only; }"
 (setq fn (open (setq fil_tmp (vl-filename-mktemp "HopThoai.tmp")) "w")))
 (close fn)
 (setq dcl_id (load_dialog fil_tmp))
 (if (not (if DiaXY (new_dialog "HopThoai" dcl_id "" DiaXY)(new_dialog "HopThoai" dcl_id)))(exit))
 (if DiaXY (set_tile "DiaXY" (vl-princ-to-string DiaXY)))  
 (action_tile "accept" "(setq DiaXY (done_dialog))")
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete fil_tmp)
 (princ))

  • 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
dkkx3a tham khảo VD về cố định vị trí hộp thoại.

Chạy LISP, Bạn thử di chuyển hộp thoại đến vị trí khác -> click OK (đóng hộp thoại)

Chạy lại LISP, hộp thoại sẽ xuất hiện tại vị trí truớc khi thoát LISPhiển thị tọa độ (X,Y) của hộp thoại truớc khi thoát LISP

Chú ý :

- t/hợp sau khi bạn di chuyển mà hộp thoại không nằm toàn bộ trong màn hình, CAD tự động đưa về giữa màn hình.

- VD này sử dụng file DCL tạm (không cần file DCL cũng hiển thị được hộp thoại)

(defun c:DiaPos (/ fil_tmp fn dcl_id)
 (princ "HopThoai : dialog { label = \"Vi tri Hop thoai\"; : text  { key = \"DiaXY\"; }  ok_only; }"
 (setq fn (open (setq fil_tmp (vl-filename-mktemp "HopThoai.tmp")) "w")))
 (close fn)
 (setq dcl_id (load_dialog fil_tmp))
 (if (not (if DiaXY (new_dialog "HopThoai" dcl_id "" DiaXY)(new_dialog "HopThoai" dcl_id)))(exit))
 (if DiaXY (set_tile "DiaXY" (vl-princ-to-string DiaXY)))  
 (action_tile "accept" "(setq DiaXY (done_dialog))")
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete fil_tmp)
 (princ))

Rất hay thanks bác. Nhưng bác cho em hỏi nếu sang máy khác độ phân giải khác thì nó sẽ nhảy ra giữa hoặc ở vị trí rất khó coi, liệu có cách nào để lấy thông tin về độ phân giải của máy không bác.

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  

×