1. (defun c:tt () ; 此部分是测试代码用
    2. (main_load)
    3. (print bl)
    4. (print zg)
    5. (print bh)
    6. )
    7. //-------------------------------------
    8. (defun main_load (/ *error* dcl_file dcl_id dialog_return e_h e_v key keys)
    9. (vl-load-com)
    10. (setq dcl_id (load_dialog (setq Dcl_File (dclfile_load)))) ; 对话框加载
    11. (vl-file-delete Dcl_File) ; 加载后删除DCL文件
    12. (setq Dialog_Return 10)
    13. (while (> Dialog_Return 1) ; 循环控制对话框是否结束
    14. (new_dialog "dcl_bg" dcl_id) ; 建立窗体
    15. ; --->--->---对话框初始化--->--->---
    16. (setq keys '("e_bl" "e_zg" "e_h" "e_v" "e_bh"
    17. "e_x1" "e_y1"
    18. "e_x2" "e_y2"
    19. "but_s1" "but_s2"
    20. "accept" "cancel"
    21. )
    22. ) ; 列表全部控件名称
    23. (foreach key keys ; 全部控件的初始化
    24. (cond
    25. ((= key "e_bl") ; {"图纸比例"} (输入框)
    26. (if (eval (read (strcat key "_bak")))
    27. (set_tile key (eval (read (strcat key "_bak"))))
    28. (set_tile key "20.0")
    29. ) ; 控件内容
    30. ()
    31. )
    32. ((= key "e_zg") ; {"字体高度"} (输入框)
    33. (if (eval (read (strcat key "_bak")))
    34. (set_tile key (eval (read (strcat key "_bak"))))
    35. (set_tile key "2.50")
    36. ) ; 控件内容
    37. ()
    38. )
    39. ((= key "e_h") ; {"横向"} (单选按钮)
    40. (if (eval (read (strcat key "_bak")))
    41. (set_tile key (eval (read (strcat key "_bak"))))
    42. (set_tile key "1")
    43. ) ; 控件内容
    44. (setq e_h (atoi (get_tile "e_h")))
    45. (setq e_v (atoi (get_tile "e_v")))
    46. )
    47. ((= key "e_v") ; {"纵向"} (单选按钮)
    48. (if (eval (read (strcat key "_bak")))
    49. (set_tile key (eval (read (strcat key "_bak"))))
    50. ) ; 控件内容
    51. (setq e_h (atoi (get_tile "e_h")))
    52. (setq e_v (atoi (get_tile "e_v")))
    53. )
    54. ((= key "e_bh") ; {"起始坐标编号"} (输入框)
    55. (if (eval (read (strcat key "_bak")))
    56. (set_tile key (eval (read (strcat key "_bak"))))
    57. (set_tile key "0")
    58. ) ; 控件内容
    59. ()
    60. )
    61. ((= key "e_x1") ; {"X(mm)"} (输入框)
    62. (if (eval (read (strcat key "_bak")))
    63. (set_tile key (eval (read (strcat key "_bak"))))
    64. (set_tile key "0.00")
    65. ) ; 控件内容
    66. ()
    67. )
    68. ((= key "e_y1") ; {"Y(mm)"} (输入框)
    69. (if (eval (read (strcat key "_bak")))
    70. (set_tile key (eval (read (strcat key "_bak"))))
    71. (set_tile key "0.00")
    72. ) ; 控件内容
    73. ()
    74. )
    75. ((= key "e_x2") ; {"X(mm)"} (输入框)
    76. (if (eval (read (strcat key "_bak")))
    77. (set_tile key (eval (read (strcat key "_bak"))))
    78. (set_tile key "0.00")
    79. ) ; 控件内容
    80. ()
    81. )
    82. ((= key "e_y2") ; {"Y(mm)"} (输入框)
    83. (if (eval (read (strcat key "_bak")))
    84. (set_tile key (eval (read (strcat key "_bak"))))
    85. (set_tile key "0.00")
    86. ) ; 控件内容
    87. ()
    88. )
    89. )
    90. )
    91. (foreach key keys ; 全部控件的点击动作触发
    92. (action_tile key "(Action_Keys $key $value)") ; 点击动作 $reason
    93. )
    94. ; ---<---<---对话框初始化完成---<---<---
    95. ;====================================
    96. (if but_s1
    97. (progn
    98. (set_tile "e_x1" (rtos (car but_s1)))
    99. (set_tile "e_y1" (rtos (cadr but_s1))
    100. )
    101. )
    102. )
    103. (if but_s2
    104. (progn
    105. (set_tile "e_x2" (rtos (car but_s2)))
    106. (set_tile "e_y2" (rtos (cadr but_s2))
    107. )
    108. )
    109. )
    110. ;====================================
    111. (setq Dialog_Return (start_dialog));开启对话框(用户可见)
    112. ;====================================
    113. (cond
    114. ((= Dialog_Return 2)(setq but_s1 (getpoint)))
    115. ((= Dialog_Return 3)(setq but_s2 (getpoint)))
    116. )
    117. ;====================================
    118. )
    119. (unload_dialog dcl_id) ; 退出时卸载对话框
    120. (cond
    121. ((= Dialog_Return 1)
    122. (cond
    123. ((= e_h 1)
    124. (start "横向")
    125. )
    126. ((= e_v 1)
    127. (start "纵向")
    128. )
    129. );end cond
    130. );1
    131. ((= Dialog_Return 0)
    132. (princ "\n*取消*")
    133. );0
    134. );end cond
    135. (prin1) ; 防止函数回显
    136. )
    137. //-------------------------------------
    138. (defun Action_Keys (key value) ; 全部控件的点击动作触发
    139. (cond
    140. ((= key "accept") ; {"确认按钮"}
    141. (get_data)
    142. (setq bl (atoi (get_tile "e_bl")))
    143. (setq zg (atoi (get_tile "e_zg")))
    144. (setq bh (atoi (get_tile "e_bh")))
    145. (done_dialog 1) ; 对话框退出返回主函数 传递给Dialog_Return值为1
    146. )
    147. ((= key "cancel") ; {"取消按钮"}
    148. (done_dialog 0) ; 对话框退出返回主函数 传递给Dialog_Return值为0
    149. )
    150. ((= key "help") ; {"帮助按钮"}
    151. () ;
    152. )
    153. ((= key "info") ; {"信息按钮"}
    154. () ;
    155. )
    156. ((= key "e_bl") ; {"图纸比例"} (输入框)
    157. ()
    158. )
    159. ((= key "e_zg") ; {"字体高度"} (输入框)
    160. ()
    161. )
    162. ((= key "e_h") ; {"横向"} (单选按钮)
    163. (setq e_h (atoi (get_tile "e_h")))
    164. (setq e_v (atoi (get_tile "e_v")))
    165. )
    166. ((= key "e_v") ; {"纵向"} (单选按钮)
    167. (setq e_h (atoi (get_tile "e_h")))
    168. (setq e_v (atoi (get_tile "e_v")))
    169. )
    170. ((= key "e_bh") ; {"起始坐标编号"} (输入框)
    171. ()
    172. )
    173. ((= key "but_s1") ; {"基点坐标<"} (按钮)
    174. (done_dialog 2)
    175. )
    176. ((= key "e_x1") ; {"X(mm)"} (输入框)
    177. ()
    178. )
    179. ((= key "e_y1") ; {"Y(mm)"} (输入框)
    180. ()
    181. )
    182. ((= key "but_s2") ; {"表格左上角<"} (按钮)
    183. (done_dialog 3)
    184. )
    185. ((= key "e_x2") ; {"X(mm)"} (输入框)
    186. ()
    187. )
    188. ((= key "e_y2") ; {"Y(mm)"} (输入框)
    189. ()
    190. )
    191. )
    192. )
    193. ;;; -------------------------------------
    194. (defun get_data (/ key) ; 临时生成Dcl文件 返回文件名
    195. (foreach key keys
    196. (set (read (strcat key "_bak")) (get_tile key)) ; 每个控件都赋给一个变量 用于下次开启初始化
    197. )
    198. )
    199. ;;; -------------------------------------
    200. (defun start (num)
    201. (alert (strcat "你选择的是" num))
    202. )
    203. ;;; -------------------------------------
    204. ;;; ==================DCL文件===================
    205. (defun dclfile_load (/ Dcl_File file )
    206. (setq Dcl_File (vl-filename-mktemp nil nil ".Dcl"))
    207. (setq file (open Dcl_File "w"))
    208. (write-line "
    209. dcl_bg:dialog {
    210. label = \"【坐标表格】(QQ:)\" ;
    211. :column {
    212. width = 15 ;
    213. :boxed_row {
    214. label = \"比例和字体\" ;
    215. :edit_box {
    216. key = \"e_bl\" ;
    217. label = \"比例\" ;
    218. }
    219. :edit_box {
    220. key = \"e_zg\" ;
    221. label = \"字高\" ;
    222. }
    223. }
    224. :boxed_radio_row {
    225. label = \"板式\" ;
    226. :radio_button {
    227. key = \"e_h\" ;
    228. label = \"横向\" ;
    229. }
    230. :radio_button {
    231. key = \"e_v\" ;
    232. label = \"纵向\" ;
    233. }
    234. }
    235. :boxed_column {
    236. label = \"定位点\" ;
    237. :row {
    238. :boxed_column {
    239. label = \"图形\" ;
    240. :button {
    241. key = \"but_s1\" ;
    242. label = \"基 点>\" ;
    243. }
    244. :edit_box {
    245. key = \"e_x1\" ;
    246. label = \"X\" ;
    247. }
    248. :edit_box {
    249. key = \"e_y1\" ;
    250. label = \"Y\" ;
    251. }
    252. }
    253. :boxed_column {
    254. label = \"表格\" ;
    255. :button {
    256. key = \"but_s2\" ;
    257. label = \"左上角 >\" ;
    258. }
    259. :edit_box {
    260. key = \"e_x2\" ;
    261. label = \"X\" ;
    262. }
    263. :edit_box {
    264. key = \"e_y2\" ;
    265. label = \"Y\" ;
    266. }
    267. }
    268. }
    269. :boxed_row {
    270. label = \"编号\" ;
    271. :edit_box {
    272. key = \"e_qz\" ;
    273. label = \"前缀\" ;
    274. }
    275. :edit_box {
    276. key = \"e_bh\" ;
    277. label = \"编号\" ;
    278. }
    279. }
    280. }
    281. }
    282. ok_cancel;
    283. }
    284. " file)
    285. (close file)
    286. Dcl_File
    287. )