不死猫 发表于 2015-11-4 18:06:55

原创-在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下的文件多选


若测试过程中进程不退出的 用任务管理器清理下。

itoboy 发表于 2019-7-24 00:28:48

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:09:55

本帖最后由 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个文件,请问想选取更多的文件,该如何处理?谢谢。

flowerson 发表于 2015-11-4 18:36:30

厉害猫老师!

Gu_xl 发表于 2015-11-4 20:00:21

加载 XLRX_API:
xlrx-File-GetFiled
   功能:对话框选取文件
   语法: (xlrx-File-GetFiled )
   参数:
       default = 默认文件名称,可选
         Filter 文件过滤表,可选,例如:"All Files (*.*)|*.*|文本文件(*.txt)|*.txt|"
         MultSel 是否可以多选文件,默认 nil,当 = T时,返回值为文件名称列表
   返回值: 成功返回文件名称或文件名称列表,否则返回nil

leeli 发表于 2015-11-4 21:47:08

顶帖先锋!支持猫老师!

sicky111 发表于 2015-11-4 22:09:21

闪了一下,开图没反应。

sicky111 发表于 2015-11-5 08:47:57

Win8 64bit,Office 2007

819534890 发表于 2015-11-5 09:04:16

以前试过用excel方式打开选择对话窗,但有些电脑出现对话窗在后台而不是当前窗口现象,能解决吗?

海盗曹 发表于 2015-11-5 13:18:28

MARK一下下咯

carrot1983 发表于 2015-11-5 13:29:08

猫老师出手了,可惜,和我之前网上找到的差不离。
还是要绕一下。
但还是强烈支持。。。

carrot1983 发表于 2015-11-5 13:39:49

之前到处找答案,有人给我回复了这个,不过,不知道能不能行。

64位系统VBS调用32位COM组件
http://demon.tw/programming/64bit-vbs-32bit-com.html
页: [1] 2 3
查看完整版本: 原创-在64位CAD上实现多文件选择对话框,文件多选