D
DragonPC_???
Unregistered / Unconfirmed
GUEST, unregistred user!
朋友有几个Word文件,需要放到网络上面去给人家看,但是要求文件只能够看,不能够保存,不
能够使用剪贴板拷贝。(别的拷贝方式就不用考虑了~~~)
我将word文件通过编写rc文件编译到了res文件里面
并准备通过OLEContainer装载ResourceStream显示
这是什么问题?
另外这个程序我需要配合剪贴板事件处理
能够使用剪贴板拷贝。(别的拷贝方式就不用考虑了~~~)
我将word文件通过编写rc文件编译到了res文件里面
代码:
{$R wordfile.RES}
// 从编译到Exe文件里面的wordfile.RES文件里面载入名字为Test,类型为WORDFILE的资源
function LoadWordFileFromRes(): TResourceStream;
begin
result := TResourceStream.Create(Hinstance, 'Test', 'WORDFILE');
end;
并准备通过OLEContainer装载ResourceStream显示
代码:
procedure TForm1.Button1Click(Sender: TObject);
var
res: TResourceStream;
begin
res := LoadWordFileFromRes();
res.Position := 0;
// res.SaveToFile('Temp.doc') ; 经测试产生的Temp.doc完全正确
try
with OleContainer1 do
begin
if (State = osEmpty) then
begin
CreateObject('Word.Document', False);
DoVerb(PrimaryVerb);
end;
// 在这里没有问题,OleContainer出现了Word界面和空白文档
LoadFromStream(res);
// 报invalid stream format错误
LoadFormFile('temp.doc') ;
// 仍然报invalid stream format错误,我KAO
end;
finally
res.Free;
end;
end;
这是什么问题?
另外这个程序我需要配合剪贴板事件处理
代码:
private
NextClipHwnd: HWND;
procedure WMDrawClipBoard(var AMessage: TMessage); message WM_DRAWCLIPBOARD;
... ...
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
NextClipHwnd := SetClipBoardViewer(Handle);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ChangeClipboardChain(Handle, NextClipHwnd);
SendMessage(NextClipHwnd, WM_CHANGECBCHAIN, Handle, NextClipHwnd);
end;
procedure TForm1.WMDrawClipBoard(var AMessage: TMessage);
begin
// SendMessage(NextClipHwnd, AMessage.Msg, AMessage.WParam, AMessage.LParam);
// 探测到新的剪贴板事件以后,清除Clipboard内容
// Clipboard.Clear;
// ~~~~~~~~~~~~~~~~问题就在这里,加上这句话就整个程序完蛋,我理解可能OLEContainer
// 的某些操作可能和Clipboard有关
end;