明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7422|回复: 23

[提问] 简单的自定面板如何回车重复上次命令

[复制链接]
发表于 2018-1-12 22:51:11 | 显示全部楼层 |阅读模式
新手求助,简单的自定面板如何回车重复上次命令,而不是重复打开面板
简单的面板代码原地址:http://bbs.mjtd.com/thread-84942-1-1.html
感谢szmaicy开源了这么优秀的面板代码。

本帖被以下淘专辑推荐:

发表于 2018-1-14 13:29:03 | 显示全部楼层
关键就是下面两句。
  1. (Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'SendCommand (strcat tt " "))
  2.               ;(Vlax-Invoke-Method (Vlax-Get-Or-Create-Object "WScript.Shell" ) 'Sendkeys (strcat tt "{Enter}"))
复制代码
回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-17 12:31:57 | 显示全部楼层
casd 发表于 2018-1-17 08:40
非常方便,再请教一下,autool有个功能就算固定一个命令重复面板调用的命令。比如q,也可以重复面板调用 ...

方法有很多。。。
比如这一种。
  1. ;修改版,向飞诗学习
  2. (defun c:xxx ()
  3.   (mai_make_panel
  4.     (list
  5.       (list "梁"
  6.             (list "画    梁" "circle") ;(list  按钮标签  运行的命令)
  7.             (list "单线变梁" "mini_line_to_beam")
  8.             (list "筏板梁倒角" "mini_foundation_beam")
  9.             (list "修补梁柱" "mini_fix_beam")
  10.             (list "修补双线" "mini_fix_dline")
  11.             (list "框选修补线" "mini_fix_line")
  12.       ) ;_ 结束list
  13.       (list "柱"
  14.             (list " + 型柱" "mini_c_column")
  15.             (list " L 型柱" "mini_l_column")
  16.             (list " T 型柱" "mini_t_column")
  17.             (list " ○ 型柱" "mini_O_column")
  18.             (list " □ 型柱" "mini_r_column")
  19.             (list "轴线布柱" "mini_axis_column")
  20.             (list "填 充 柱" "mini_fill_column")
  21.             (list "墙体填充" "mini_fill_wall")
  22.             (list "转PKPM GS柱" "mini_pline_to_beam")
  23.             (list "多线变柱" "mini_pline_to_column")
  24.       ) ;_ 结束list
  25.     ) ;_ 结束list
  26.   ) ;_ 结束mai_mak_panel
  27.   (princ)
  28. )


  29. (defun mai_make_panel ( menulist / n num_nobut num_button nn nnn menuname val_lst add_dclrow tt order_lst in num_image)
  30.   (defun add_dclrow ( dstr / ) (if dstr (setq val_lst (cons dstr val_lst))))
  31.   (setq menuname (strcat (vl-filename-mktemp) "temp_pannel.dcl"))
  32.   (add_dclrow "curbutton:button{width=10;vertical_margin=none;vertical_margin=none;}")
  33.   (add_dclrow "curimage:image{width=10;height=0.2;vertical_margin=none;vertical_margin=none;}")
  34.   (add_dclrow "curpanel:dialog{label=\"迷你自定义面板\";alignment=centered;vertical_margin=none;horizontal_margin=none;")
  35.   (add_dclrow ":row{")
  36.   (setq len (apply 'max (mapcar 'length menulist))
  37.         order_lst (apply 'append (mapcar 'cdr menulist))
  38.         num_button 0
  39.         num_nobut 0
  40.         in 0
  41.         num_image 0
  42.   )
  43.   (foreach nn menulist
  44.         (setq in 0)
  45.         (add_dclrow (strcat " : boxed_column{label=\"" (car nn) "\";vertical_margin=none; horizontal_margin=none;"))
  46.         (foreach nnn (cdr nn)
  47.            (setq num_button (1+ num_button)
  48.                  in (1+ in)
  49.                  num_image (1+ num_image)
  50.                  tt (car nnn)
  51.                  tt (if tt tt "")
  52.            )
  53.            (add_dclrow (strcat ":curbutton{label=\"" tt "\";key=\"but" (itoa num_button) "\";}"))
  54.            (if (= 4 in)
  55.                (progn (add_dclrow (strcat ":curimage{key=\"ima" (itoa num_image) "\";color=18;}"))
  56.                       (setq in 0)
  57.                )
  58.            )
  59.         )
  60.         (repeat (- len (length nn))
  61.            (setq num_nobut (1+ num_nobut)
  62.                  in (1+ in)
  63.                  num_image (1+ num_image)
  64.            )
  65.            (add_dclrow (strcat " : curbutton{key=\"butno" (itoa num_nobut) "\";color=-2;}"))
  66.            (if (= 4 in)
  67.                (progn (add_dclrow (strcat ":curimage{key=\"ima" (itoa num_image) "\";}"))
  68.                       (setq in 0)
  69.                )
  70.            )
  71.         )
  72.         (add_dclrow "spacer;}")
  73.   )
  74.    (add_dclrow "}:button{label=\"关闭\";key=\"cancel\";is_cancel=true;width=10;fixed_width=true;alignment=centered;}}")
  75.    (vl-file-delete menuname)
  76.    (setq nn (open menuname "w"))
  77.    (foreach n (reverse val_lst) (write-line n nn))
  78.    (close nn)
  79.    (setq nnn (load_dialog menuname))
  80.    (if (not (new_dialog "curpanel" nnn)) (exit))
  81.    (setq n 0)
  82.    (repeat num_nobut (mode_tile (strcat "butno" (itoa num_nobut)) 1) (setq num_nobut (1- num_nobut)))
  83.   (foreach nn menulist
  84.         (foreach nnn (cdr nn)
  85.            (setq n (1+ n)
  86.                  tt (car nnn)
  87.                  tt (if tt tt "")
  88.            )
  89.            (if (= tt "")
  90.                (mode_tile (strcat "but" (itoa n)) 1)
  91.                (action_tile (strcat "but" (itoa n)) (strcat "\(done_dialog " (itoa n) "\)"))
  92.            )
  93.         )
  94.   )
  95.    (setq nn (start_dialog))
  96.    (unload_dialog nnn)
  97.    (vl-file-delete menuname)
  98.   (if (> nn 0)
  99.        (progn (setq tt (cadr (nth (1- nn) order_lst)))
  100.               (princ "\n")
  101.               (eval(read (strcat "(defun c:q()(Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'SendCommand (strcat \"" tt "\" \" \"))))")))
  102.              
  103.               (Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument) 'SendCommand (strcat tt " "))
  104.               ;(Vlax-Invoke-Method (Vlax-Get-Or-Create-Object "WScript.Shell" ) 'Sendkeys (strcat tt "{Enter}"))              
  105.        )
  106.    )
  107. )
发表于 2018-1-14 13:25:12 | 显示全部楼层
ljwsyzf 发表于 2018-1-13 13:05
大神,怎么直接面板发生命令?有具体操作吗?我新白一个!

  1. ;修改版,向飞诗学习
  2. (defun c:xxx ()
  3.   (mai_make_panel
  4.     (list
  5.       (list "梁"
  6.             (list "画    梁" "circle") ;(list  按钮标签  运行的命令)
  7.             (list "单线变梁" "mini_line_to_beam")
  8.             (list "筏板梁倒角" "mini_foundation_beam")
  9.             (list "修补梁柱" "mini_fix_beam")
  10.             (list "修补双线" "mini_fix_dline")
  11.             (list "框选修补线" "mini_fix_line")
  12.       ) ;_ 结束list
  13.       (list "柱"
  14.             (list " + 型柱" "mini_c_column")
  15.             (list " L 型柱" "mini_l_column")
  16.             (list " T 型柱" "mini_t_column")
  17.             (list " ○ 型柱" "mini_O_column")
  18.             (list " □ 型柱" "mini_r_column")
  19.             (list "轴线布柱" "mini_axis_column")
  20.             (list "填 充 柱" "mini_fill_column")
  21.             (list "墙体填充" "mini_fill_wall")
  22.             (list "转PKPM GS柱" "mini_pline_to_beam")
  23.             (list "多线变柱" "mini_pline_to_column")
  24.       ) ;_ 结束list
  25.     ) ;_ 结束list
  26.   ) ;_ 结束mai_mak_panel
  27.   (princ)
  28. )


  29. (defun mai_make_panel ( menulist / n num_nobut num_button nn nnn menuname val_lst add_dclrow tt order_lst in num_image)
  30.   (defun add_dclrow ( dstr / ) (if dstr (setq val_lst (cons dstr val_lst))))
  31.   (setq menuname (strcat (vl-filename-mktemp) "temp_pannel.dcl"))
  32.   (add_dclrow "curbutton:button{width=10;vertical_margin=none;vertical_margin=none;}")
  33.   (add_dclrow "curimage:image{width=10;height=0.2;vertical_margin=none;vertical_margin=none;}")
  34.   (add_dclrow "curpanel:dialog{label=\"迷你自定义面板\";alignment=centered;vertical_margin=none;horizontal_margin=none;")
  35.   (add_dclrow ":row{")
  36.   (setq len (apply 'max (mapcar 'length menulist))
  37.         order_lst (apply 'append (mapcar 'cdr menulist))
  38.         num_button 0
  39.         num_nobut 0
  40.         in 0
  41.         num_image 0
  42.   )
  43.   (foreach nn menulist
  44.         (setq in 0)
  45.         (add_dclrow (strcat " : boxed_column{label=\"" (car nn) "\";vertical_margin=none; horizontal_margin=none;"))
  46.         (foreach nnn (cdr nn)
  47.            (setq num_button (1+ num_button)
  48.                  in (1+ in)
  49.                  num_image (1+ num_image)
  50.                  tt (car nnn)
  51.                  tt (if tt tt "")
  52.            )
  53.            (add_dclrow (strcat ":curbutton{label=\"" tt "\";key=\"but" (itoa num_button) "\";}"))
  54.            (if (= 4 in)
  55.                (progn (add_dclrow (strcat ":curimage{key=\"ima" (itoa num_image) "\";color=18;}"))
  56.                       (setq in 0)
  57.                )
  58.            )
  59.         )
  60.         (repeat (- len (length nn))
  61.            (setq num_nobut (1+ num_nobut)
  62.                  in (1+ in)
  63.                  num_image (1+ num_image)
  64.            )
  65.            (add_dclrow (strcat " : curbutton{key=\"butno" (itoa num_nobut) "\";color=-2;}"))
  66.            (if (= 4 in)
  67.                (progn (add_dclrow (strcat ":curimage{key=\"ima" (itoa num_image) "\";}"))
  68.                       (setq in 0)
  69.                )
  70.            )
  71.         )
  72.         (add_dclrow "spacer;}")
  73.   )
  74.    (add_dclrow "}:button{label=\"关闭\";key=\"cancel\";is_cancel=true;width=10;fixed_width=true;alignment=centered;}}")
  75.    (vl-file-delete menuname)
  76.    (setq nn (open menuname "w"))
  77.    (foreach n (reverse val_lst) (write-line n nn))
  78.    (close nn)
  79.    (setq nnn (load_dialog menuname))
  80.    (if (not (new_dialog "curpanel" nnn)) (exit))
  81.    (setq n 0)
  82.    (repeat num_nobut (mode_tile (strcat "butno" (itoa num_nobut)) 1) (setq num_nobut (1- num_nobut)))
  83.   (foreach nn menulist
  84.         (foreach nnn (cdr nn)
  85.            (setq n (1+ n)
  86.                  tt (car nnn)
  87.                  tt (if tt tt "")
  88.            )
  89.            (if (= tt "")
  90.                (mode_tile (strcat "but" (itoa n)) 1)
  91.                (action_tile (strcat "but" (itoa n)) (strcat "\(done_dialog " (itoa n) "\)"))
  92.            )
  93.         )
  94.   )
  95.    (setq nn (start_dialog))
  96.    (unload_dialog nnn)
  97.    (vl-file-delete menuname)
  98.   (if (> nn 0)
  99.        (progn (setq tt (cadr (nth (1- nn) order_lst)))
  100.               (princ "\n")
  101.               (Vlax-Invoke-Method (Vlax-Get-Or-Create-Object "WScript.Shell" ) 'Sendkeys (strcat tt "{Enter}"))              
  102.        )
  103.    )
  104. )
