明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: yxp

[OpenDCL] 用grid控件实现简单的表格输入(源码)

[复制链接]
发表于 2014-10-14 18:21:33 | 显示全部楼层
谢谢了,一直没有搞明白
发表于 2015-10-31 17:39:05 | 显示全部楼层
学习了一下,也在上面修改了一下,通过读取文本录入数据
  1. (DEFUN c:test ( /  )
  2. ;文本数据格式:
  3. ;钢管 123 65.8
  4. ;钢板 1232 78
  5. ;混凝土 121 34

  6. ; (setq gVar '( ("钢管"     "1724"    "65.8")
  7. ;             ("钢筋"     "26.23"   "4564.3")
  8. ;            ("模板"     "1853"  "9.7")
  9.   ;           ("混凝土1" "449.2" "370")
  10.    ;          ("混凝土2" "449.2" "380")
  11.     ;         ("混凝土3" "454.2" "300")
  12.      ;        ("混凝土4" "1002" "390")
  13.       ;       ("混凝土5" "449.2" "390" )
  14. ;       ))


  15. ;;=================================
  16. (setq gVar nil)
  17. (if        (and (setq FILE        (getfiled "选择参数数据文件:名称 数量 单价"
  18.                                   ""
  19.                                   "txt"
  20.                                   4
  21.                         )
  22.              )
  23.              ;;读模式打开lsp文件
  24.              (setq F1 (open FILE "r"))
  25. )
  26.         (progn
  27.             ;;逐行读入
  28.      (while (setq STR (read-line F1))
  29.                (setq LST (read (strcat "(" STR ")")))
  30.             (setq LST_s (list (mapcar 'vl-prin1-to-string LST)) )
  31. ;(setq LST_s (mapcar 'vl-prin1-to-string '(钢筋 2 3 4) ));这个对于汉字可行;返回("钢筋" "2" "3" "4" )
  32. ;(setq LST_Cc (mapcar 'itoa lst ));这个对于数字可行
  33.           ;  (setq LST_s (mapcar 'itoa 'LST) )
  34.                 (if (= (length LST) 3)  (setq gVar (append LST_s gVar ))  );end if
  35.              );end while
  36.     );end progn
  37. (close File)
  38. );end if
  39. (setq gVar (reverse gVar))
  40. ;;;;=================================

  41.   (setvar "CMDECHO" 0)
  42.   (if (null (vl-symbol-value 'dcl_getversionex))  (loadRtime))

  43.   ;; (Dcl_Project_Import (vl-get-resource "test.odcl"))   ;;程序打包时使用

  44.    (dcl_Project_Load "test.odcl")  ;;调试时使用,编译时屏蔽
  45.    (dcl_FORM_SHOW test_Dtest)
  46.        ;;控制交给对话框
  47.    (dcl_Project_Unload "test")  

  48. Reture
  49. )



  50. (defun c:test_Dtest_OnInitialize (/)

  51.   (setq i (length gvar)) ;;默认数据的长度
  52.   ;(setq i (length LST_CS)) ;;默认数据的长度
  53.   (Odcl_Grid_full_Fun i)
  54. (Odcl_Grid_Set_Fun gvar)   ;;默认赋值
  55. ;(Odcl_Grid_Set_Fun LST_CS)   ;;默认赋值

  56. ;;初始化下拉列表
  57. (dcl_Control_SetList test_Dtest_ComboBox1 '("1" "2" "3" "4" "5" "6" "7" "8" "9" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
  58. (dcl_ComboBox_SetCurSel test_Dtest_ComboBox1 (- i 1))
  59. )



  60. (defun c:test_Dtest_Grid1_OnSelChanged (nRow nCol /)
  61.   (dcl_Control_SetText test_Dtest_TextBox1 (dcl_Grid_GetCellText test_Dtest_Grid1  nRow nCol))
  62. )





  63. ;;返回下拉列表的值,填充Grid
  64. (defun c:test_Dtest_ComboBox1_OnSelChanged (ItemIndexOrCount Value /)
  65.   (setq i (atoi Value))
  66.   (Odcl_Grid_full_Fun i)
  67. )


  68. ;;计算
  69. (defun c:test_Dtest_Cmd2_OnClicked (/)

  70.   (setq na (dcl_Grid_GetRowCount test_Dtest_Grid1)) ;;行
  71.   (setq a 0)
  72.   (repeat na
  73.            (dcl_Grid_SetCellText test_Dtest_Grid1 a 4 (rtos
  74.             (* (atof (dcl_Grid_GetCellText test_Dtest_Grid1 a 2))
  75.            (atof (dcl_Grid_GetCellText test_Dtest_Grid1 a 3)))))
  76.           (setq a (+ a 1))
  77.   )
  78.    (setq Reture (Odcl_Grid_Get_Fun))
  79. )


  80. ;;填充Grid列表框函数
  81. (defun Odcl_Grid_full_Fun(i / a b c)
  82.   (setq a 0)
  83.   (dcl_Grid_Clear test_Dtest_Grid1) ;;清除

  84.   (repeat i (Dcl_Grid_Addrow test_Dtest_Grid1 (itoa (setq a (+ a 1))) "") )
  85. (setq b 1)  ;;列
  86. (repeat 4   ;;按列
  87.        (setq a 0)
  88.        (repeat i   
  89.            (if (= b 1)(setq c 6)(setq c 9))
  90.            (dcl_Grid_SetCellStyle test_Dtest_Grid1 a b c)
  91.        (setq a (+ a 1))
  92.    )(setq b (+ b 1))
  93. )
  94. )


  95. ;;给Grid赋值
  96. (defun Odcl_Grid_Set_Fun( va / a b)
  97. (setq a 0 ) ;;行
  98. (repeat (length va)
  99.      (setq b 0)  ;;列
  100.      (repeat (length (nth 0 va))
  101.          (dcl_Grid_SetCellText test_Dtest_Grid1 a (+ b 1) (nth b (nth a va)))
  102.          (setq b (+ b 1))
  103.      )
  104.     (setq a (+ a 1))
  105.   )  
  106. )


  107. ;;提取Grid数据
  108. (defun Odcl_Grid_Get_Fun( / na nb a b ab sab)
  109.   (setq na (dcl_Grid_GetRowCount test_Dtest_Grid1)) ;;行
  110.   (setq nb (dcl_Grid_GetColumnCount test_Dtest_Grid1)) ;;列
  111. (setq Sab '() ab '())
  112. (setq a 0)
  113. (repeat na
  114.       (setq b 0)
  115.       (repeat nb
  116.              (setq ab (cons (dcl_Grid_GetCellText test_Dtest_Grid1 a b) ab))
  117.              (setq b (+ b 1))
  118.       )
  119.      (setq Sab (cons (reverse ab) Sab))
  120.      (setq a (+ a 1))
  121.      (setq ab '())
  122. )
  123.   (setq Sab (reverse Sab));reverse 函数是将表的顺序反向
  124. )


  125. ;;关闭主窗口
  126. (defun c:Untitled_dtest_cmd1_OnClicked (/)
  127. (dcl_Form_Close test_Dtest)
  128. )



  129. ;;禁止回车键关闭窗口,但会使窗口右上角的 x 关闭按钮失效
  130. (defun c:test_Dtest_OnCancelClose (Reason /)
  131.   (/= Reason T)
  132. )


  133. ;;加载 OpenDCL.xx.arx链接库文件
  134. (defun loadRtime ( / acadversion arxname dclarxfile)
  135.   (setq acadversion (substr (getvar "acadver") 1 2))
  136.   (setq arxname (strcat "OpenDCL."acadversion".arx"))
  137.   (setq dclarxfile (findfile arxname))
  138.   (if (and (= (member arxname (arx) ) nil) (/= dclarxfile nil))
  139.      (arxload dclarxfile)
  140.      (alert (strcat "\n找不到" arxname "文件,请确认OpenDCL文件是否放在acad搜索路径中" ))
  141.   )
  142. )


发表于 2016-1-7 13:16:08 | 显示全部楼层
这个怎么用
发表于 2016-4-12 21:39:39 | 显示全部楼层
yxp 发表于 2013-7-7 23:15
初学,这是我的第一个练习的ODCL
新的odcl在这里
http://bbs.mjtd.com/thread-101970-1-1.html

请问单元格有没有某行(或者某个单无格被点击的事件或状态?
发表于 2016-4-27 21:17:00 | 显示全部楼层
学习谢谢楼主
发表于 2016-6-4 03:27:11 | 显示全部楼层
这插件很给力,谢谢分享。
发表于 2017-8-29 19:06:22 | 显示全部楼层
楼主,请教一下,OPENDCL的表格   (dcl_Grid_SetCellText aaa_Form2_格1 2 1 "ddddffff")  用这个无法赋值啊,。好像我打开对话框,默认表格是不可编辑的状态
发表于 2017-10-4 20:18:39 | 显示全部楼层
感谢楼主的无私分享 谢谢
发表于 2018-4-14 08:50:46 | 显示全部楼层

学习了,顶楼主一个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 08:43 , Processed in 0.171403 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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