明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13092|回复: 23

[原创函数]使用标准vlisp显示选择文件夹对话框的方法

    [复制链接]
发表于 2003-4-25 22:21:00 | 显示全部楼层 |阅读模式

  1. ;; 本代码仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
  2. ;; 用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认.
  3. ;; ==================================================================
  4. ;; 作者:秋枫,参考了灯火的VBA程序
  5. ;; 用法:(qf_getFolder msg)
  6. ;; 例子:(qf_getFolder "选择文件夹:")
  7. ;; 返回值:字符串,文件夹路径,如果点了cancel, 返回nil

  8. (defun qf_getFolder (msg / WinShell shFolder path catchit)
  9.   (vl-load-com)
  10.   (setq winshell (vlax-create-object "Shell.Application"))
  11.   (setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
  12.   (setq
  13.     catchit (vl-catch-all-apply
  14.               '(lambda ()
  15.                  (setq shFolder (vlax-get-property shFolder 'self))
  16.                  (setq path (vlax-get-property shFolder 'path))
  17.                )
  18.             )
  19.   )
  20.   (if (vl-catch-all-error-p catchit)
  21.     nil
  22.     path
  23.   )
  24. )

点评

选择文件夹窗口如何置为当前显示?它会隐藏在CAD界面下?  发表于 2019-7-2 08:51
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-7-22 17:06:30 | 显示全部楼层
谢谢楼主,需要消化一下
发表于 2020-5-13 23:05:25 | 显示全部楼层
不错不错,多谢大神
发表于 2003-4-26 08:08:00 | 显示全部楼层

;;再提供"选择档夹"别一方法,配合Expresstool

;;再提供"选择档夹"别一方法,配合Expresstool
(arxload "acetutil.arx" NIL)
(setq PREFIX_DWG
       (strcat
         (strcase (acet-ui-pickdir
                    "选择目录"
                    (vl-string-right-trim "\\" (getvar "dwgprefix"))
                    "移除未使用之具名参考"
                  )
         )
        ; "\\"
       )
)
发表于 2003-4-26 08:20:00 | 显示全部楼层

可有"Shell.Application"的其他使用說明,(vlax-dump-object winshell t)看不出來

 楼主| 发表于 2003-4-26 10:56:00 | 显示全部楼层

这个方法不错。关于Shell.Application的说明

这个程序是从灯火同志的vbscript程序改写过来的。即activex方法的vlisp表达。所以我对这个对象并不多了解一点。关于这点我猜也许可以向论坛上的南子或河伯求教吧?他们都是高手,呵呵。

我用vba自带的对象查看器查了一下,见附件,也许有点用。
 楼主| 发表于 2003-4-26 10:57:00 | 显示全部楼层

附件

本帖子中包含更多资源

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

x
发表于 2003-4-26 16:06:00 | 显示全部楼层

谢谢你!!但像程序中shFolder对象性质数据要查询那里??那些物件才会有传回值???

谢谢你!!但像程序中shFolder对象性质数据要查询那里??那些物件才会有传回值???

像以下都沒有傳回值,看來大部份函數都不合vlisp用
(setq computer(vlax-invoke-method WINSHELL 'findcomputer))
(setq explore(vlax-invoke-method WINSHELL 'explore "c:"))
(setq findfiles(vlax-invoke-method WINSHELL 'findfiles))
 楼主| 发表于 2003-4-26 21:21:00 | 显示全部楼层

无能为力。sorry.

发表于 2003-4-28 13:12:00 | 显示全部楼层

关于VL中的vlax-invoke-method

VL中的vlax-invoke-method,如果调用ActiveX对象时,相当于VB中的调用过程和函数的用法。VB中的过程是没有返回值的,则在VL中仅这样调用就可以:(vlax-invoke-method WINSHELL 'findcomputer),而函数有返回值,用setq computer(vlax-invoke-method WINSHELL 'findcomputer))获取返回值。
发表于 2003-4-28 16:20:00 | 显示全部楼层

這個我當然知道,但那些物件才会有传回值???像shFolder对象性质数据要到那裡查询??

发表于 2003-5-5 01:29:00 | 显示全部楼层

Windows文件系统有两道暗门...

Windows文件系统有两道暗门,一道是Scripting.FileSystemObject,另一道是Shell.Application,应用Vlisp的朋友有时为不能使用Windows API而遗憾,实际上用AcitiveX走暗门更简单有趣,Shell.Application是API的AcitiveX实现形式,一般在脚本编程的书里讲到,如果不怕脑袋瓜疼,下面这本可以看看:

微软公司核心技术书库:Win32开发人员参考库第5卷Windows Shell  
出版社:机械工业出版社
译作者:(美)David Iseminger著
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 10:48 , Processed in 0.186445 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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