发表于 2018-1-13 00:09:53 | 显示全部楼层
在注册表增加一个记录
发表于 2018-1-13 08:49:20 | 显示全部楼层
能不能说一下注册表增加记录的操作呢
发表于 2018-1-13 08:56:10 | 显示全部楼层
要多次重复执行同一个命令,可以在命令行中输入“multiple”按空格键,此时显示提示信息“输入要重复的命令”输入命令后会显示命令提示,根据只是操作完成之后,还会再一次执行这个命令,直到按“ESC”键退出。
 楼主| 发表于 2018-1-13 09:04:33 | 显示全部楼层
winerfjy 发表于 2018-1-13 08:56
要多次重复执行同一个命令,可以在命令行中输入“multiple”按空格键,此时显示提示信息“输入要重复的命令 ...

要重新输入命令,那就失去直接回车的意义了。我是想要直接回车就能重复命令
发表于 2018-1-13 12:45:10 来自手机 | 显示全部楼层
简单,直接面板发送命令,右键或回车重复
 楼主| 发表于 2018-1-13 13:05:36 | 显示全部楼层
myjping 发表于 2018-1-13 12:45
简单,直接面板发送命令,右键或回车重复

大神,怎么直接面板发生命令?有具体操作吗?我新白一个!

点评

见edata的说法,定义一个发送函数,对话框直接发送命令  发表于 2018-1-14 19:48
发表于 2018-1-14 17:08:22 | 显示全部楼层
((= re 101) (vla-sendcommand(vla-get-activedocument(vlax-get-acad-object))(strcat "HT_101 ")))
http://bbs.mjtd.com/thread-175204-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-26 20:56 , Processed in 0.238023 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表