明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7089|回复: 20

[【不死猫】] 原创-在64位CAD上实现多文件选择对话框,文件多选

  [复制链接]
发表于 2015-11-4 18:06 | 显示全部楼层 |阅读模式
本帖最后由 不死猫 于 2023-10-12 11:22 编辑

32位CAD下 我们经常使用MSComDlg.CommonDialog对象实现文件多选。
这是老猫之前写的文件多选:
  1. (defun non-GetFiles (/ )(此方法已废弃,请看后面的文件)
  2.   (if (/= (vl-registry-read "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905")
  3.      "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")
  4.      (vl-registry-write "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905" ""
  5.            "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")
  6.   )
  7.    (if (setq x (Vlax-Get-Or-Create-Object "MSComDlg.CommonDialog"))
  8.      (progn (vlax-put-property x "DialogTitle" "nonsmall -- Lisp多选DWG文件")
  9.         (vlax-put-property x "Filter" "DWG Files|*.dwg|All Files|*.*")
  10.         (vlax-put-property x "MaxFileSize" 10000)
  11. ;        (vlax-put-property x "Flags" 512)
  12.         (vlax-put-property x "Flags" 1574404)
  13.         (vlax-put-property x "Action" 1)
  14.         (vlax-get x "Filename")
  15.      )
  16.    )
  17. )
64位时代,一直没有找到好的方法解决文件多选的问题,控件注册之类的都不成功。
今天老猫带来一个新的方法实现在全版本cad下的文件多选


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

本帖子中包含更多资源

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

x

点评

很给力  发表于 2015-11-4 21:49

评分

参与人数 8明经币 +8 金钱 +120 收起 理由
carrot1983 + 1 + 50 神马都是浮云
USER2128 + 1 很给力!
819534890 + 50
浮世小半生 + 1 + 20
434939575 + 1 多多益善
Gu_xl + 2 很给力!
q3_2006 + 1 猫老师太牛了!
lucas_3333 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2019-7-24 00:28 | 显示全部楼层
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)
)



发表于 2018-11-26 11:09 | 显示全部楼层
本帖最后由 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个文件,请问想选取更多的文件,该如何处理?谢谢。
发表于 2015-11-4 18:36 | 显示全部楼层
厉害猫老师!
发表于 2015-11-4 20:00 | 显示全部楼层
加载 XLRX_API:
xlrx-File-GetFiled
   功能:对话框选取文件
   语法: (xlrx-File-GetFiled [default]  [Filter = "All Files (*.*)|*.*|"] [MultSel = nil])
     参数:  
         default = 默认文件名称,可选
         Filter 文件过滤表,可选,例如:"All Files (*.*)|*.*|文本文件(*.txt)|*.txt|"
         MultSel 是否可以多选文件,默认 nil,当 = T时,返回值为文件名称列表
     返回值: 成功返回文件名称或文件名称列表,否则返回nil
发表于 2015-11-4 21:47 | 显示全部楼层
顶帖先锋!支持猫老师!
发表于 2015-11-4 22:09 | 显示全部楼层
闪了一下,开图没反应。

点评

你的office应该是支持开发的完整版  发表于 2015-11-4 23:13
发表于 2015-11-5 08:47 | 显示全部楼层
Win8 64bit,Office 2007
发表于 2015-11-5 09:04 | 显示全部楼层
以前试过用excel方式打开选择对话窗,但有些电脑出现对话窗在后台而不是当前窗口现象,能解决吗?

点评

可以尝试visible显示后修改窗体为最小 然后开启选择对话框  发表于 2015-11-5 10:47
发表于 2015-11-5 13:18 | 显示全部楼层
MARK一下下咯
发表于 2015-11-5 13:29 | 显示全部楼层
猫老师出手了,可惜,和我之前网上找到的差不离。
还是要绕一下。
但还是强烈支持。。。
发表于 2015-11-5 13:39 | 显示全部楼层
之前到处找答案,有人给我回复了这个,不过,不知道能不能行。

64位系统VBS调用32位COM组件
http://demon.tw/programming/64bit-vbs-32bit-com.html

点评

有熟悉VB的同志翻译一下啰!  发表于 2015-11-8 07:12
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 23:48 , Processed in 0.715826 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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