本帖最后由 作者 于 2008-11-7 11:31:35 编辑 
   ;;; 修改依据: xiaomu 2005-10-12  ;;;**************************************************************************** ;;; No.5-3    Windows多文件选择(适用于CADR15以上) 函数                          ;;; 说明: 本函数使用MsComDlg.Commondialog对象(Comdlg.OCX)                       ;;; 调用: (ayGetMultFiles "多选文件" "图形文件(*.dwg)|*.dwg|所有(*.*)|*.*" "")  ;;; 返回: ("C:\\DWG" "7b.dwg" "7c.dwg" "1.Dwg")                                 ;;;**************************************************************************** (if (/= (vl-registry-read "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905")       "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")    (vl-registry-write "HKEY_CLASSES_ROOT\\Licenses\\4D553650-6ABE-11cf-8ADB-00AA00C00905" ""                "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj") );end_if (defun ayGetMultFiles (strTitle strFilter strInitDir / Maxfiles Flags WinDlg mFiles Catchit)   (vl-load-com)   (setq WinDlg (vlax-create-object "MSComDlg.CommonDialog"))  (if (not WinDlg)   (progn;then    (princ "\n【错误】系统中未安装通用控件Comdlg.OCX, 请安装后再运行!")    (setq mFiles nil)   );end_progn then      (progn;else    (setq Maxfiles 32767)    (setq Flags (+ 4 512 524288 1048576 1024))    (vlax-put-property WinDlg 'CancelError :vlax-true)     (vlax-put-property WinDlg 'MaxFileSize Maxfiles)     (vlax-put-property WinDlg 'Flags Flags)     (vlax-put-property WinDlg 'DialogTitle strTitle)     (vlax-put-property WinDlg 'Filter strFilter)     (vlax-put-property WinDlg 'InitDir strInitDir)    (setq Catchit nil)    (setq Catchit (vl-catch-all-apply '(lambda ()                      (vlax-invoke-method WinDlg 'ShowOpen)                      (setq mFiles (vlax-get WinDlg 'Filename)))))     (vlax-release-object WinDlg)    (if (not (vl-catch-all-error-p Catchit));处理"取消"错误.     (ayFSTR->LST mFiles)     nil;else    );end_if   );end_progn  );end_if );end_defun ;;;************************************************ ;;; No.5-3-1 处理Windows多文件选择返回值 函数       ;;; 说明: 将"C:\\DWG1\0001.dwg\0002.dwg" 处理成:    ;;;        ("C:\\DWG1" "1.dwg" "2.dwg") 表形式.     ;;;************************************************ (Defun ayFSTR->LST (xMFileStr / mFileList k)  (if (= xMFileStr "")    (setq mFileList nil);then   (progn    (if (vl-string-position (ascii "\000") xMFileStr)      (progn        (while (vl-string-position (ascii "\000") xMFileStr)       (setq k (vl-string-position (ascii "\000") xMFileStr))       (setq mFileList (append mFileList (list (substr xMFileStr 1 k))))       (setq xMFileStr (substr xMFileStr (+ k 2) (- (strlen xMFileStr) k 1)))        );end_while        (setq mFileList (append mFileList (list (vl-string-left-trim "\\" xMFileStr))))      );end_progn then      (progn        (setq mFileList (vl-filename-directory xMFileStr))        (setq mFileList (list mFileList (vl-string-left-trim "\\" (vl-string-subst "" mFileList xMFileStr))))      );end_progn else    );end_if    mFileList   );end_progn  );end_if );end_defun ;| 参考依据: Ayungerstudio 动态库Ayunger.Dll for VB6.0 2003.10.16 '****************************************************************** '       打开文件,返回文件名。 '------------------------------------------------------------------ '   1.入口参数: ObjCommonDialog --- MS Common Dialog 打开文件控件。 '               FileFilter  --- 打开文件类型过滤字符串。 '   2.出口信息: 返回打开文件的文件名。若无打开文件,则返回空。 '****************************************************************** Public Function getOpenFileName(ByRef ObjCommonDialog As Object, _                                 Optional ByVal FileFilter As String = "纯文本文件(*.Txt)|*.Txt|所有文件(*.*)|*.*", _                                 Optional ByVal MsgTitle As String) As String          On Error GoTo ErrOpenHandle:          If MsgTitle = "" Then MsgTitle = "打开文档"          With ObjCommonDialog         .CancelError = True         .DialogTitle = MsgTitle         .FilterIndex = 1         .Filter = FileFilter         .FileName = ""         .ShowOpen         getOpenFileName = .FileName     End With          Exit Function      ErrOpenHandle:     getOpenFileName = "" End Function |;  |