乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: Aftertouch

[编程交流] '警报#039;带foc的盒子

[复制链接]
rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:18:25 | 显示全部楼层
你需要一个可固定的属性窗口。现在想想,像OpenDcl这样的东西是没有出路的
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-5 16:24:37 | 显示全部楼层
如果您不介意使用第三方插件,DOSLIB允许您在系统托盘区域的无模式窗口中向用户呈现消息。
 

                               
登录/注册后可看大图
回复

使用道具 举报

238

主题

769

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1721
发表于 2022-7-5 16:25:49 | 显示全部楼层
你能分享一些关于无模式窗口工作原理的代码吗?这很巧妙。所以从理论上讲,当你运行一系列命令时,它可以保持不变?
 
 
基本上,说明步骤1。。。这样做。。。。第2步。。。这样做。。。等
回复

使用道具 举报

238

主题

769

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1721
发表于 2022-7-5 16:29:50 | 显示全部楼层
 
 
 
 
我在看GRTEXT DCL模式。我似乎不知道如何在警报框中放置彩色文本,因为页面上显示了最后一个演示。
 
 
有什么想法吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:34:45 | 显示全部楼层
 
请参阅程序页面顶部提供的示例程序(GrDialogDemo.lsp)。
回复

使用道具 举报

238

主题

769

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1721
发表于 2022-7-5 16:35:04 | 显示全部楼层
对不起,李。。。看起来不像往常。我的错。
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-5 16:40:44 | 显示全部楼层
 
是的,您可以重复调用此函数,每次使用不同的文本。函数的一个参数是保持可见的时间。
回复

使用道具 举报

238

主题

