afeng0712 发表于 2005-10-8 10:50:00

<P>Ea兄,烦把你联系方式告诉我好吗?我编程序涉及这方面问题,急想问你!急盼解决,几乎随时都在关心你们的答复,因为没有这方面的相关中文帮助目前我解决不了!</P>
<P>我的邮箱<A href="mailto:cwafeng@163." target="_blank" >cwafeng<A href="mailto:cwafeng@163." target="_blank" >@163.</A>com</A></P>

afeng0712 发表于 2005-10-9 21:06:00

2K跟XP可以调试通过,98好象还有问题!

<P>(DEFUN GETFILES&nbsp;(MSG WL / X)<BR>&nbsp; (VL-LOAD-COM)<BR>&nbsp; (IF (NOT (VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG"))<BR>&nbsp;&nbsp;&nbsp; (VL-REGISTRY-WRITE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "HKEY_CLASSES_ROOT\\LICENSES\\4D553650-6ABE-11CF-8ADB-00AA00C00905"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ""<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "GFJMRFKFIFKMKFFFRLMMGMHMNLULKMFMQKQJ"<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; (IF (SETQ X (VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG"))<BR>&nbsp;&nbsp;&nbsp; (PROGN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IF (NOT PATH)<BR>&nbsp;(SETQ PATH "")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VLAX-PUT-PROPERTY X "DIALOGTITLE" MSG)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VLAX-PUT-PROPERTY X "FILENAME" WL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VLAX-PUT-PROPERTY X "FILTER" WL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VLAX-PUT-PROPERTY X "INITDIR" PATH)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VLAX-PUT-PROPERTY X "MAXFILESIZE" 10000)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;; IN LISP UNBEDINGT NOTWENDIG, SONST KOMMT NE&nbsp; ;;FEHLERMELDUNG VON WEGEN ZU WENIG SPEICHER<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VLAX-PUT-PROPERTY X "FLAGS" 512)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (VLAX-PUT-PROPERTY X "ACTION" 1) ;_ SHOWOPEN-DIALOG<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ ERG (VLAX-GET-PROPERTY X "FILENAME"))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; (IF (AND ERG (/= ERG WL))<BR>&nbsp;&nbsp;&nbsp; (SETQ ERG (STTOLST ERG))<BR>&nbsp;&nbsp;&nbsp; (SETQ ERG NIL)<BR>&nbsp; )<BR>)</P>
<P>(DEFUN STTOLST (STR / F F2 LST I)<BR>&nbsp; (SETQ I 1)<BR>&nbsp; (SETQ F2 "")<BR>&nbsp; (WHILE (/= (SETQ F (SUBSTR STR I 1)) "")<BR>&nbsp;&nbsp;&nbsp; (IF&nbsp;(= F " ")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (PROGN<BR>&nbsp;(SETQ LST (APPEND LST (LIST F2)))<BR>&nbsp;(SETQ F2 "")<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ F2 (STRCAT F2 F))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (SETQ I (1+ I))<BR>&nbsp; )<BR>&nbsp; (SETQ LST (APPEND LST (LIST F2)))<BR>)</P>
<P>调用命令:(GETFILES "选择需要批处理打印的文件" &nbsp;"*.PLT")</P>

龙龙仔 发表于 2005-10-12 14:39:00

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>&nbsp;</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>&nbsp;</P>

citykunan 发表于 2005-10-12 15:37:00

<P>龙版主的作品就是不一样啊!!!</P>

xiaomu 发表于 2005-10-12 16:01:00

<P>;;;说明:&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;&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对象&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>;;;可以进行多文件选取&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;功能上类同于dos_getfilem&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;返回值为"C:\\CAD\\DWG\000ct7b.dwg\000ct7c.dwg\000ct8.dwg"&nbsp;&nbsp;&nbsp; <BR>;;;其中"\000"为空字符;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;(setq maxfs&nbsp;&nbsp; 32767&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags&nbsp;&nbsp;&nbsp; (+ 4 512 524288 1048576 1024)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; diatl&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filter&nbsp; "图形文件(*.dwg)|*.dwg|所有文件(*.*)|*.*"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; initdir ""&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;&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>;;;调用方式 (Ms_getfilem maxfs flags diatl filter initdir)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;适用于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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>;;;by cs 2005.8.15&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P><BR>(defun Ms_getfilem (maxfs flags diatl filter initdir / wincomdlg filem)<BR>&nbsp; (vl-load-com)<BR>&nbsp; (setq wincomdlg (vlax-create-object "MSComDlg.CommonDialog"))<BR>&nbsp; (vlax-put-property wincomdlg 'CancelError :vlax-true)<BR>&nbsp; (vlax-put-property wincomdlg 'MaxFileSize maxfs)<BR>&nbsp; (vlax-put-property<BR>&nbsp;&nbsp;&nbsp; wincomdlg<BR>&nbsp;&nbsp;&nbsp; 'Flags<BR>&nbsp;&nbsp;&nbsp; flags<BR>&nbsp; )<BR>&nbsp; (vlax-put-property wincomdlg 'DialogTitle diatl)<BR>&nbsp; (vlax-put-property<BR>&nbsp;&nbsp;&nbsp; wincomdlg<BR>&nbsp;&nbsp;&nbsp; 'Filter<BR>&nbsp;&nbsp;&nbsp; filter<BR>&nbsp; )<BR>&nbsp; (vlax-put-property wincomdlg 'InitDir initdir)<BR>&nbsp; (vlax-invoke-method wincomdlg 'ShowOpen)<BR>&nbsp; (setq filem (vlax-get wincomdlg 'filename))&nbsp;<BR>&nbsp; (vlax-release-object wincomdlg)<BR>&nbsp; filem<BR>)<BR></P>

xiaomu 发表于 2005-10-12 16:07:00

<P>不知道龙龙仔是怎么解决的,</P>
<P>我尝试了很多次才试出来的 </P>
<P>用 (vlax-get wincomdlg 'filename)</P>
<P>替换(comdlgp-get-FileName wincomdlg)</P>
<P>但是其实还是不知道两种表达方式的真正差别?</P>
<P>请龙龙仔指导咯。</P>

龙龙仔 发表于 2005-10-12 16:21:00

<P>;;返回值为"C:\\CAD\\DWG\000ct7b.dwg\000ct7c.dwg\000ct8.dwg"</P>
<P>;;你是指去除"\000"吗?那再简单不过!&nbsp;&nbsp;&nbsp; 函数:vl-string-&gt;list<BR></P>

afeng0712 发表于 2005-10-13 22:38:00

龙老大,对话框打开后若取消会出错?能不能返回是NIL就好了,这样可执行相应后面操作!

afeng0712 发表于 2005-10-13 22:41:00

<P>你是指去除"\000"吗?那再简单不过!&nbsp;&nbsp;&nbsp; 函数:vl-string-&gt;list<BR>好象不那么简单,我是这样解决的!</P>
<P>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>(DEFUN MS_GETFILEM (MAXFS FLAGS DIATL FILTER INITDIR / WINCOMDLG)<BR>&nbsp; (VL-LOAD-COM)<BR>&nbsp; (IF (NOT (VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG"))<BR>&nbsp;&nbsp;&nbsp; (VL-REGISTRY-WRITE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "HKEY_CLASSES_ROOT\\LICENSES\\4D553650-6ABE-11CF-8ADB-00AA00C00905"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ""<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "GFJMRFKFIFKMKFFFRLMMGMHMNLULKMFMQKQJ"<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; (SETQ WINCOMDLG (VLAX-CREATE-OBJECT "MSCOMDLG.COMMONDIALOG"))<BR>&nbsp; (VLAX-PUT-PROPERTY WINCOMDLG 'CANCELERROR :VLAX-TRUE)<BR>&nbsp; (VLAX-PUT-PROPERTY WINCOMDLG 'MAXFILESIZE MAXFS)<BR>&nbsp; (VLAX-PUT-PROPERTY<BR>&nbsp;&nbsp;&nbsp; WINCOMDLG<BR>&nbsp;&nbsp;&nbsp; 'FLAGS<BR>&nbsp;&nbsp;&nbsp; FLAGS<BR>&nbsp; )<BR>&nbsp; (VLAX-PUT-PROPERTY WINCOMDLG 'DIALOGTITLE DIATL)<BR>&nbsp; (VLAX-PUT-PROPERTY<BR>&nbsp;&nbsp;&nbsp; WINCOMDLG<BR>&nbsp;&nbsp;&nbsp; 'FILTER<BR>&nbsp;&nbsp;&nbsp; FILTER<BR>&nbsp; )<BR>&nbsp; (VLAX-PUT-PROPERTY WINCOMDLG 'INITDIR INITDIR)<BR>&nbsp; (VLAX-INVOKE-METHOD WINCOMDLG 'SHOWOPEN)<BR>&nbsp; (SETQ FILEM (VLAX-GET WINCOMDLG 'FILENAME))<BR>&nbsp; (VLAX-RELEASE-OBJECT WINCOMDLG)<BR>&nbsp; (FSTR-&gt;LST FILEM)<BR>)<BR>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<BR>(DEFUN FSTR-&gt;LST (FM / N)<BR>&nbsp; (SETQ FF NIL)<BR>&nbsp; (IF (VL-STRING-POSITION (ASCII "\000") FM)<BR>&nbsp;&nbsp;&nbsp; (PROGN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (WHILE (VL-STRING-POSITION (ASCII "\000") FM)<BR>&nbsp;(SETQ N (VL-STRING-POSITION (ASCII "\000") FM))<BR>&nbsp;(SETQ FF (APPEND FF (LIST (SUBSTR FM 1 N))))<BR>&nbsp;(SETQ FM (SUBSTR FM (+ N 2) (- (STRLEN FM) N 1)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ FF (APPEND FF (LIST FM)))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (PROGN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ FF (VL-FILENAME-DIRECTORY FM))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ FF (LIST FF (VL-STRING-SUBST "" FF FM)))<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>调用命令<BR>(DEFUN AA()<BR>(SETQ MAXFS&nbsp;&nbsp; 32767<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FLAGS&nbsp;&nbsp; (+ 4 512 524288 1048576 1024)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DIATL&nbsp;&nbsp; "请选择"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILTER&nbsp; "打印文件(*.plt)|*.plt|所有文件(*.*)|*.*"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INITDIR ""<BR>)<BR>(IF PATH<BR>&nbsp; (SETQ INITDIR PATH)<BR>&nbsp; (SETQ INITDIR "")<BR>)<BR>(MS_GETFILEM MAXFS FLAGS DIATL FILTER INITDIR))</P>

xiaomu 发表于 2005-10-14 11:19:00

<P>没有,我指的是</P>
<P>为什么用 (vlax-get wincomdlg 'filename)可以得到返回值,</P>
<P>而 (comdlgp-get-FileName wincomdlg) 却只有路径没有文件名呢?</P>
<P>这两个到底有什么差别?</P>
页: 1 2 [3] 4 5 6
查看完整版本: vlisp如何打开多重选择文件对话框