<P>我的邮箱<A href="mailto:cwafeng@163." target="_blank" >cwafeng<A href="mailto:cwafeng@163." target="_blank" >@163.</A>com</A></P>
2K跟XP可以调试通过,98好象还有问题!
<P>(DEFUN GETFILES (MSG WL / X)<BR> (VL-LOAD-COM)<BR> (IF (NOT (VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG"))<BR> (VL-REGISTRY-WRITE<BR> "HKEY_CLASSES_ROOT\\LICENSES\\4D553650-6ABE-11CF-8ADB-00AA00C00905"<BR> ""<BR> "GFJMRFKFIFKMKFFFRLMMGMHMNLULKMFMQKQJ"<BR> )<BR> )<BR> (IF (SETQ X (VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG"))<BR> (PROGN<BR> (IF (NOT PATH)<BR> (SETQ PATH "")<BR> )<BR> (VLAX-PUT-PROPERTY X "DIALOGTITLE" MSG)<BR> (VLAX-PUT-PROPERTY X "FILENAME" WL)<BR> (VLAX-PUT-PROPERTY X "FILTER" WL)<BR> (VLAX-PUT-PROPERTY X "INITDIR" PATH)<BR> (VLAX-PUT-PROPERTY X "MAXFILESIZE" 10000)<BR> ;; IN LISP UNBEDINGT NOTWENDIG, SONST KOMMT NE ;;FEHLERMELDUNG VON WEGEN ZU WENIG SPEICHER<BR> (VLAX-PUT-PROPERTY X "FLAGS" 512)<BR> (VLAX-PUT-PROPERTY X "ACTION" 1) ;_ SHOWOPEN-DIALOG<BR> (SETQ ERG (VLAX-GET-PROPERTY X "FILENAME"))<BR> )<BR> )<BR> (IF (AND ERG (/= ERG WL))<BR> (SETQ ERG (STTOLST ERG))<BR> (SETQ ERG NIL)<BR> )<BR>)</P><P>(DEFUN STTOLST (STR / F F2 LST I)<BR> (SETQ I 1)<BR> (SETQ F2 "")<BR> (WHILE (/= (SETQ F (SUBSTR STR I 1)) "")<BR> (IF (= F " ")<BR> (PROGN<BR> (SETQ LST (APPEND LST (LIST F2)))<BR> (SETQ F2 "")<BR> )<BR> (SETQ F2 (STRCAT F2 F))<BR> )<BR> (SETQ I (1+ I))<BR> )<BR> (SETQ LST (APPEND LST (LIST F2)))<BR>)</P>
<P>调用命令:(GETFILES "选择需要批处理打印的文件" "*.PLT")</P> mccad发表于2005-9-30 21:46:00static/image/common/back.gif虽然可以改成(vlax-put-property x \"Flags\" (+ 512 524288))来调用新的打开文件对话框,但返回值一直都调不出来。但用同样的方法在VBA中使用则没有问...
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3>这个问题是可以解决的<FONT face="Times New Roman">!</FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3>先让网友想想<FONT face="Times New Roman">!!</FONT></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman" size=3></FONT> </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman" size=3>;;test OK with XP<BR>;;(mjtd-getfiles DialogTitle filter)<BR>;;(mjtd-getfiles "选择图形文件" "Drawing Files|*.dwg|All Files|*.*")</FONT><BR> </P> <P>龙版主的作品就是不一样啊!!!</P> <P>;;;说明: <BR>;;;本函数使用MsComDlg.Commondialog对象 <BR>;;;可以进行多文件选取 <BR>;;;功能上类同于dos_getfilem <BR>;;;返回值为"C:\\CAD\\DWG\000ct7b.dwg\000ct7c.dwg\000ct8.dwg" <BR>;;;其中"\000"为空字符; <BR>;;;(setq maxfs 32767 <BR>;;; flags (+ 4 512 524288 1048576 1024) <BR>;;; diatl "请选择" <BR>;;; filter "图形文件(*.dwg)|*.dwg|所有文件(*.*)|*.*" <BR>;;; initdir "" <BR>;;;) <BR>;;;调用方式 (Ms_getfilem maxfs flags diatl filter initdir) <BR>;;;适用于cadR15以上任何本 <BR>;;;引用时请保留本明 <BR>;;;by cs 2005.8.15 </P>
<P><BR>(defun Ms_getfilem (maxfs flags diatl filter initdir / wincomdlg filem)<BR> (vl-load-com)<BR> (setq wincomdlg (vlax-create-object "MSComDlg.CommonDialog"))<BR> (vlax-put-property wincomdlg 'CancelError :vlax-true)<BR> (vlax-put-property wincomdlg 'MaxFileSize maxfs)<BR> (vlax-put-property<BR> wincomdlg<BR> 'Flags<BR> flags<BR> )<BR> (vlax-put-property wincomdlg 'DialogTitle diatl)<BR> (vlax-put-property<BR> wincomdlg<BR> 'Filter<BR> filter<BR> )<BR> (vlax-put-property wincomdlg 'InitDir initdir)<BR> (vlax-invoke-method wincomdlg 'ShowOpen)<BR> (setq filem (vlax-get wincomdlg 'filename)) <BR> (vlax-release-object wincomdlg)<BR> filem<BR>)<BR></P> <P>不知道龙龙仔是怎么解决的,</P>
<P>我尝试了很多次才试出来的 </P>
<P>用 (vlax-get wincomdlg 'filename)</P>
<P>替换(comdlgp-get-FileName wincomdlg)</P>
<P>但是其实还是不知道两种表达方式的真正差别?</P>
<P>请龙龙仔指导咯。</P> <P>;;返回值为"C:\\CAD\\DWG\000ct7b.dwg\000ct7c.dwg\000ct8.dwg"</P>
<P>;;你是指去除"\000"吗?那再简单不过! 函数:vl-string->list<BR></P> 龙老大,对话框打开后若取消会出错?能不能返回是NIL就好了,这样可执行相应后面操作! <P>你是指去除"\000"吗?那再简单不过! 函数:vl-string->list<BR>好象不那么简单,我是这样解决的!</P>
<P>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>(DEFUN MS_GETFILEM (MAXFS FLAGS DIATL FILTER INITDIR / WINCOMDLG)<BR> (VL-LOAD-COM)<BR> (IF (NOT (VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG"))<BR> (VL-REGISTRY-WRITE<BR> "HKEY_CLASSES_ROOT\\LICENSES\\4D553650-6ABE-11CF-8ADB-00AA00C00905"<BR> ""<BR> "GFJMRFKFIFKMKFFFRLMMGMHMNLULKMFMQKQJ"<BR> )<BR> )<BR> (SETQ WINCOMDLG (VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG"))<BR> (VLAX-PUT-PROPERTY WINCOMDLG 'CANCELERROR :VLAX-TRUE)<BR> (VLAX-PUT-PROPERTY WINCOMDLG 'MAXFILESIZE MAXFS)<BR> (VLAX-PUT-PROPERTY<BR> WINCOMDLG<BR> 'FLAGS<BR> FLAGS<BR> )<BR> (VLAX-PUT-PROPERTY WINCOMDLG 'DIALOGTITLE DIATL)<BR> (VLAX-PUT-PROPERTY<BR> WINCOMDLG<BR> 'FILTER<BR> FILTER<BR> )<BR> (VLAX-PUT-PROPERTY WINCOMDLG 'INITDIR INITDIR)<BR> (VLAX-INVOKE-METHOD WINCOMDLG 'SHOWOPEN)<BR> (SETQ FILEM (VLAX-GET WINCOMDLG 'FILENAME))<BR> (VLAX-RELEASE-OBJECT WINCOMDLG)<BR> (FSTR->LST FILEM)<BR>)<BR>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>(DEFUN FSTR->LST (FM / N)<BR> (SETQ FF NIL)<BR> (IF (VL-STRING-POSITION (ASCII "\000") FM)<BR> (PROGN<BR> (WHILE (VL-STRING-POSITION (ASCII "\000") FM)<BR> (SETQ N (VL-STRING-POSITION (ASCII "\000") FM))<BR> (SETQ FF (APPEND FF (LIST (SUBSTR FM 1 N))))<BR> (SETQ FM (SUBSTR FM (+ N 2) (- (STRLEN FM) N 1)))<BR> )<BR> (SETQ FF (APPEND FF (LIST FM)))<BR> )<BR> (PROGN<BR> (SETQ FF (VL-FILENAME-DIRECTORY FM))<BR> (SETQ FF (LIST FF (VL-STRING-SUBST "" FF FM)))<BR> )<BR> )<BR>调用命令<BR>(DEFUN AA()<BR>(SETQ MAXFS 32767<BR> FLAGS (+ 4 512 524288 1048576 1024)<BR> DIATL "请选择"<BR> FILTER "打印文件(*.plt)|*.plt|所有文件(*.*)|*.*"<BR> INITDIR ""<BR>)<BR>(IF PATH<BR> (SETQ INITDIR PATH)<BR> (SETQ INITDIR "")<BR>)<BR>(MS_GETFILEM MAXFS FLAGS DIATL FILTER INITDIR))</P> <P>没有,我指的是</P>
<P>为什么用 (vlax-get wincomdlg 'filename)可以得到返回值,</P>
<P>而 (comdlgp-get-FileName wincomdlg) 却只有路径没有文件名呢?</P>
<P>这两个到底有什么差别?</P>