明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 22460|回复: 46

[【不死猫】] [原创作品]模仿面向对象实现动态DCL代码生成器(开源)

    [复制链接]
发表于 2014-9-16 17:51:22 | 显示全部楼层 |阅读模式
本帖最后由 不死猫 于 2015-3-22 22:52 编辑

动态DCL的方法有很多,我曾经也发过3种制作的方案.
今天带来的是更加直观的模仿面向对象,为控件赋属性的方法.
定义函数如下:
(dcl-make 名称)
用于定义一个新的dcl控件
(dcl-put 控件 属性 值)
用于设置控件的属性
(dcl-get 控件 属性)
用于获取控件的属性
(dcl-add 控件 子控件)
用于把子控件添加到父控件上面

这几个函数源码在下面提供免费下载.
源码免币下载:

====================================
简单测试1
  1. (defun c:tt1()
  2.   (vl-load-com)
  3. ;定义控件并设置属性
  4.   (setq dialog (dcl-make "dialog"))
  5.   (dcl-put 'dialog "name" "test")
  6.   (dcl-put 'dialog "label" "测试1")
  7.   
  8.   (setq button1 (dcl-make "button"))
  9.   (dcl-put 'button1 "key" "button1")
  10.   (dcl-put 'button1 "label" "点我")
  11.   (dcl-put 'button1 "width" "20")
  12.   (dcl-put 'button1 "height" "1")
  13. ;定义完成
  14.   
  15. ;从内向外添加
  16.   (dcl-add 'dialog 'button1)
  17.   
  18. ;制作
  19.   (setq dcl (dcl-convert dialog))
  20.   (dcl-show dcl)
  21. )
执行结果:
简单测试2
  1. (defun c:tt2()
  2.   (vl-load-com)
  3. ;定义控件并设置属性
  4.   (setq dialog (dcl-make "dialog"))
  5.   (dcl-put 'dialog "name" "test")
  6.   (dcl-put 'dialog "label" "test")
  7.   
  8.   (setq boxed_column1 (dcl-make "boxed_column"))
  9.   (dcl-put 'boxed_column1 "label" "ok")
  10.   
  11.   (setq edit_box1 (dcl-make "edit_box"))
  12.   (dcl-put 'edit_box1 "key" "editbox1")
  13.   (dcl-put 'edit_box1 "label" "输入1")
  14.   (dcl-put 'edit_box1 "width" "20")
  15.   (dcl-put 'edit_box1 "height" "1")
  16.   
  17.   (setq edit_box2 (dcl-make "edit_box"))
  18.   (dcl-put 'edit_box2 "key" "editbox2")
  19.   (dcl-put 'edit_box2 "label" "输入2")
  20.   (dcl-put 'edit_box2 "width" "20")
  21.   (dcl-put 'edit_box2 "height" "1")
  22. ;定义完成
  23.   
  24. ;从内向外添加
  25.   (dcl-add 'boxed_column1 'edit_box1)
  26.   (dcl-add 'boxed_column1 'edit_box2)
  27.   (dcl-add 'dialog 'boxed_column1)
  28.   
  29. ;制作
  30.   (setq dcl (dcl-convert dialog))
  31.   (dcl-show dcl)
  32. )
执行结果:
简单测试3
  1. (defun c:tt3()
  2.   (vl-load-com)
  3. ;定义控件并设置属性
  4.   (setq dialog (dcl-make "dialog"))
  5.   (dcl-put 'dialog "name" "test")
  6.   (dcl-put 'dialog "label" "test")
  7.   
  8.   (setq boxed_column1 (dcl-make "boxed_column"))
  9.   (dcl-put 'boxed_column1 "label" "ok")
  10.   (setq boxed_row1 (dcl-make "boxed_row"))
  11.   (dcl-put 'boxed_row1 "label" "列表")
  12.   
  13.   (setq edit_box1 (dcl-make "edit_box"))
  14.   (dcl-put 'edit_box1 "key" "editbox1")
  15.   (dcl-put 'edit_box1 "label" "输入1")
  16.   (dcl-put 'edit_box1 "width" "20")
  17.   (dcl-put 'edit_box1 "height" "1")
  18.   
  19.   (setq edit_box2 (dcl-make "edit_box"))
  20.   (dcl-put 'edit_box2 "key" "editbox2")
  21.   (dcl-put 'edit_box2 "label" "输入2")
  22.   (dcl-put 'edit_box2 "width" "20")
  23.   (dcl-put 'edit_box2 "height" "1")
  24.   
  25.   (setq edit_box3 (dcl-make "list_box"))
  26.   (dcl-put 'edit_box3 "key" "list_box1")
  27.   (dcl-put 'edit_box3 "width" "20")
  28.   (dcl-put 'edit_box3 "height" "20")
  29. ;定义完成
  30.   
  31. ;从内向外添加
  32.   (dcl-add 'boxed_column1 'edit_box1)
  33.   (dcl-add 'boxed_column1 'edit_box2)
  34.   (dcl-add 'boxed_row1 'edit_box3)
  35.   (dcl-add 'dialog 'boxed_column1)
  36.   (dcl-add 'dialog 'boxed_row1)
  37.   
  38. ;制作
  39.   (setq dcl (dcl-convert dialog))
  40.   (dcl-show dcl)
  41. )
执行结果
下面玩个小循环
  1. (defun c:tt4()
  2. ;定义控件并设置属性
  3.   (setq dialog (dcl-make "dialog"))
  4.   (dcl-put 'dialog "name" "test")
  5.   (dcl-put 'dialog "label" "测试4")
  6.   (setq i 1 num 10)
  7.   (repeat num
  8.     (set (read (strcat "boxed_column" (itoa i))) (dcl-make "boxed_column"))
  9.     (dcl-put (read (strcat "boxed_column" (itoa i))) "label" ":)")
  10.     (setq i (1+ i))
  11.   )

  12.   (setq i 1)
  13.   (repeat num
  14.     (set (read (strcat "button" (itoa i))) (dcl-make "button"))
  15.     (dcl-put (read (strcat "button" (itoa i))) "key" (strcat "button" (itoa i)))
  16.     (dcl-put (read (strcat "button" (itoa i))) "label" (strcat "点我" (itoa i)))
  17.     (dcl-put (read (strcat "button" (itoa i))) "width" "20")
  18.     (dcl-put (read (strcat "button" (itoa i))) "height" "1")
  19.     (setq i (1+ i))
  20.   )
  21. ;定义完成
  22.   
  23. ;从内向外添加
  24.   (setq i 1)
  25.   (repeat (1- num)
  26.     (dcl-add (read (strcat "boxed_column" (itoa i))) (read (strcat "button" (itoa i))))
  27.     (dcl-add (read (strcat "boxed_column" (itoa (1+ i)))) (read (strcat "boxed_column" (itoa i))))
  28.     (setq i (1+ i))
  29.   )
  30.   (dcl-add 'dialog (read (strcat "boxed_column" (itoa i))))
  31.   
  32. ;制作
  33.   (setq dcl (dcl-convert dialog))
  34.   (dcl-show dcl)
  35. )
执行结果:

源代码写了56行,就直接发了.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 6明经币 +11 金钱 +110 收起 理由
wangph + 1 + 50 神马都是浮云
spp_wall + 1 赞一个!
qjchen + 2 + 30 很给力!
zctao1966 + 1 很给力!
xiaxiang + 3 很给力!
Gu_xl + 3 + 30 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2020-2-24 10:01:19 | 显示全部楼层
猫老师的作品,我是需要三顾才能明白,几年后再来
发表于 2017-12-17 13:53:14 | 显示全部楼层
跟随猫老师的脚步,慢慢学习
发表于 2020-7-1 09:59:24 | 显示全部楼层
支持,很给力
发表于 2014-9-16 17:55:04 来自手机 | 显示全部楼层
猫老师又出精品了
 楼主| 发表于 2014-9-16 18:00:26 | 显示全部楼层
横向的控件制作  只需添加一个row即可
  1. (defun c:tt22()
  2. ;定义控件并设置属性
  3.         (setq dialog (dcl-make "dialog"))
  4.         (dcl-put 'dialog "name" "test")
  5.         (dcl-put 'dialog "label" "test")
  6.        
  7.         (setq boxed_column1 (dcl-make "boxed_column"))
  8.         (dcl-put 'boxed_column1 "label" "ok")
  9.         (setq row1 (dcl-make "row"))
  10.        
  11.         (setq edit_box1 (dcl-make "edit_box"))
  12.         (dcl-put 'edit_box1 "key" "editbox1")
  13.         (dcl-put 'edit_box1 "label" "输入1")
  14.         (dcl-put 'edit_box1 "width" "20")
  15.         (dcl-put 'edit_box1 "height" "1")
  16.        
  17.         (setq edit_box2 (dcl-make "edit_box"))
  18.         (dcl-put 'edit_box2 "key" "editbox2")
  19.         (dcl-put 'edit_box2 "label" "输入2")
  20.         (dcl-put 'edit_box2 "width" "20")
  21.         (dcl-put 'edit_box2 "height" "1")
  22. ;定义完成
  23.        
  24. ;从内向外添加
  25.         (dcl-add 'row1 'edit_box1)
  26.         (dcl-add 'row1 'edit_box2)
  27.         (dcl-add 'boxed_column1 'row1)
  28.         (dcl-add 'dialog 'boxed_column1)
  29.        
  30. ;制作
  31.         (setq dcl (dcl-convert dialog))
  32.         (dcl-show dcl)
  33. )
 楼主| 发表于 2014-9-16 18:01:14 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-9-16 18:13:15 | 显示全部楼层
不错,很好的示例
发表于 2014-9-16 19:26:24 | 显示全部楼层
猫兄又鼓捣出新东西了
发表于 2014-9-16 19:55:36 | 显示全部楼层
哇!又有好东西了!支持。
发表于 2014-9-16 20:23:30 | 显示全部楼层
不错的思路
发表于 2014-9-16 20:44:55 | 显示全部楼层
支持一个!
发表于 2014-9-16 20:44:58 | 显示全部楼层
好东西都要玩隐藏。

点评

那就不隐藏好啦  发表于 2014-9-16 22:50
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:20 , Processed in 0.315779 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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