Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
10 replies to this topic

#1 dkkx3a

dkkx3a

    biết lệnh trim

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

Đã gửi 09 September 2010 - 10:52 PM

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...
  • 0
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#2 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 10 September 2010 - 12:32 PM

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.
  • 1

#3 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 10 September 2010 - 02:48 PM

Ồ, 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.
  • 0

#4 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 10 September 2010 - 06:04 PM

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.
  • 1

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


#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 September 2010 - 06:34 PM

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).
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 dkkx3a

dkkx3a

    biết lệnh trim

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

Đã gửi 10 September 2010 - 07:06 PM

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...........
  • 0
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#7 hoa35ktxd

hoa35ktxd

    biết lệnh move

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

Đã gửi 11 September 2010 - 07:07 AM

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.
  • 0

#8 18011985

18011985

    biết lệnh properties

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

Đã gửi 11 September 2010 - 09:13 AM

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.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#9 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 11 September 2010 - 08:21 PM

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))

  • 2

#10 dkkx3a

dkkx3a

    biết lệnh trim

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

Đã gửi 12 September 2010 - 09:49 AM

Thanks, thật tuyệt vời........
  • 0
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#11 18011985

18011985

    biết lệnh properties

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

Đã gửi 13 September 2010 - 12:40 PM

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.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.