找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 8794|回复: 17

[教学] 【牢固】和我一起学OpenDCl对话框程序设计【三】模态与非模态对话框的比较

[复制链接]

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-5-14 13:19:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 牢固 于 2013-5-14 13:23 编辑

模态对话框与非模态对话框的比较
    模态对话框启动时禁用AutoCAD窗口直到他们关闭。就其本质而言,模态对话框更容易管理,因为AutoCAD状态一直保持不变。模态对话框关闭时返回一个对话框关闭时的状态码,用来传递给主应用程序,主程序根据话框返回的状态码来分别执行不同的任务。
非模态对话框比模态对话框有更多挑战,因为非模态的对话框是对AutoCAD程序保持开放的,他们必须处理比如AutoCAD的文件打开和关闭等状况改变的各种情况。此外,由于每个AutoCAD绘图有它自己的AutoLisp名称空间,激活新文档,将意味着事件处理程序代码在新激活的文档中将失效。
    这就意味着我们要确保非模态对话框事件处理程序在每一个新的图纸必须被加载。在实践中,我们通常将非模态对话框事件处理程序通过acaddoc.lsp或加入启动组来加载,以确保每个加载的文件中加载时间处理应用程序。
此外,当加载执行事件处理程序时(例如:打开第二个图文件,) 非模态对话框可能已经激活,所以程序必须采取相应行动。例如,应用程序从注册表中读一些初始化设置值,来判断对话框是除此激活还是已经激活。如果是初次激活,则初始化任务是在对话框的OnInitialize事件中执行,当对话框是首次激活,它只会执行一次。如果应用程序需要在运行时判断对话是否已被激活,可以使用如下表达式:
   
  1. (and MyProject_MyForm (dcl_Form_IsActive MyProject_MyForm))
    除了程序要妥善处理多个文档打开的事件,非模态的对话框还必须在所有打开的图纸已经关闭(导致状态称为“无文件状态”)或当用户切换多个活跃的图纸也必须运行正确。如果非模态的对话框包含控件的设置或属性依赖图的内容,那么它必须定义的事件处理程序OnDocActivated和OnEnteringNoDocState事件更新控件状态的改变。
    非模态的对话框调用事件处理程序通常是在AutoCAD应用程序环境而不是文档环境。AutoLISP代码运行中不能调用文档环境的依赖函数,如(command)函数。要处理这个问题,可设置'EventInvoke'属性为(asynchronously=1),来在文档环境触发异步事件处理程序,因此允许调用(Command)。另外,事件处理程序也可以同步执行(synchronously=0),在调用文档依赖函数时,它可以用一个新的函数(dcl_SendString)函数来代替(command)函数。

评分

参与人数 2威望 +1 D豆 +15 贡献 +2 收起 理由
tigcat + 5 很给力!经验;技术要点;资料分享奖!.
XDSoft + 1 + 10 + 2 好主题奖!

查看全部评分

本帖被以下淘专辑推荐:

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 146个

财富等级: 日进斗金

发表于 2013-5-14 14:12:56 | 显示全部楼层
一如即往来学习,{:soso_e179:}感觉ODCL还不懂,牢固版主能不能对各常用控件弄点入门简单点的代码。。   不要太多子函数的。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2013-5-14 14:25:46 | 显示全部楼层
qianzj 发表于 2013-5-14 14:12
一如即往来学习,感觉ODCL还不懂,牢固版主能不能对各常用控件弄点入门简单点的代码。。   不 ...

OpenDcl自带的Sample里的控件使用例子是最详细的了!有各种控件的用法示例!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-5-15 09:44:18 | 显示全部楼层
学习中,虽然看的还不是很明白但是希望版主多发些简单的让我们更快了解学会OpenDcl
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 117个

财富等级: 日进斗金

发表于 2014-4-27 09:55:54 | 显示全部楼层
学习中,
  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-5-19 13:21:25 | 显示全部楼层
在sample里看了半天~没有太明白怎么利用那个案例来学习...{:soso_e117:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-7-8 16:30:12 | 显示全部楼层
学习了,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 221个

财富等级: 日进斗金

发表于 2014-10-8 20:12:54 | 显示全部楼层
(dcl_SendString)函数怎么使用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-10-9 16:50:13 | 显示全部楼层
entmakex  也不行
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-10-9 21:59:51 | 显示全部楼层
谢谢G大,在这里长知识真快
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-11-12 21:18:17 | 显示全部楼层
支持下阿德萨奥送  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 34个

财富等级: 招财进宝

发表于 2014-12-8 14:14:58 | 显示全部楼层
感谢分享,东西很好
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 167个

财富等级: 日进斗金

发表于 2015-6-15 16:55:40 | 显示全部楼层
翻译的不错,
对于asynchronously还是不太理解
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2016-4-26 20:29:19 | 显示全部楼层
新手有这样的启蒙帖子 好!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2018-4-21 08:34:01 | 显示全部楼层
没有基础,不懂啊,怎么用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-19 02:11 , Processed in 0.502079 second(s), 62 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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