怎么让对话框记忆打开上次文件路径?
以下是群里大佬获取文件路径的对话框,能让选取时直接定位上次打开的路径吗?求大佬赐教!(defun K:BrowPath (/ msg WinShell shFolder err path)(vl-load-com)
(setq msg "请选择文件夹路径(默认为当前文件路径):")
(setq winshell (vlax-create-object "Shell.Application"))
(setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))
(setq err (vl-catch-all-apply
'(lambda ()
(setq shFolder (vlax-get-property shFolder 'self))
(setq path (vl-string-right-trim "\\"
(vl-string-translate "/" "\\"
(vlax-get-property shFolder 'path)
)
)
)
)
)
)
(if (vl-catch-all-error-p err)
(getvar "dwgprefix");选择取消时,返回当前文件路径
(strcat path "\\");选择确定时,返回所选文件夹路径
)
)
;; msg - message to display at top of dialog
;; dir - root directory (or nil)
;; bit - bit-coded flag specifying dialog display settings
; 位 结果
; 0 标准行为(默认)
; 1 只能选择文件系统文件夹。如果设置了此位,则如果用户选择不属于文件系统的文件夹,则“确定”按钮将被禁用。
; 2 禁止用户在网络内的域下方浏览
; 4 对话框下方提供了状态文本的空间
; 8 仅返回文件系统上级。上级是位于根文件夹下的子文件夹。如果用户选择的根文件夹的祖先不属于文件系统,则“确定”按钮将变灰。
; 16 在对话框中显示一个编辑框,供用户键入项目的名称。
; 32 验证在编辑框中键入的名称。
; 64 在对话框中启用拖放功能、重新排序、快捷菜单、新文件夹、删除、 和其他快捷菜单命令。
;128 浏览对话框可以显示 URL。
;256 当与标志 64 结合使用时,将向对话框添加使用提示, 代替编辑框。
;512 禁止显示“新建文件夹”按钮
; 1024 当选定项是快捷方式时,返回快捷方式本身的 PIDL,而不是其目标。
; 4096 使用户能够浏览网络分支以查找计算机名称。如果用户选择计算机以外的任何内容,则“确定”按钮将变灰。
; 8192 使用户能够浏览网络分支以查找打印机名称。如果用户选择打印机以外的任何内容,则“确定”按钮将变灰。
;16384 允许浏览所有内容:浏览对话框显示文件和文件夹。
;32768 如果与标志 64 结合使用,则浏览对话框可以显示 远程系统上的可共享资源。
;65536 Windows 7 及更高版本:允许浏览文件夹联结,例如库或具有.zip文件扩展名的压缩文件。
;; Returns: Selected folder filepath, else nil.
(defun LM:browseforfolder ( msg dir bit / err fld pth shl slf )
(setq err
(vl-catch-all-apply
(function
(lambda ( / app hwd )
(if (setq app (vlax-get-acad-object)
shl (vla-getinterfaceobject app "shell.application")
hwd (vl-catch-all-apply 'vla-get-hwnd (list app))
fld (vlax-invoke-method shl 'browseforfolder (if (vl-catch-all-error-p hwd) 0 hwd) msg bit dir)
)
(setq slf (vlax-get-property fld 'self)
pth (vlax-get-property slf 'path)
pth (vl-string-right-trim "\\" (vl-string-translate "/" "\\" pth))
)
)
)
)
)
)
(if slf (vlax-release-object slf))
(if fld (vlax-release-object fld))
(if shl (vlax-release-object shl))
(if (vl-catch-all-error-p err)
(prompt (vl-catch-all-error-message err))
pth
)
) sniper1111 发表于 2024-8-21 16:40
;; msg - message to display at top of dialog
;; dir - root directory (or nil ...
老迈的程序,但是感觉用起来怪怪的
用acet-ui-pickdir这个函数更合适 lijiao 发表于 2024-8-21 17:19
用acet-ui-pickdir这个函数更合适
没找到这个函数。。。那里的? sniper1111 发表于 2024-8-21 16:40
;; msg - message to display at top of dialog
;; dir - root directory (or nil ...
可以,很感谢! 把开头的(defun K:BrowPath (/ msg WinShell shFolder err path)
改为 (defun K:BrowPath (/ msg WinShell shFolder err)
就是把path变成全局变量。
页:
[1]