原创-在64位CAD上实现多文件选择对话框,文件多选
本帖最后由 不死猫 于 2023-10-12 11:22 编辑32位CAD下 我们经常使用MSComDlg.CommonDialog对象实现文件多选。
这是老猫之前写的文件多选:(defun non-GetFiles (/ )(此方法已废弃,请看后面的文件)
(if (/= (vl-registry-read "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905")
"gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")
(vl-registry-write "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905" ""
"gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")
)
(if (setq x (Vlax-Get-Or-Create-Object "MSComDlg.CommonDialog"))
(progn (vlax-put-property x "DialogTitle" "nonsmall -- Lisp多选DWG文件")
(vlax-put-property x "Filter" "DWG Files|*.dwg|All Files|*.*")
(vlax-put-property x "MaxFileSize" 10000)
; (vlax-put-property x "Flags" 512)
(vlax-put-property x "Flags" 1574404)
(vlax-put-property x "Action" 1)
(vlax-get x "Filename")
)
)
)64位时代,一直没有找到好的方法解决文件多选的问题,控件注册之类的都不成功。
今天老猫带来一个新的方法实现在全版本cad下的文件多选
若测试过程中进程不退出的 用任务管理器清理下。
819534890 发表于 2015-11-5 09:04
以前试过用excel方式打开选择对话窗,但有些电脑出现对话窗在后台而不是当前窗口现象,能解决吗?
最近研究多选文件找到老猫这篇帖子,简直太棒了,提供了多种方式,几经比较最终选择了Word、Excel方式,64位Win7,CAD06、07、10均测试过了,都会出现“对话窗在后台而不是当前窗口现象”,偶然机会增加了行对话框标题提示,该问题居然解决了,代码如下:;(A_Getfiles "请选择一个或多个图形文件" "图形文件" "*.Dwg")
;Msg1提示信息,Msg2文件信息,FileType限定打开类型
(defun A_Getfiles (Msg1 Msg2 FileType /)
(vl-load-com)
(setq word (Vlax-Create-Object "Word.Application")
FileNames nil)
(setq dialog (Vlax-Get-Property word 'FileDialog 3))
(Vlax-Put-Property dialog 'InitialFileName (getvar 'dwgprefix))
(Vlax-Put-Property dialog 'Title Msg1 )
(Vlax-Invoke-Method (Vlax-Get dialog 'Filters) 'Add Msg2 FileType 1)
(Vlax-Invoke-Method dialog 'Show )
(setq items (Vlax-Get dialog 'SelectedItems))
(vlax-for item items
(setq FileNames (cons item FileNames))
)
(while (= (Vlax-Get word 'Visible) 0)
(Vlax-Put-Property word 'Visible -1)
)
(Vlax-Invoke-Method word 'Quit)
(gc)
)
本帖最后由 hf423 于 2018-11-26 11:11 编辑
Gu_xl 发表于 2015-11-4 20:00
加载 XLRX_API:
xlrx-File-GetFiled
功能:对话框选取文件
用了XLRX_API
当文件名为file_01、file_02。。。时,能选择取到18个文件,当文件名为01、02。。。时,能选取到32个文件,请问想选取更多的文件,该如何处理?谢谢。 厉害猫老师! 加载 XLRX_API:
xlrx-File-GetFiled
功能:对话框选取文件
语法: (xlrx-File-GetFiled )
参数:
default = 默认文件名称,可选
Filter 文件过滤表,可选,例如:"All Files (*.*)|*.*|文本文件(*.txt)|*.txt|"
MultSel 是否可以多选文件,默认 nil,当 = T时,返回值为文件名称列表
返回值: 成功返回文件名称或文件名称列表,否则返回nil 顶帖先锋!支持猫老师! 闪了一下,开图没反应。 Win8 64bit,Office 2007 以前试过用excel方式打开选择对话窗,但有些电脑出现对话窗在后台而不是当前窗口现象,能解决吗? MARK一下下咯 猫老师出手了,可惜,和我之前网上找到的差不离。
还是要绕一下。
但还是强烈支持。。。 之前到处找答案,有人给我回复了这个,不过,不知道能不能行。
64位系统VBS调用32位COM组件
http://demon.tw/programming/64bit-vbs-32bit-com.html