查遍网络,也没有答案的新问题,同志们帮个忙吧! ( 积分: 100 )

  • 主题发起人 主题发起人 zwz_good
  • 开始时间 开始时间
Z

zwz_good

Unregistered / Unconfirmed
GUEST, unregistred user!
问题描述:<br> &nbsp; &nbsp;希望将word中的内容通过剪贴板和流存储,保存到数据库中。<br> &nbsp; &nbsp;当保存带有bmp格式的图片时,出现错误。<br> &nbsp; 比如:1、保存第一条记录时存在图片1,保存成功。<br> &nbsp; &nbsp; &nbsp; &nbsp; 2、再保存第二条记录存在图片2,保存成功。<br> &nbsp; &nbsp; &nbsp; &nbsp; 3、当调用第一条记录时图片1已由图片2取代.<br>为啥??各路高手出招吧!!
 
问题描述:<br> &nbsp; &nbsp;希望将word中的内容通过剪贴板和流存储,保存到数据库中。<br> &nbsp; &nbsp;当保存带有bmp格式的图片时,出现错误。<br> &nbsp; 比如:1、保存第一条记录时存在图片1,保存成功。<br> &nbsp; &nbsp; &nbsp; &nbsp; 2、再保存第二条记录存在图片2,保存成功。<br> &nbsp; &nbsp; &nbsp; &nbsp; 3、当调用第一条记录时图片1已由图片2取代.<br>为啥??各路高手出招吧!!
 
赵哥这莫早就来了,帮你顶一下,顺便看看我的问题能搞定吗,谢谢?<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3241500
 
我觉得是你在加载时没有将word中的内容清理干净,或者是你把剪切板中的bmp格式数据释放掉。可以通过那个剪切板察看器去观察一下,他存在的格式。------纯属个人意见。
 
仅保存RTF格式的时候容易出错,<br>而我这次保存了剪贴板中的17种格式,但是出现以上错误。
 
不要保存那末多种格式,效率会很低的。我以前试过感觉不爽,我感觉弄好rtf就好了。<br>以前讨论的贴子,你可以去看看,然后问问 wk_knife 他是高人!<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=2958293
 
即使rtf不知为什么特别容易出错,不稳定,保存多种格式后,稳定,可就是不知为什么会出现这样的错误??
 
头疼!!!!<br>受苦了。如果是这样就是还没有完全搞透,我还是觉得不必所有格式都保存,你在有图片的情况下,监测一下剪切半格式变化,反复研究一下,把常用的几种保存就行了(同时注意及时清除不同格式数据)。感觉原理就是这样了。微软的几种剪切板格式好像都是只注册的数字没有名字。。。。
 
自认明白了,可就是出错,可能这就是没有完全搞透的表现吧<br>word 到剪贴板中共有11种格式,不论是否存在图片,所有保存格式是一样的。<br><br><br><br>你还在用QQ吗?很长时间没联系了
 
老兄,可以把代码贴出来么,估计是插入时出了问题。
 
