yaojing38 发表于 2024-8-21 16:00:17

怎么让对话框记忆打开上次文件路径?

以下是群里大佬获取文件路径的对话框,能让选取时直接定位上次打开的路径吗?求大佬赐教!(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 "\\");选择确定时,返回所选文件夹路径
)
)


sniper1111 发表于 2024-8-21 16:40:54

;; 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:43:33

sniper1111 发表于 2024-8-21 16:40
;; msg - message to display at top of dialog
;; dir - root directory (or nil ...

老迈的程序,但是感觉用起来怪怪的

lijiao 发表于 2024-8-21 17:19:34

用acet-ui-pickdir这个函数更合适

yaojing38 发表于 2024-8-22 09:24:48

lijiao 发表于 2024-8-21 17:19
用acet-ui-pickdir这个函数更合适

没找到这个函数。。。那里的?

yaojing38 发表于 2024-8-22 09:25:50

sniper1111 发表于 2024-8-21 16:40
;; msg - message to display at top of dialog
;; dir - root directory (or nil ...

可以,很感谢!

qazxswk 发表于 2024-8-22 18:42:33

把开头的(defun K:BrowPath (/ msg WinShell shFolder err path)
改为 (defun K:BrowPath (/ msg WinShell shFolder err)
就是把path变成全局变量。
页: [1]
查看完整版本: 怎么让对话框记忆打开上次文件路径?