- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用XE8。Devex TcxGrid 有一列表示带有 PopupEditProperties 的 blob 数据,并且 PopupControl = TOleContainer 控件。该列代表各种数据类型(图像、pdf、word、excel、mpg、avi、mp3、ppt 等)的数据库字段 (BlobType)
当 PopupEditProperties 中的 OnInitPopup 事件触发时,我想这样做:
var
MS: TMemoryStream;
OC: TOleContainer;
begin
if not Query1.FieldByName('data').isNull then begin
OC := TcxPopupEditProperties(cxGrid1DBTableView1Data.Properties).PopupControl as TOleContainer;
//Size of Container
with OC do begin
Parent := TcxPopupEdit(Sender).PopupWindow;
Left := 5;
Top := 5;
Width := cxGrid1DBTableView1.Controller.FocusedColumn.Width;
Height := 300;
end;
MS := TMemoryStream.Create;
try
TBlobField(Query1.FieldByName('data')).SaveToStream(MS);
// I Want show the content with appropiate application
OC.LoadFromStream(MS); // here crashes
finally
MS.Free;
end;
end;
end;
出现无效的流格式消息。执行此操作的最佳问题是什么?
最佳答案
TOleContainer
通过 LoadFromStream
/SaveToStream
使用自己的格式。我假设您的数据库 blob 保存原始文件数据。您需要将TMemoryStream
保存到临时文件,然后调用CreateObjectFromFile
。
另一个选择是使用此解决方案:
Load a TOleContainer from a stream which contains a file image, without using CreateObjectFromFile (我个人会破解所需的私有(private)成员并编写一个独立的程序,但这将取决于版本)。
显然,我假设正确的上述“解决方案”不起作用,并且失败,并出现 “%1 已存在”
EOleSysError 异常,正如您在评论中提到的。
因此,据我所知唯一的方法是使用具有正确扩展名的临时文件。需要扩展名来确定哪个 OLE 服务器应用程序将处理该文件。这些扩展中的每一个都在您的计算机上的 HKEY_CLASSES_ROOT
中注册。 IMO,您必须将文件类型保存在数据库中。您的应用程序稍后如何知道它是什么类型?唯一的方法是检查流/blob签名(这可能不是 100% 准确)。
关于delphi - 将 Blob 内容显示到 OleContainer Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39252681/
下午好:-),在我的应用程序中,我使用 OleContainer 从 Microsoft Powerpoint 查看演示文稿。 我用此代码加载和运行演示文稿文件: with oleContainer
使用XE8。Devex TcxGrid 有一列表示带有 PopupEditProperties 的 blob 数据,并且 PopupControl = TOleContainer 控件。该列代表各种数
我正在开发旧版 Delphi 6(Build 6.240,Update Pack 2)应用程序,该应用程序在 Windows XP 和 Office 2000 - 2003 上运行良好。 我们的客户现
我是一名优秀的程序员,十分优秀!