路边 发表于 2005-11-16 09:51:00

hao

wangph 发表于 2008-10-19 16:27:00

<p>我用了(vl-registry-write "HKEY_CLASSES_ROOT\\LICENSES\\4d553650-6abe-11cf-8adb-00aa00c00905"<br/>"" "gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj")并注册了RegSvr32 comdlg32.ocx,</p><p>(VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG")还是成功不了,请高手指点如何做呢?龙大哥是怎么解决的呢?</p>

狂刀无痕 发表于 2008-10-20 13:16:00

d

wangph 发表于 2008-10-20 15:58:00

<p>这2个文件我电脑上是有的,并且我也注册了,(VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG")还是成功不了。</p>

wangph 发表于 2008-10-20 19:13:00

<p>当装过VB6后就可以了,请问龙斑主是如何解决的,你的程序加载后就能用。</p>

wangph 发表于 2008-10-21 20:54:00

我再顶,看有没有人能解决。

ayunger 发表于 2008-11-5 17:14:00

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

wangph 发表于 2008-11-5 21:23:00

楼上的与xiaomu的差不多,ayFSTR-&gt;LST 函数是有问题的,当选择<font color="#dd2222"><em><u><strong>不在</strong></u></em></font>根目录下的<strong><em><font color="#cc5233"><u>单个</u></font></em></strong>文件时,返回值中文件名前多了“\\”。对于返回值的处理,龙龙仔班主有不同的处理方法,我试过了,比较好用,但他没有给出源码。

ayunger 发表于 2008-11-6 10:03:00

本帖最后由 作者 于 2008-11-7 11:13:03 编辑 <br /><br /> <p>非常感谢<font face="Verdana" color="#61b713"><strong>wangph楼主,已经修正了</strong><font color="#000000">ayFSTR-&gt;LST 函数错误,同时改正和ayGetMultFiles函数!</font></font></p><p><font face="Verdana">【第 <font color="#ff0000">47</font> 楼 文件已经重新更新 2208-11-07】</font></p><p>;;;************************************************<br/>;;; No.5-3-1 处理Windows多文件选择返回值 函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>;;; 说明: 将"C:\\DWG1\0001.dwg\0002.dwg" 处理成:&nbsp;&nbsp; <br/>;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ("C:\\DWG1" "1.dwg" "2.dwg") 表形式.&nbsp;&nbsp;&nbsp; <br/>;;;************************************************<br/>(Defun ayFSTR-&gt;LST (xMFileStr / mFileList k)<br/>&nbsp;(if (= xMFileStr "")<br/>&nbsp;&nbsp;&nbsp;(setq mFileList nil);then<br/>&nbsp;&nbsp;(progn<br/>&nbsp;&nbsp;&nbsp;(if (vl-string-position (ascii "\000") xMFileStr)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (while (vl-string-position (ascii "\000") xMFileStr)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq k (vl-string-position (ascii "\000") xMFileStr))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq mFileList (append mFileList (list (substr xMFileStr 1 k))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq xMFileStr (substr xMFileStr (+ k 2) (- (strlen xMFileStr) k 1)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );end_while<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq mFileList (append mFileList (list (vl-string-left-trim "\\" xMFileStr))))<br/>&nbsp;&nbsp;&nbsp;&nbsp; );end_progn then<br/>&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq mFileList (vl-filename-directory xMFileStr))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq mFileList (list mFileList (vl-string-left-trim "\\" (vl-string-subst "" mFileList xMFileStr))))<br/>&nbsp;&nbsp;&nbsp;&nbsp; );end_progn else<br/>&nbsp;&nbsp;&nbsp;);end_if<br/>&nbsp;&nbsp;&nbsp;mFileList<br/>&nbsp;&nbsp;);end_progn<br/>&nbsp;);end_if<br/>);end_defun</p>

jxphklibin 发表于 2008-11-6 15:19:00

非常好的函数,受益匪浅啊!!!
页: 1 2 3 4 [5] 6
查看完整版本: vlisp如何打开多重选择文件对话框