[原创函数]使用标准vlisp显示选择文件夹对话框的方法
;; 本代码仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
;; 用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认.
;; ==================================================================
;; 作者:秋枫,参考了灯火的VBA程序
;; 用法:(qf_getFolder msg)
;; 例子:(qf_getFolder "选择文件夹:")
;; 返回值:字符串,文件夹路径,如果点了cancel, 返回nil
(defun qf_getFolder (msg / WinShell shFolder path catchit)
(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
(setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
(setq
catchit (vl-catch-all-apply
'(lambda ()
(setq shFolder (vlax-get-property shFolder 'self))
(setq path (vlax-get-property shFolder 'path))
)
)
)
(if (vl-catch-all-error-p catchit)
nil
path
)
)
谢谢楼主,需要消化一下 不错不错,多谢大神
;;再提供"选择档夹"别一方法,配合Expresstool
;;再提供"选择档夹"别一方法,配合Expresstool(arxload "acetutil.arx" NIL)
(setq PREFIX_DWG
(strcat
(strcase (acet-ui-pickdir
"选择目录"
(vl-string-right-trim "\\" (getvar "dwgprefix"))
"移除未使用之具名参考"
)
)
; "\\"
)
)
可有"Shell.Application"的其他使用說明,(vlax-dump-object winshell t)看不出來
这个方法不错。关于Shell.Application的说明
这个程序是从灯火同志的vbscript程序改写过来的。即activex方法的vlisp表达。所以我对这个对象并不多了解一点。关于这点我猜也许可以向论坛上的南子或河伯求教吧?他们都是高手,呵呵。我用vba自带的对象查看器查了一下,见附件,也许有点用。
附件
谢谢你!!但像程序中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))
无能为力。sorry.
关于VL中的vlax-invoke-method
VL中的vlax-invoke-method,如果调用ActiveX对象时,相当于VB中的调用过程和函数的用法。VB中的过程是没有返回值的,则在VL中仅这样调用就可以:(vlax-invoke-method WINSHELL 'findcomputer),而函数有返回值,用setq computer(vlax-invoke-method WINSHELL 'findcomputer))获取返回值。這個我當然知道,但那些物件才会有传回值???像shFolder对象性质数据要到那裡查询??
Windows文件系统有两道暗门...
Windows文件系统有两道暗门,一道是Scripting.FileSystemObject,另一道是Shell.Application,应用Vlisp的朋友有时为不能使用Windows API而遗憾,实际上用AcitiveX走暗门更简单有趣,Shell.Application是API的AcitiveX实现形式,一般在脚本编程的书里讲到,如果不怕脑袋瓜疼,下面这本可以看看:微软公司核心技术书库:Win32开发人员参考库第5卷Windows Shell
出版社:机械工业出版社
译作者:(美)David Iseminger著