贴出来会很长。<br>unit ClipStream;//此单元来自Zswang//wjhu111@21cn.com<br>interface<br>uses Classes, Windows, clipbrd, Ut9Debug;<br>type<br> &nbsp;TDataIdnet = array[0..2] of Char;<br> &nbsp;TClipboardFileHead = packed record<br> &nbsp; &nbsp;rIdent: TDataIdnet;<br> &nbsp; &nbsp;rCount: Word;<br> &nbsp;end;<br> &nbsp;TClipboardFileItem = packed record<br> &nbsp; &nbsp;rFormat: Word;<br> &nbsp; &nbsp;rSize: Longword;<br> &nbsp; &nbsp;rData: Pointer;<br> &nbsp;end;<br>const<br> &nbsp;rDataIdnet: TDataIdnet = 'cbf';<br>function ClipboardSaveToStream(mStream: TStream): Boolean;<br>function ClipboardLoadFromStream(mStream: TStream): Boolean;<br>implementation<br>function ClipboardSaveToStream(mStream: TStream): Boolean;<br>var<br> &nbsp;vClipboardFileHead: TClipboardFileHead;<br> &nbsp;vClipboardFileItem: TClipboardFileItem;<br> &nbsp;I: Integer;<br> &nbsp;vData: THandle;<br>begin<br> &nbsp;Result := False;<br> &nbsp;if not Assigned(mStream) then<br> &nbsp; &nbsp;Exit;<br> &nbsp;vClipboardFileHead.rIdent := rDataIdnet;<br> &nbsp;vClipboardFileHead.rCount := Clipboard.FormatCount;<br> mStream.Write(vClipboardFileHead, SizeOf(vClipboardFileHead));<br> try<br> &nbsp; &nbsp;Clipboard.Open;<br> &nbsp; &nbsp;for I := 0 to Clipboard.FormatCount - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;vData := GetClipboardData(Clipboard.Formats);<br> &nbsp; &nbsp; &nbsp;vClipboardFileItem.rFormat := Clipboard.Formats;<br> &nbsp; &nbsp; &nbsp;vClipboardFileItem.rSize := GlobalSize(vData);<br> &nbsp; &nbsp; &nbsp;vClipboardFileItem.rData := GlobalLock(vData);<br> &nbsp; &nbsp; &nbsp;try<br> &nbsp; &nbsp; &nbsp; &nbsp;mStream.Write(vClipboardFileItem, SizeOf(vClipboardFileItem) -<br> &nbsp; &nbsp; &nbsp; &nbsp;SizeOf(vClipboardFileItem.rData));<br> &nbsp; &nbsp; &nbsp; &nbsp;mStream.Write(vClipboardFileItem.rData^, vClipboardFileItem.rSize);<br> &nbsp; &nbsp; &nbsp;finally<br> &nbsp; &nbsp; &nbsp; &nbsp;GlobalUnlock(vData);<br> &nbsp; &nbsp; &nbsp;end;<br><br> &nbsp; &nbsp;end;<br> &nbsp;finally<br> &nbsp; &nbsp;Clipboard.Close;<br> &nbsp;end;<br> &nbsp;Result := True;<br>end; { ClipboardSaveToStream }<br><br>function ClipboardLoadFromStream(mStream: TStream): Boolean;<br>var<br> &nbsp;vClipboardFileHead: TClipboardFileHead;<br> &nbsp;vClipboardFileItem: TClipboardFileItem;<br> &nbsp;I: Integer;<br> &nbsp;vData: THandle;<br>begin<br> &nbsp;Result := False;<br> &nbsp;if not Assigned(mStream) then<br> &nbsp; &nbsp;Exit;<br> &nbsp;if mStream.Size &lt;= SizeOf(vClipboardFileHead) then<br> &nbsp; &nbsp;Exit;<br> &nbsp;mStream.Read(vClipboardFileHead, SizeOf(vClipboardFileHead));<br> &nbsp;if vClipboardFileHead.rIdent &lt;&gt; rDataIdnet then<br> &nbsp; &nbsp;Exit;<br> &nbsp;Clipboard.Clear;<br> &nbsp;Clipboard.Open;<br> &nbsp;try<br> &nbsp; &nbsp;for I := 0 to vClipboardFileHead.rCount - 1 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;mStream.Read(vClipboardFileItem, SizeOf(vClipboardFileItem) -<br> &nbsp; &nbsp; &nbsp; &nbsp;SizeOf(vClipboardFileItem.rData));<br> &nbsp; &nbsp; &nbsp;vData := GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE,<br> &nbsp; &nbsp; &nbsp; &nbsp;vClipboardFileItem.rSize);<br> &nbsp; &nbsp; &nbsp;try<br> &nbsp; &nbsp; &nbsp; &nbsp;vClipboardFileItem.rData := GlobalLock(vData);<br> &nbsp; &nbsp; &nbsp; &nbsp;try<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mStream.Read(vClipboardFileItem.rData^, vClipboardFileItem.rSize);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SetClipboardData(vClipboardFileItem.rFormat, vData);<br> &nbsp; &nbsp; &nbsp; &nbsp;finally<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;GlobalUnlock(vData);<br> &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp; &nbsp;except<br> &nbsp; &nbsp; &nbsp; &nbsp;GlobalFree(vData);<br> &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;end;<br> &nbsp;finally<br> &nbsp; &nbsp;Clipboard.Close;<br> &nbsp;end;<br> &nbsp;Result := True;<br>end; { ClipboardLoadFromStream }<br>其中ClipboardSaveToStream为由剪贴板到流中<br>而ClipboardLoadFromStream为流到剪贴板中<br>数据库保存就不贴了,这两个函数是问题的关键
 
这似乎和我写的东西有相似处,我开发的是B/S结构的题库建设&amp;应用统<br>估计今晚我的个人网站就能开通,请下载参考<br>hppt://www.wenfensoft.com/download/setup.exe<br>or<br>ftp://ftp.wenfensoft.com/download/setup.exe<br><br>QQ:569137216
 
to lab01,<br> &nbsp;谢谢,只是不知你是如何处理这个问题的?
 
不好意思,最近很忙,不过我估计还是你的代码的问题!
 
另外WORD的剪贴板和一般的并不一样,它在复制时并没有将数据放到内存中,只是放了个标志,只有实际粘贴操作进行时才将真正的数据复制到内存!
 
TO:lab01<br> &nbsp;为啥网站不能访问?关注....
 
to wk_knife<br> &nbsp;如果真是如此,那就惨了
 
to lab01,<br> &nbsp; 就是,网站不能访问[:(]
 
给个理由吧,同志们[:(]
 
唉,此问题无解
 
后退
顶部