明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1813|回复: 6

[提问] DCL文本框不能多行显示?怎么办啊~~~~

[复制链接]
发表于 2014-9-2 11:19 | 显示全部楼层 |阅读模式
DCL文本框不能多行显示?怎么办啊~~~~
目前用个列表框来代替文本框。可是中文又遇到了麻烦~~~
  1. ;分割较长文本,填到listbox,用于弥补DCL对话框editbox不能多行显示的缺陷。
  2. ;分割中文时,请注意n用偶数,否则会出错。
  3. (defun str-lst(str n / lst a)
  4.   (setq lst '())
  5. (while (> (strlen str) 0)
  6.      (setq a (substr str 1 n)
  7.            lst (cons a lst)
  8.            str (substr str (1+ n))
  9.          )
  10.   )
  11. (reverse lst)
  12. )

  13. ;测试1,成功!
  14. (setq str "斐波那契数列也叫黄金分割数列,从第三项开始值为前两项之和")
  15. (str-lst str 20)
  16. ;测试2,失败!
  17. (setq str "斐波那契数列也叫黄金分割数列,从第三项开始值为前两项之和")
  18. (str-lst str 20)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-9-2 12:28 | 显示全部楼层
换行显示"\n"
发表于 2014-9-2 20:35 | 显示全部楼层
第二个测试通不过是因为中间有个半角逗号。
 楼主| 发表于 2014-9-2 21:59 | 显示全部楼层
ZZXXQQ 发表于 2014-9-2 20:35
第二个测试通不过是因为中间有个半角逗号。

测试时故意弄上去的.
z版主,如何修改啊~~~
 楼主| 发表于 2014-9-2 22:05 | 显示全部楼层
substr分割的时候,按字符算,中文算两个字符,
如果中间夹杂着英文或英文符号,就会把中文截成一半,怎么整啊~~~
 楼主| 发表于 2014-9-2 22:44 | 显示全部楼层
从梁大师哪里找到思路,先分割成单字,然后在组合!!~~
        (if (> (ascii (setq nn (substr str 1 1))) 160)
          (setq nn (substr str 1 2)
                  str (substr str 3)
                  )
          (setq str (substr str 2))
        )
 楼主| 发表于 2014-9-2 22:45 | 显示全部楼层
做个笔记,明天弄
  1. (defun stringtolist (sss / a_data a_list)
  2.   (setq acadversion (getvar "acadver"))
  3.   (cond
  4.     ((or
  5.        (= 17.0 (atof (substr acadversion 1 4)))
  6.        (and
  7.          (= 17.2 (atof (substr acadversion 1 4)))
  8.          (/= (ver) "Visual LISP 2009 (en)")
  9.        )
  10.      )
  11.       (while (/= sss "")
  12.         (setq a_data (logand 224 (ascii sss)))
  13.         (if (> (ascii (setq nn (substr sss 1 1))) 160)
  14.           (setq nn (substr sss 1 2)
  15.                 sss (substr sss 3)
  16.           )
  17.           (setq sss (substr sss 2))
  18.         )
  19.         (setq a_list (append
  20.                        a_list
  21.                        (list nn)
  22.                      )
  23.         )
  24.       )
  25.     )
  26.     (t
  27.       (while (/= sss "")
  28.         (setq a_data (logand 224 (ascii sss)))
  29.         (if (or
  30.               (= a_data 224)
  31.               (= a_data 128)
  32.             )
  33.           (progn
  34.             (setq a_list (append
  35.                            a_list
  36.                            (list (substr sss 1 2))
  37.                          )
  38.             )
  39.             (setq sss (substr sss 3))
  40.           )
  41.           (progn
  42.             (if (> (ascii (setq nn (substr sss 1 1))) 160)
  43.               (setq nn (substr sss 1 2)
  44.                     sss (substr sss 3)
  45.               )
  46.               (setq sss (substr sss 2))
  47.             )
  48.             (setq a_list (append
  49.                            a_list
  50.                            (list nn)
  51.                          )
  52.             )
  53.           )
  54.         )
  55.       )
  56.     )
  57.   )
  58.   a_list
  59. )
  60. (defun listtostring (lll / newstring)
  61.   (setq newstring "")
  62.   (while (/= lll nil)
  63.     (setq newstring (strcat newstring (car lll)))
  64.     (setq lll (cdr lll))
  65.   )
  66.   newstring
  67. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-23 19:31 , Processed in 0.302376 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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