明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4314|回复: 21

[函数] 多文件选择函数

  [复制链接]
发表于 2021-5-14 20:40:13 | 显示全部楼层 |阅读模式
本帖最后由 tryhi 于 2021-5-15 17:53 编辑

;;多文件选择   BY:大海
;;参数1:标题
;;参数2:起始目录(找不到目录时打开上一次的目录)
;;参数3:文件类型 例如:图像文件 (*.jpg;*.bmp)|*.jpg;*.bmp
;;返回文件路径表
;;例子:(try-FileOpenDialog "选择文件" *Desktop* "图像文件 (*.jpg;*.bmp)|*.jpg;*.bmp")






虽说是lsp,但其实是调用了一个exe,exe的数据打包在lsp里面了,这个exe使用C语言写的,实现了用lsp直接进行多个文件的选择,返回的是所选择的文件完整路径表


本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 收起 理由
ssyfeng + 1 赞一个!
xj6019 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-5-16 14:33:05 | 显示全部楼层
我这里提供一个无需用exe即可打开多个文件的LISP程序:
  1. ;;;=============================================================
  2. ;;; 通用文件对话框:                                             
  3. ;;;=============================================================
  4. (defun C:OpenFile (/ *SCR name code path)
  5.   (or
  6.     (setq *SCR (vlax-create-object "Aec32BitAppServer.AecScriptControl.1"))
  7.     (setq *SCR (vlax-create-object "ScriptControl"))
  8.   )
  9.   (or
  10.     (setq path (strcat (GetSpecialPath 0) "\\System32\\COMCTL32.OCX"))
  11.     (setq path (strcat (GetSpecialPath 0) "\\SysWOW64\\COMCTL32.OCX"))
  12.   )
  13.   (if (and *SCR path)
  14.     (progn
  15.       (vlax-put *SCR 'language "VBScript")
  16.       (setq code
  17.             "Function GetDlg(InitDir,fileName,Filter)
  18.               Set dlg = CreateObject(\"MSComDlg.CommonDialog\")
  19.               dlg.InitDir = InitDir
  20.             dlg.Flags = &H200
  21.               dlg.fileName = fileName
  22.             dlg.Filter = Filter
  23.             dlg.MaxFileSize = 520
  24.             'dlg.DialogTitle = \"打开文件对话框\"
  25.             'dlg.Max = 520
  26.             'dlg.DefaultExt = DefaultExt
  27.             'dlg.Flags = 18
  28.             dlg.ShowOpen
  29.             GetDlg = dlg.fileName
  30.             End Function"
  31.       )
  32.       (vlax-invoke *SCR 'addcode code)
  33.       (setq name
  34.         (vl-catch-all-apply
  35.           'vlax-invoke
  36.           (list
  37.             *SCR 'run
  38.             "GetDlg"
  39.             ""
  40.             ""
  41.             "All files(*.*)|*.*|LISP 文件(*.lsp)|*.lsp"
  42.           )
  43.         )
  44.       )
  45.       (vlax-release-object *SCR)
  46.       (if (not (vl-catch-all-error-p name))
  47.         Name
  48.       )
  49.     )
  50.   )
  51. )
  52. ;;;Get the system special path
  53. (defun GetSpecialPath (n / fso path)
  54.   (setq fso  (vlax-create-object "Scripting.FileSystemObject"))
  55.   (setq path (vlax-get (vlax-invoke fso 'GetSpecialFolder n) 'path))
  56.   (vlax-release-object fso)
  57.   path
  58. )


如果读者想了解更多的方式,请参考我的附件。
回复 支持 5 反对 0

使用道具 举报

发表于 2021-6-28 22:48:32 | 显示全部楼层
highflybir 发表于 2021-5-16 14:33
我这里提供一个无需用exe即可打开多个文件的LISP程序:
如果读者想了解更多的方式,请参考我的附件。

(vlax-put *SCR 'language "VBScript")


这一句运行不成功怎么回事啊?    直接nil
*scr  是有的,是通过第一种方式创建的
64位WIN10  CAD 2012
发表于 2021-5-14 21:36:13 | 显示全部楼层
支持,谢谢大海老师分享!
发表于 2021-5-15 10:58:10 来自手机 | 显示全部楼层
大海强大 竟然用c
发表于 2021-5-15 11:00:12 来自手机 | 显示全部楼层
可以设置单选模式就好了 win10下getfile函数第一次选不中文件
发表于 2021-5-15 11:08:20 | 显示全部楼层
学习一下大海的写法。。。
 楼主| 发表于 2021-5-15 11:31:47 | 显示全部楼层
言戲無軍 发表于 2021-5-15 11:00
可以设置单选模式就好了 win10下getfile函数第一次选不中文件

是啊,第一次选择无效,这点确实挺烦的
发表于 2021-5-15 11:57:21 | 显示全部楼层
tryhi 发表于 2021-5-15 11:31
是啊,第一次选择无效,这点确实挺烦的

这个能解决第一次选择无效问题不
 楼主| 发表于 2021-5-16 14:53:15 | 显示全部楼层
highflybir 发表于 2021-5-16 14:33
我这里提供一个无需用exe即可打开多个文件的LISP程序:
如果读者想了解更多的方式,请参考我的附件。

不知道使用的要求的什么,OpenFile没有反应,只返回一个nil
发表于 2021-5-16 14:58:17 | 显示全部楼层
tryhi 发表于 2021-5-16 14:53
不知道使用的要求的什么,OpenFile没有反应,只返回一个nil

在我的机器上是能得到返回值的。
这个源码稍微改一下,就可以转成函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 01:18 , Processed in 0.306028 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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