769

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1721
发表于 2022-7-5 16:41:46 | 显示全部楼层
主要是在用户同时使用xattach多个DWG时,寻找弹出的幻灯片。
 
 
现在,警报出现了,但我点击ok(哈哈,有时)忘记了它要求我附加什么。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:47:41 | 显示全部楼层
只是为了好玩,而不是为了最佳效率而编码,只是为了便于阅读
 

                               
登录/注册后可看大图

 
  1. ; just some lunchtime fun - rlx 11 dec 2017
  2. ; uses reactor / grread / entmake (Mtext) to emulate autoscale messenger box
  3. ; minor update on 12 dec : added c key in grread-loop to change background color
  4. ; minor update on 13 dec : killed bug , dropped font and added F9 functionality to grread loop
  5. ;                        : couldn't resist , added transparency
  6. (defun c:rlxmessenger  (/ loop gr_input    ent messenger-entity messenger-insertion-point transparency-list messenger-title
  7.            messenger-text-height messenger-body-text messenger-background-color messenger-alignment-code messenger-transparency)
  8. (init_messenger)
  9. (setq loop t)
  10. (while loop
  11.    (setq gr_input (vl-catch-all-apply 'grread (list nil 8 0)))
  12.    ; oh dear , user pressed panic button
  13.    (if    (vl-catch-all-error-p gr_input)
  14.      (progn (princ "\nFunction cancelled") (setq loop nil) (bye-bye)))
  15.    (cond ((user_pressed_lmouse_button)
  16.       (if (setq ent (nentselp (cadr gr_input)))
  17.         (_show (entget (car ent)))
  18.         (princ "\ryou missed...")))
  19.      ((user_pressed_rmouse_button) (setq loop nil) (bye-bye))
  20.      ((user_pressed_c) (change_messenger_background_color))
  21.      ((user_pressed_e) (command "zoom" "e") (update_messenger))
  22.      ((user_pressed_z) (command "'zoom" "") (update_messenger))
  23.      ((user_pressed_+) (command "zoom" "2x") (update_messenger))
  24.      ((user_pressed_-) (command "zoom" ".5x") (update_messenger))
  25.      ((user_pressed_f9) (toggle_snapmode))
  26.      ((user_pressed_tab) (cycle_transparency_list))
  27.      ((user_pressed_space) (relocate_messenger)))))
  28. (defun init_messenger  ()
  29. (setq    transparency-list '(33554661 33554636 33554610 33554585 33554559 33554534 33554508)
  30.    messenger-reactor (vlr-command-reactor nil '((:vlr-commandended . endcommand)))
  31.    messenger-insertion-point (getvar "viewctr")
  32.    messenger-text-height (/ (getvar "VIEWSIZE") 100.0)
  33.    messenger-title    "Basic properties "
  34.    messenger-background-color 2
  35.    messenger-alignment-code 5
  36.    messenger-transparency (car transparency-list))
  37. (defun *error* (m) (redraw) (bye-bye))
  38. (create_messenger_entity
  39.    messenger-insertion-point
  40.    "Messenger Rlx dec 2017 "
  41.    messenger-text-height
  42.    '("Click on any entity to display its prop's" "During execution use following keys"    "+/-/e/z used for zoom"
  43.      "space to select messenger location" "c to change background color" "Tab for transparency" "Left mouse button to select entity"
  44.      "Right mouse button to exit")
  45.    messenger-background-color
  46.    messenger-alignment-code)
  47. (redraw)
  48. (prompt "\nPress any key to begin")
  49. (grread)
  50. (if messenger-entity
  51.    (progn (entdel messenger-entity) (setq messenger-entity nil)))
  52. (princ))
  53. (defun bye-bye    ()
  54. (if messenger-entity (progn (entdel messenger-entity) (setq messenger-entity nil)))
  55. (if (and messenger-reactor (vlr-added-p messenger-reactor)) (vlr-remove messenger-reactor))
  56. (princ "\nbye-bye") (redraw) (princ))
  57. (defun get_screen_corners  (/ vc vs ss dx dy x- x+ y- y+)
  58. ; dX = height * ratio (/ x-pixels y-pixels)
  59. (setq    vc (getvar "VIEWCTR") vs (getvar "VIEWSIZE") ss (getvar "SCREENSIZE")
  60.    dx (* vs (/ (car ss) (cadr ss)) 0.5) dy (* vs 0.5))
  61. ; four corner points display
  62. (setq    x- (- (car vc) dx) x+ (+ (car vc) dx) y- (- (cadr vc) dy) y+ (+ (cadr vc) dy))
  63. (list x- x+ y- y+))
  64. ; pl = pointlist xmin , xmax , ymin & ymax. Devide screen in 3x3 matrix to find aligment
  65. (defun select_messenger_alignment  (/ pnt pl x y x- x+ y- y+ dx dy va ho alignment)
  66. (setq pnt (getpoint "\nSelect position for messenger screen :"))
  67. ; first get corners of autocad screen with (Get_Screen_Corners)
  68. (setq    x  (car pnt) y (cadr pnt) pl (get_screen_corners)
  69.    x- (car pl) x+ (cadr pl) y- (caddr pl) y+ (last pl)
  70.    dx (/ (- x+ x-) 3) dy (/ (- y+ y-) 3))
  71. (cond    ((< x (+ x- dx)) (setq ha "Left" x  x-))
  72.    ((< x (+ x- (* dx 2))) (setq ha "Center" x (car (getvar "VIEWCTR"))))
  73.    (t (setq ha "Right" x  x+)))
  74. (cond    ((< y (+ y- dy)) (setq va "Bottom" y  y-))
  75.    ((< y (+ y- (* dy 2))) (setq va "Middle" y (cadr (getvar "VIEWCTR"))))
  76.    (t (setq va "Top" y  y+)))
  77. (setq    alignment
  78.     (cond ((equal ha "Left")   (cond ((equal va "Top") 1) ((equal va "Middle") 4) ((equal va "Bottom") 7)))
  79.           ((equal ha "Center") (cond ((equal va "Top") 2) ((equal va "Middle") 5) ((equal va "Bottom") ))
  80.           ((equal ha "Right")  (cond ((equal va "Top") 3) ((equal va "Middle") 6) ((equal va "Bottom") 9)))))
  81. ; if you want attachmentpoint as string (e.g. "acAttachmentPointTopLeft" or "acAttachmentPointTopCenter") use this
  82. ; (setq atm-point (strcat "acAttachmentPoint" va ha))
  83. ; in order to use this i.c.w. vla-put-AttachmentPoint convert it with (eval (read atm-point))
  84. ; (list atm-point (list x y))
  85. ; 'acAttachmentPointTopLeft etc is a constant (int) , 1-9 , so aligment contains this code
  86. ; this is later used in (Create_messenger_entity) when constructing the entity list (elist) , (cons 71 atc) , attachmentpoint code
  87. (list alignment (list x y 0.0)))
  88. (defun calcumus     (/ pl x y x- y- x+ y+ xc yc)
  89. ; first get corners of autocad screen with (Get_Screen_Corners)
  90. (setq    pl (get_screen_corners)
  91.    x- (car pl) x+ (cadr pl) y- (caddr pl) y+ (last pl) xc (car (getvar "viewctr"))    yc (cadr (getvar "viewctr")))
  92. (cond    ((= messenger-alignment-code 1) (setq x x- y y+)) ; TopLeft
  93.    ((= messenger-alignment-code 2) (setq x xc y y+)) ; TopCenter
  94.    ((= messenger-alignment-code 3) (setq x x+ y y+)) ; TopRight
  95.    ((= messenger-alignment-code 4) (setq x x- y yc)) ; MiddleLeft
  96.    ((= messenger-alignment-code 5) (setq x xc y yc)) ; MiddelCenter
  97.    ((= messenger-alignment-code 6) (setq x x+ y yc)) ; MiddelRight
  98.    ((= messenger-alignment-code 7) (setq x x- y y-)) ; BottomLEft
  99.    ((= messenger-alignment-code  (setq x xc y y-)) ; BottomCenter
  100.    ((= messenger-alignment-code 9) (setq x x+ y y-)) ; BottomRight
  101.    (t (setq x xc y yc messenger-alignment-code 5))
  102. )
  103. (setq    messenger-insertion-point (list x y 0.0) messenger-text-height (/ (getvar "VIEWSIZE") 100))
  104. )
  105. (defun endcommand  (calling-reactor endcommandinfo / cmd)
  106. (setq cmd (nth 0 endcommandinfo))
  107. (if (member cmd '("PAN" "ZOOM" "RTZOOM")) (calcumus) (update_messenger)) (princ))
  108. ; here you add all the props you want to see. The result should be a list of strings the messenger box (mtext)
  109. ; will scale to match (of course add 100 lines and this obviously wont work...)
  110. (defun _show  (%e)
  111. (setq messenger-body-text (list (strcat "Entity type  : " (cdr (assoc 0 %e))) (strcat "Entity layer : " (cdr (assoc 8 %e)))))
  112. (calcumus) (update_messenger))
  113. ; %pnt = point , $tts = title string , #th = text height , %bsl = body string list , #bgc = background colour
  114. ; atc = attachement code (alignment)
  115. (defun create_messenger_entity    (%pnt $tts #th %bsl #bgc atc / msg str fnt elist)
  116. ; you can use a font for messenger box but I'm not sure it looks better
  117. ; (setq fnt "{\\fArial|b0|i0|c0|p0;" msg (strcat fnt "\\H" (rtos #th) "x;\\L\\C250;" $tts "\\l\\H0.75x;\n"))
  118. (setq msg (strcat "\\C250;\\L" $tts "\\l\n")) ; black color (250 for text and underline for title
  119. (foreach str %bsl (setq msg (strcat msg "\n" str)))
  120. (setq msg (strcat msg "}")) ; the order of the elist seems to matter... change order and you may end up with empty mtext
  121. (setq    elist (list '(0 . "MTEXT") '(100 . "AcDbEntity") (cons 440 messenger-transparency) '(100 . "AcDbMText")
  122.            (cons 10 %pnt) (cons 1 msg) '(90 . 1)(cons 63 #bgc) (cons 40 (/ (getvar "VIEWSIZE") 30.0))
  123.            (cons 71 atc) '(72 . 5) '(441 . 0)))
  124. (setq messenger-entity (entmakex elist))
  125. ; also possible to use vla-put i.c.w. for example "acAttachmentPointTopLeft"
  126. ; downside of this can be that alignment is changed after mtext is placed, not before
  127. ; (vla-put-AttachmentPoint (vlax-ename->vla-object messenger-entity) (eval (read atc)))
  128. )
  129. (defun relocate_messenger  (/ aligment-data)
  130. (if messenger-entity
  131.    (progn (entdel messenger-entity) (setq messenger-entity nil)))
  132. (setq    aligment-data (select_messenger_alignment) messenger-alignment-code (car aligment-data)
  133.    messenger-insertion-point (last aligment-data))
  134. (update_messenger))
  135. (defun update_messenger     ()
  136. (if messenger-entity
  137.    (progn (entdel messenger-entity) (setq messenger-entity nil)))
  138. (create_messenger_entity
  139.    messenger-insertion-point messenger-title messenger-text-height messenger-body-text    messenger-background-color messenger-alignment-code))
  140. (defun change_messenger_background_color  (/ col)
  141. (if (setq col (acad_colordlg messenger-background-color))
  142.    (progn (setq messenger-background-color col) (update_messenger))))
  143. (defun toggle_snapmode () (setvar "snapmode" (if (= (getvar "snapmode") 1) 0 1)))
  144. ; transparency:
  145. ; 10 % = (440 . 33554661) , 20 % = (440 . 33554636) , 30 % = (440 . 33554610) 40 % = (440 . 33554585)
  146. ; 50 % = (440 . 33554559) , 60 % = (440 . 33554534) , 70 % = (440 . 33554508) , 80 % = (440 . 33554483) , 90 % = (440 . 33554457)
  147. ; difference is 25.5 per 10% so 0 % (solid) would (theoretically) be 33554686 and 100% (invissible) would be 33554432
  148. (defun cycle_transparency_list    ()
  149. (setq    transparency-list      (append (cdr transparency-list) (list (car transparency-list)))
  150.    messenger-transparency (car transparency-list))
  151. (update_messenger))
  152. ; maybe not efficient to use extra defun's but hey, autodesk uses predefined constants etc all the time so bite me
  153. ; just don't go over board and put the entire alphabet here
  154. (defun user_pressed_+ ()(if (equal gr_input '(2 43)) t nil))
  155. (defun user_pressed_- ()(if (equal gr_input '(2 45)) t nil))
  156. (defun user_pressed_c ()(if (member gr_input '((2  99) (2 67))) t nil))
  157. (defun user_pressed_e ()(if (member gr_input '((2 101) (2 69))) t nil))
  158. (defun user_pressed_x ()(if (member gr_input '((2 120) (2 88))) t nil))
  159. (defun user_pressed_z ()(if (member gr_input '((2 122) (2 90))) t nil))
  160. (defun user_pressed_f9    () (if (equal gr_input '(2 2)) t  nil))
  161. (defun user_pressed_tab      () (if (equal gr_input '(2 9)) t nil))
  162. (defun user_pressed_enter () (if (equal gr_input '(2 13)) t nil))
  163. (defun user_pressed_space () (if (equal gr_input '(2 32)) t nil))
  164. (defun user_pressed_lmouse_button  () (if (= (car gr_input) 3) t nil))
  165. (defun user_pressed_rmouse_button  () (if (= (car gr_input) 25) t nil))
  166. ;(c:rlxmessenger)
Rlx级。
 
 
12月13日更新:消除了错误,丢弃了字体,添加到grread循环c键中,用于背景色和F9,以便能够关闭快照
164512dph9r9vkhldds44d.png
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 00:15 , Processed in 0.734845 second(s), 81 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表