问题描述
嗨 我们有一个VSTO开发的Word-Addin for Word 2007的问题,在Visual Basic中使用VS2008 SP1创建,以及Delphi开发的工具,其中使用Word 2007编辑RTF格式的 问题是文件锁定,奇怪的是它只在我们的COM-Addin被激活时发生。 我知道这个问题中有很多信息,我试过make尽可能的可读性和可理解性。 首先描述Delphi开发的工具如何工作。 DELPHI-TOOL : 。-font-size:11pt"> OLE-container继承自标准Delphi OLE-komponent。文档,在我们的例子中是MS Word 2007. 我们遇到了VSTO开发的COM-Addin的问题Word 2007,使用VS2008 SP1在Visual Basic中创建,以及Delphi开发的工具,其中使用Word 2007 问题是文件锁定,奇怪的是它只会在我们的COM-Addin被激活时发生。 我知道这个问题中有很多信息,我试过make是可读的和可理解的尽管这是一个与VSTO相关的论坛,但我认为Delphi代码可以帮助理解VSTO COM-Addin中的问题。 首先描述Delphi开发的工具如何工作。 DELPHI-TOOL: DELPHI-TOOL: 。-font-size:11pt"> OLE-container继承自标准Delphi OLE-komponent。文档,在我们的例子中是MS Word 2007. 这篇关于VSTO Word插件中的文件锁(优先支持?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
文本作为编辑器。
如果我们停用COM-Addin,没有错误,也没有文件锁定发生在另一个工具。
即使这是一个与VSTO相关的论坛,我认为Delphi代码可以帮助理解VSTO COM-Addin中的问题。
然后是对单词自动触发事件中发生的事情的描述。
最后有两个组件交互时的行为描述。
编辑后,从OLE对象检索rtf格式的文本并通过流类存储到数据库中。
问题是我们收到一个错误,流类无法打开文件,因为它被另一个进程使用。
显示rtf时文本,从数据库中检索文本,以下代码在OLE容器中显示它。
// - We need to save the RTF code in a temporary file
tmpFilename2 := CreateTempFile; // Local function creating a temporary file with the extension ".DOC"
// Use TFileStream instead of TStringList...(works better on large files)
// write the rtf-text from database (ATextRtf) to stream.
stream := TFileStream.Create(tmpFilename2, fmCreate or fmOpenWrite);
try
stream.Write(PChar(ATextRtf)^, Length(ATextRtf));
finally
stream.Free;
end;
// Create the OLE-object from the created file.
fOleContainer.CreateOLEObjFromFile(tmpFilename2, False);
// temporary files not needed anymore.
DeleteFile(tmpFilename2);
推荐答案
编辑RTF格式的文本作为编辑。
如果我们停用COM-Addin,则其他工具中不会出现错误且没有文件锁定。
然后是关于单词自动触发事件中发生的事情的描述。
最后有两个组件交互时的行为描述。
编辑后,从OLE对象检索rtf格式的文本并通过流类存储到数据库中。
问题是我们收到一个错误,流类无法打开文件,因为它被另一个进程使用。
显示rtf时文本,从数据库中检索文本,以下代码在OLE容器中显示它。
// - We need to save the RTF code in a temporary file
tmpFilename2 := CreateTempFile; // Local function creating a temporary file with the extension ".DOC"
// Use TFileStream instead of TStringList...(works better on large files)
// write the rtf-text from database (ATextRtf) to stream.
stream := TFileStream.Create(tmpFilename2, fmCreate or fmOpenWrite);
try
stream.Write(PChar(ATextRtf)^, Length(ATextRtf));
finally
stream.Free;
end;
// Create the OLE-object from the created file.
fOleContainer.CreateOLEObjFromFile(tmpFilename2, False);
// temporary files not needed anymore.
DeleteFile(tmpFilename2);