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