xiaomu 发表于 2005-8-5 17:00:00

[求助]为什么用MSComDlg对话框只得到路径?

<P>&nbsp;为什么只有路径?在2004下,运行下列语句:</P>
<P>(vl-load-com)<BR>(setq wincomdlg (vlax-create-object "MSComDlg.CommonDialog"))<BR>(vlax-import-type-library<BR>&nbsp;&nbsp;&nbsp; :tlb-filename<BR>&nbsp;&nbsp;&nbsp; "C:/WINNT/system32/COMDLG32.OCX"<BR>&nbsp;&nbsp;&nbsp; :methods-prefix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "comdlgm-"<BR>&nbsp;&nbsp;&nbsp; :properties-prefix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "comdlgp-"<BR>&nbsp;&nbsp;&nbsp; :constants-prefix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "comdlgc-"<BR>&nbsp;&nbsp; )<BR>(comdlgp-put-CancelError wincomdlg :vlax-true)<BR>;;;(comdlgp-put-CancelError wincomdlg :vlax-false)<BR>(comdlgp-put-MaxFileSize wincomdlg 32767)<BR>(comdlgp-put-Flags wincomdlg (+ 4 512 524288 1048576))<BR>(comdlgp-put-DialogTitle wincomdlg "请选择")<BR>(comdlgp-put-Filter wincomdlg "图形文件(*.dwg)|*.dwg|所有文件(*.*)|*.*")<BR>(comdlgp-put-FileName wincomdlg "")<BR>(comdlgm-ShowOpen wincomdlg)<BR>(setq wj (comdlgp-get-FileName wincomdlg))</P>
<P>选一个文件的时候,效果和getfiled差不多,可是选择多个文件之后,得到的却只有路径,没有文件名了?不知道怎么回事,麻烦大侠们告知小弟咯。</P>

xiaomu 发表于 2005-8-6 09:21:00

还是不知道什么原因,郁闷中```````

iceberg2509 发表于 2006-7-19 11:56:00

<P>不知道楼主有没有找到解决办法,按照vb中的文档说明来看,在多选文件时,filename是内存中一缓冲区,其属性应为“路径 文件名1 文件名2 ...”,其中filename各字段是以vbNullChar(亦即chr(0))隔开的,可是不知道在vlisp中读取到的缓冲区却丢失后面一部分数据。或者可以这么说,vlisp不能正确读取缓冲区?</P>
<P>欢迎各位高手参与讨论。</P>

iceberg2509 发表于 2006-7-19 12:00:00

<P>一楼的方法固然好,可是还是有缺陷,因为指定了一个绝对路径:c:/winnt/system32,所以可以改进如下:</P>
<P>(defun xd-getfiles (/ objDialog path files)<BR>&nbsp; (if (setq objDialog (vlax-create-object "MSComDlg.CommonDialog"))<BR>&nbsp;&nbsp;&nbsp; (progn (vlax-put-property objDialog "DialogTitle" "选择图形文件")<BR>&nbsp;&nbsp;&nbsp; (vlax-put-property objDialog "InitDir" (getvar "dwgprefix"))<BR>&nbsp;&nbsp;&nbsp; (vlax-put-property objDialog "Filename" "*.dwg")<BR>&nbsp;&nbsp;&nbsp; (vlax-put-property objDialog "Filter" "*.dwg")<BR>&nbsp;&nbsp;&nbsp; (vlax-put-property objDialog "MaxFileSize" 32767)&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; (vlax-put-property objDialog "Flags" 1610244)&nbsp;</P>
<P>;;1573380=4(隐藏只读复选框)+512(允许多重选择)+4096(只能输入文件名文本框已经存在的文件名)+<BR>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32768(返回的文件不能具有只读属性,也不能在写保护目录下面)+524288(使用类似资源管理器的打开一个文件的对话框模板)+<BR>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1048576(不要间接引用外壳链接(也称作快捷方式)。缺省时,选取外壳链接会引起它被外壳间接引用)<BR>&nbsp;&nbsp;&nbsp; (vlax-put-property objDialog "Action" 1) ;_ showopen-dialog<BR>&nbsp;&nbsp;&nbsp; (setq path (vlax-get-property objDialog "FileName")<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )<BR>&nbsp; (if (/= path "*.dwg")<BR>&nbsp;&nbsp;&nbsp; path<BR>&nbsp;&nbsp;&nbsp; nil<BR>&nbsp; )<BR>)</P>

龙龙仔 发表于 2006-7-19 12:43:00

<P><A href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=42463" target="_blank" >http://bbs.mjtd.com/forum.php?mod=viewthread&tid=42463</A></P>
<P>我U盘上mjtdgetfilem.rar是最后版本</P>

无痕 发表于 2006-7-19 15:03:00

龙兄又偷偷藏了什么宝贝:P ...

iceberg2509 发表于 2006-7-19 15:55:00

谢谢龙老大。
页: [1]
查看完整版本: [求助]为什么用MSComDlg对话框只得到路径?