明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2165|回复: 3

[求助]DCL与CAD来回交互多次程序应该怎么处理?

[复制链接]
发表于 2010-2-4 19:01:00 | 显示全部楼层 |阅读模式

DCL内有若干按钮,点击时返回到CAD界面提取数据,然后将数据返回给DCL。

现该程序内的按钮有好几个,比如有A,B,C三个按钮。三个按钮可以无次数、无顺序点击,

然后及时更新数据,这样的程序改怎么处理?我是菜鸟,高手们讲的简单点,说说逻辑关系也行,谢谢

发表于 2010-2-4 19:35:00 | 显示全部楼层
本帖最后由 作者 于 2010-2-4 20:08:23 编辑

对话框和屏幕操作交换是在未退出当前程序中实现切换的,所以将相关的数据储存在局部变量即可

下面的是对话框驱动的大概原理,希望对你有用

(defun c:tt (/ ID FLAG BoxVal ...)

(setq ID (load_dialog "DclFileName"))

(while (and (not (member FLAG '(0 1)))

            (new_dialog "XXXX" ID);;循环执行,直到用户点accept或cancel按钮则中断循环
       )

  (or BoxVal (set_tile "key_editbox" BoxVal));;假如局部变量BoxVal存在  ★

  (action_tile "key_editbox" "(setq BoxVal $value)");;此控件是个编辑框。及时将数据赋予变量BoxVal

  (action_tile "getdate" "(done_dialog 2)");此控件是个屏幕拾取按钮

  (action_tile "cancel" "(done_dialog 0)")


  (action_tile "accept" "(done_dialog 1)")

  (setq FLAG (start_dialog))

  (cond ((= FLAG 2) (if (setq DD (getdist "xxxxxxx")) (setq BoxVal (rtos DD 2 2))));;将拾取的数据赋值给BoxVal,以便再次显示对话框的时候——★处更新

        ....

        ....

  );end cond

);end_while

(unload_dialog ID)

)

 楼主| 发表于 2010-2-4 20:02:00 | 显示全部楼层

恩,有点明白了,开始我在程序中加了好几个(load_dialog "DclFileName"),对话框关了又开,关了又开。

程序虽然能用,但烦死了。按你的思路我去好好梳理梳理程序,有问题再向你请教,谢谢caoyin

发表于 2010-2-9 03:33:00 | 显示全部楼层

dcl的隐框切换写法,你可以参照标准,

(DEFUN diag_mjdy( / )
  (IF (< (SETQ dcl_id (LOAD_DIALOG "mjdy")) 0)

    (EXIT)
  )
  (SETQ do_what 6)
  (WHILE (> do_what 1)
    (IF (NOT (NEW_DIALOG "mjdy" dcl_id))
      (EXIT))
    (SET_TILE ...;;一系列的SET_TILE,赋初始值
    。。。。
    (ACTION_TILE "k01" 。。。。)  ;;一系列的ACTION_TILE,动作
    。。。。
    ;;下面是隐框回到图内的动作
    (ACTION_TILE "b01" "(done_dialog 2)");;切到图形界面的一个动作
    (ACTION_TILE "b04" "(done_dialog 3)");;切到图形界面的第二个动作
    (ACTION_TILE "b06" "(done_dialog 4)");;切到图形界面的第三个动作
    (ACTION_TILE "b12" "(done_dialog 5)");;切到图形界面的第四个动作
    (ACTION_TILE "c1" "(done_dialog 6)");;切到图形界面的第五个动作
    ;;
    (ACTION_TILE "accept" "(setq ok T)(cy_mjdy_ok)(done_dialog 1)");;ok后的赋值
    (ACTION_TILE "cancel" "(setq ok nil)")
    (ACTION_TILE"help""(info_mjdy)")
    ;;
    (SETQ do_what (START_DIALOG))
    (cond
      ((= do_what 2);;下面我的动作是选图形界面里面的各种文字,获得字串后再赋给对话框
       (while (not (setq e111 (cy_nentsel '((0 . "TEXT,MTEXT,ATTRIB,ATTDEF,TCH_TEXT,TCH_MTEXT,TCH_DRAWINGNAME"))
                                         "\n选择 楼名:")))
       (prompt "\n要选字!!"))
       (setq STR(cy_get_text_str e111)
             #mjdy-txt-a01 str);;因为是while,每次重复的时候,前面的一段SET_TILE起作用,你只要改#mjdy-txt-a01的值,就会把提取到得字串赋值进去
       )
      ((= do_what 3)
       。。。。
       )
      ((= do_what 4)
       。。。。
       )
       ((= do_what 5)
       。。。。
       )
       ((= do_what 6)
       。。。。
       )
       (t)
    )
  )
)
 

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

本版积分规则

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

GMT+8, 2024-10-2 01:37 , Processed in 0.160546 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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