乐筑天下

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

[编程交流] 弹出菜单(取消菜单)

[复制链接]

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 14:54:24 | 显示全部楼层 |阅读模式
你好
 
我有一个lisp来写多行文字,但在它执行之前,用户可以用弹出的弹出菜单从不同的比例中选择。
用户也可以选择另一个,可以是一个数字,可能像123348等。。。等
 
我错过的是,我不能确切地做到这是进入这个弹出菜单文本“取消”,如果用户选择它,它取消了命令,然后再继续制作多行文字。
 
这是我弹出窗口的来源。lsp I中没有“取消”。。我只是写了这个例子。
你需要DOSlib
 
或者当点击ESC时,它就会消失。。。我现在做不到。我必须选择比例
 
  1. (Defun PopupScale ()
  2. (setq x (list "Choose scale:"       ""  "1:1"     "1:2"
  3. "1:5"    "1:10"     "1:20"  "1:50"     "1:100"
  4. "1:200"    "1:500"    ""  "Another..."  [color=red][b]"Cancel"[/b][/color]
  5.        )
  6. ChoosedScale nil
  7. scale nil
  8. controlscale
  9. nil
  10. )
  11. (while (or (not ChoosedScale) (= ChoosedScale 0))
  12.    (setq ChoosedScale (dos_popupmenu x))
  13. )
  14. (IF (= ChoosedScale (- (length x) 3))
  15.    (while (not scale)
  16.      (setq scale (dos_getstring "Choose another:" "Write a custom scale:"))
  17.      (IF (wcmatch scale "*=*,*:*")
  18. (setq scale (substr scale 3))
  19.      )
  20.      (setq controlscale (wcmatch scale "*@*"))
  21.      (IF controlscale
  22. (Alert "You have typed a wrong number. \nCould be a letter"
  23. )
  24.      )
  25.    )
  26.    (IF (not (= ChoosedScale (- (length x) 4))) ; last scale
  27.      (setq scale (substr (nth (1+ ChoosedScale) x) 3))
  28.      (setq scale (substr (nth (- (length x) 3) x)
  29.     3
  30.    )
  31.      )
  32.    )
  33. )
  34. )
回复

使用道具 举报

31

主题

107

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
155
发表于 2022-7-6 15:31:19 | 显示全部楼层
它的dos_弹出菜单。。。
 
隐马尔可夫模型。。这可能是不可能的。。。。在DOSLib帮助中找不到任何内容。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 16:24:17 | 显示全部楼层
 
没有什么是不可能的。这与doslib函数无关,如果没有填充所有必需的变量,您只需停止程序继续。
 
您还应该使用cond代替几个if语句。这是你吃的东西的一个修改版本,我把骨架放在一起,只加了肉和土豆。哦,与其通过零化变量来开始一个例程,不如从……开始本地化它们。。。。
  1. (defun PopupMenu (/ scalelist ChosenScale scale)
  2. (setq scalelist (list "Choose scale:"         ""          "1:1"
  3.                        "1:2"       "1:5"       "1:10"      "1:20"
  4.                        "1:50"      "1:100"     "1:200"     "1:500"
  5.                        ""          "Another..."            "Cancel"
  6.                       ) ;_ list
  7. ) ;_ setq
  8. (while
  9.    (or (not ChosenScale)
  10.        (= 0 ChosenScale)
  11.    ) ;_ or
  12.     (setq ChosenScale (dos_popupmenu scalelist))
  13. ) ;_ while
  14. (cond
  15.    ((>= 9 ChosenScale)
  16.     ;; a scale from list chosen
  17.     (princ (strcat "\nYou chose: " (rtos ChosenScale)))
  18.     ;; Do stuff here
  19.    )
  20.    ;; "Another..." chosen
  21.    ((= 10 ChosenScale)
  22.     ;; Do stuff here
  23.     (princ (strcat "\nYou chose: " (rtos ChosenScale)))
  24.    )
  25. ) ;_ cond
  26. (if scale
  27.    ;; Proceed with routine
  28.    (princ "\nLet us do more!")
  29.    (princ "\nUser Quit")
  30. ) ;_ if
  31. (princ)
  32. ) ;_ defun
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 22:04 , Processed in 0.900475 second(s), 58 queries .

© 2020-2025 乐筑天下

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