打开word文档后如何重新设置显示区域的大小???(200分)

  • 主题发起人 主题发起人 hq_pan
  • 开始时间 开始时间
H

hq_pan

Unregistered / Unconfirmed
GUEST, unregistred user!
我用OleContainer打开了一个word文档,显示也正常,问题是如果我改变Form的大小,
那么显示那个word文档内容的那个区域的大小是不随着改变的,下面还有一个OleContainer
自己的显示word文档内容的背景是灰色字体是黑色的区域(相当于调用了CreateObjectFromFile
后,不调用DoVerb(ovShow)是的显示界面),这样看起来就不好看了。
OleContainer属性:
AllowActiveDoc=True;
AllowInPlace=True;
AutoActivate=aaManual;
AutoVerbMenu=False;
我打开word文档的过程是:
OleContainer1.CreateObjectFromFile('E:/TestFile.doc',False);
OleContainer1.DoVerb(ovShow);
 
现在有了另外一个问题!!!
我原来测试的程序是一个只有简单界面的程序:两个Panel,三个Button,一个ComboBox,
一个OLEContainer,所以在:
OLEContainer.DoVerb(ovShow);
ActiveControl := ComboBox1;
ActiveControl := OleContainer;
后,没有任何错误,而我在一个项目中,因为界面复杂,所有出现了一个错误。
是这样的,我调用的语句基本相同:
OleContainer.DoVerb(ovShow);
ActiveControl := DBGrid1; //<<--(1)
ActiveControl := OleContainer;
执行到(1)的时候出现错误:
Can't focus a disabled or invisible window.
出现这个错误后,文档是显示出来了,不过这个过程的随后语句就执行了。
而就算我在(1)前显式的调用:
DBGrid1.Enble := True;
DBGrid1.Visible := True;
也不行!!!!!!!!!!
为什么?????????????
此外,我加了try-except语句也不能屏蔽掉这个错误,为什么???
以下是我的源码:
==========================
procedure TMainPageFrm.spdbtnYYBWJShowFileClick(Sender: TObject);
var
sFileName, sqlstr: string;
bsFileCon: TADOBlobStream;
begin
case TWinControl(Sender).Tag of
1: begin //显示文件
Cursor := crHourGlass;
sqlstr := Format(cYYBWJSQLGetFile,[adoqryYYBWJ.FieldByName('id').AsInteger]);
with dmStockSrv.adoqryPan do
begin
Active := False;
Filtered := False;
SQL.Clear;
SQL.Append(sqlstr);
Active := True;
bsFileCon := TADOBlobStream.Create(TBlobField(FieldByName('FileCon')),
bmRead);
Active := False;
end;
try
sFileName := cTempFileName+'.'+adoqryYYBWJ.FieldValues['FileExt'];
vYYBWJOpenFile := ExtractFilePath(Application.ExeName)+sFileName;
bsFileCon.SaveToFile(vYYBWJOpenFile);
pnlYYBWJFileCon.Visible := True;//这个是包含OleContainer的Panel
oleYYBWJfile.CreateObjectFromFile(vYYBWJOpenFile,False);
oleYYBWJfile.DoVerb(ovShow);
try
ActiveControl := dbgYYBWJ;
except
end;
ActiveControl := oleYYBWJfile;
finally
bsFileCon.Free;
//==(2)-begin
spdbtnYYBWJShowFile.Tag := 2;
spdbtnYYBWJShowFile.Caption := cCloseFile;
pnlYYBWJFileName.Caption := adoqryYYBWJ.FieldByName('FileName').AsString
+'.'+adoqryYYBWJ.FieldByName('FileExt').AsString;
adoqryYYBWJ.DisableControls;
dbgYYBWJ.Enabled := False;
Cursor := crDefault;
//==(2)-end
end; //end try-finally
//====(3)====
end; //end case-1
2: begin //关闭文件
try
if FileExists(vYYBWJOpenFile) then
if not DeleteFile(vYYBWJOpenFile) then
Application.MessageBox('删除文件错误!','错误',0);
except
//屏蔽错误
end;
adoqryYYBWJ.EnableControls;
dbgYYBWJ.Enabled := True;
pnlYYBWJFileCon.Visible := False;
spdbtnYYBWJShowFile.Tag := 1;
spdbtnYYBWJShowFile.Caption := cShowFile;//<<--(4)
end;
end; //end case
end;
以上代码中,如果(2)的语句挪到try-finally的后面,即(3)的地方,则不会运行,而是跳到了
(4)的地方,请问这是怎么回事??
如果分不够,可以再加!!!我现在可用积分是3000多,该够了吧?
 
只有人阅读,没有人回答???
 
关于第一个问题,我的解决方法是再改变form大小时再激活一次olecontainer,即调用
doverb方法。
 
你的意思不甚明白呀!
你是想使背景的颜色好看一些吗?
我到是有办法(我做过),但是,动静有一点大。
 
to ddntyz:
不是背景颜色好看,而是……
比如,原来OLEContainer的大小为400/200,那么我把word文档显示(doverb)后,显示出来的
word文档的界面就有400/200大小,这时如果我把Form改变大小,此时OleContainer的大小
改为500/300,但是显示word文档的地方还是只有400/200的大小,那么剩下的地方就空出来
了!此时那些地方的内容其实是没调用doverb前的内容。
to onlyou:
我试试
 
olecontainer的大小改变后,调用doverb,Word文档就会充满整个olecontainer的空间。[^]
 
好象我也是遇到了这样的问题。
我也觉得,改变了FORM的大小后,是有些影响。但是,我的程序要求与你的不同。
我把背景都弄成了黑色了的,就看不出来了。
但是,并没有真正的解决这个问题(也可能很难解决)。
你有QQ,或者邮箱吗?我觉得你似乎对OLE挺有研究的。我现在遇到了困难了。希望能
与你探讨一下!
我邮箱是:ddntyz@21cn.com
 
to hq_pan:
你在2002-3-28的回帖提出的问题解决了吗,在你改变olecontainer的大小后,再调一次doverb方法即可,我都是这样做的,不存在任何问题。
 
实在对不起!一直很忙,忘了说了。
改变olecontainer的大小后,再一次的调用doverb方法,的确解决了问题,
但是那些菜单、快捷工具条又出来了!如果失去了焦点就又自动隐藏。
对了,我想再问一个问题:能否在界面里集成word、excel等的编辑界面?
就是让文档可以编辑而且那些工具条等不会自动消失?
 
集成完全没有问题,在多文档界面中可以很好的解决失去焦点的问题。
 
前一段时间实在太忙了,所有一直没上来看看,真是对不起!
今天起我要测试这个功能了,看能否找出以下的解决方案:
用OleContainer把word等到程序里去,即可以编辑也可以不能编辑,
解决焦点问题。
我用的不是多文档界面,虽然是可以同时打开多个form,但是只有
一个主form(MainForm),而其它form都是集成到了Mainform里去,使用
Panel作为容器,因为使用多文档窗口(MDI)觉得功能不够,而且不好
控制。
非常感谢各位的关注,我测试完了,如果没有新的文件,就给分了。
 
给分了。。。
一直没时间测试 :-(
 
能否在界面里集成word、excel等的编辑界面?
就是让文档可以编辑而且那些工具条等不会自动消失?
我用了你的方法还是不行,用
一个form去装我的ole焦点失去后不能重新回来,我的
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1340917
谢谢
 
后退
顶部