二更更二 发表于 2022-11-10 10:45:04

请问把模态对话框改成非模对话框,块插入用不了是什么原因

明经下了一个ODCL图库,我想把模态对话框改成非模对话框,但是插入块就用不了,出现(344.0 251.0)之类的提示。

原贴在这里:http://bbs.mjtd.com/thread-100823-1-1.html?_dsign=dff5ceca
就是想改成非模对话框,可以不用反复输入命令

liuhe 发表于 2022-11-10 11:23:09

模态与模型 Support Forum
Report A Bug

--------------------------------------------------------------------------------

模态对话框禁用AutoCAD窗口,直到它们关闭。根据其性质,模态对话框更易于管理,因为AutoCAD状态在对话框的生命周期中保持不变。模态对话框在关闭时返回对话状态代码,通常主应用程序代码基于对话框返回的状态代码执行其他操作。

无模式对话框提出了更多的挑战。由于无模式对话框可以在AutoCAD应用程序的生命周期内保持打开,因此它们必须处理更改AutoCAD状态,例如打开和关闭文档。此外,由于每个AutoCAD绘图都有自己的AutoLISP命名空间,因此激活新文档意味着在停用的文档中定义的事件处理程序将无法在新激活的文档中访问。

这些现实意味着,管理无模式对话的唯一方法是确保在每个新的图形文件中定义事件处理程序。在实践中,这通常意味着应用程序li??sp文件(或多个文件)必须通过acaddoc.lsp文件或类似方法加载作为新文档初始化的一部分。

此外,由于在启动代码执行时(例如,在打开第二绘图文件之后)对话框可能已经是活动的,因此它必须相应地动作。例如,如果应用程序必须从注册表中读取一些初始化设置,则只有在初始激活非模态对话框时才需要这样做。如果在对话框的OnInitialize事件中执行此类初始化,则只有在首次激活对话框时才会执行一次。如果应用程序需要在运行时确定对话框是否已经处于活动状态,则可以使用如下所示的表达式:


(and MyProject-MyForm (dcl-Form-IsActive MyProject-MyForm))

除了编程启动代码以在打开多个图形时适当地动作之外,无模式对话框还必须在所有打开的图形被关闭时(导致被称为“无doc状态”的状态)或当用户在多个活动图形。如果无模式对话框包含其设置或属性取决于绘图内容的控件,则它必须为OnDocActivated和OnEnteringNoDocState事件定义事件处理程序,以便在文档状态更改时更新控件。

无模型对话框事件处理程序通常在AutoCAD应用程序上下文中调用,而不是文档上下文。在应用程序上下文中运行的AutoLISP代码不能调用与(命令)函数类似的文档相关函数。为了处理这个问题,控件的“事件调用”属性可以用于在文档上下文中异步地触发事件处理程序,从而允许对(命令)的调用成功。或者,事件处理程序可以同步执行,但是不是在处理程序函数内调用依赖于文件的函数,而是可以通过(dcl-SendString)函数简单地触发在文档上下文中执行的新命令。

如果有用 给个币呗:loveliness:

liuhe 发表于 2022-11-10 11:26:03

非模态会保持焦点   还想执行插入图块命令 只能用dcl-SendString函数执行。比如dcl-SendString“ line”,相当于代替command
如果有用 给个币呗

二更更二 发表于 2022-11-10 11:40:11

liuhe 发表于 2022-11-10 11:26
非模态会保持焦点   还想执行插入图块命令 只能用dcl-SendString函数执行。比如dcl-SendString“ line” ...

感谢回复,可我还是不会啊

二更更二 发表于 2022-11-10 11:43:57

liuhe 发表于 2022-11-10 11:26
非模态会保持焦点   还想执行插入图块命令 只能用dcl-SendString函数执行。比如dcl-SendString“ line” ...

虽然我弄不出来,还是要感谢回复,我不会发币,我到你贴子里买一个吧
页: [1]
查看完整版本: 请问把模态对话框改成非模对话框,块插入用不了是什么原因