如何保持OleContainer在失去焦点后的激活状态?(50分)

  • 主题发起人 主题发起人 bihai
  • 开始时间 开始时间
B

bihai

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,看了Delphi的例子,也没有发现这个问题如何解决。所以过来请教一下,我想将
OleContainer联接一个Excel表,然后与DataSet交换数据,希望能成功!
 
不使用in_place激活就可以.会另外开一个窗口,失去焦点也不会关闭.
 
TOleContainer是在CM_UIDEACTIVATE的消息处理中处理失去焦点的,因此只要把
这个消息截获,就可以保持激活了。下面是一例(长了点。。):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtnrs;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
OleContainer2: TOleContainer;
public
{ Public declarations }
end;

TOleContainerAc=class(TOleContainer)
private
FCannotDeactivate: Boolean;
procedure CMUIDeactivate(var Message: TMessage); message CM_UIDEACTIVATE;
published
property CannotDeactivate: Boolean read FCannotDeactivate write FCannotDeactivate;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TOleContainerAc }

procedure TOleContainerAc.CMUIDeactivate(var Message: TMessage);
begin
if not CannotDeactivate then
inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
OleContainer2 := TOleContainerAc.Create(Self);
OleContainer2.Parent := Self;
OleContainer2.AllowInPlace := True;
OleContainer2.Left := 10;
OleContainer2.Top := 10;
OleContainer2.Width := 300;
OleContainer2.Height := 300;
OleContainer2.Visible := True;
TOleContainerAc(OleContainer2).CannotDeactivate := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
OleContainer2.CreateObject('Word.Document',False);
end;

end.
 
TOleContainerAc
是什么控件?
 
TOleContainerAc继承自TOleContainer,代码很简单,属性CannotDeactivate决定失去焦
点时是否可以进入不活动状态,如果为TRUE,则CM_UIDEACTIVATE消息将被截住,从而保持
激活状态。
 
上面的代码可以直接运行。
上面代码是在运行期创建控件;如果需要在设计时创建,需要把TOleContainerAc的代码
单独为一个文件,加到一个包中并安装。
 
谢谢Huzzz,问题解决了,不过没看懂,不知道怎么回事。

还有个问题,我是打开窗体就要处于激活才好。
但是,工具条乱跑,是不是创建的顺序问题?
我在OleContainer创建之前,手工创建了窗体的工具条,还是不行。

另外,如果Word文档里有目录什么的,点击可以跳到文章内容去,
但是这个时候我的Form多了个垂直滚动条,点击会变成黑色(不刷新?)
点哪里哪里就变得正常了,但是OleContainer本身就有一个滚动条,所以很难看。

窗体尺寸变化以后,恢复正常。

 
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1354567
关注一下吧没有人提起来呀!用MODEM打电话利用PC机的耳机和麦克风,自己编程如何实现?
(我知道有现成的软件可以用,但是我想自己实现这个上东西)
QQ:65466700
MAIL: along@b2sun.com
TEL :13802785865
http://b2sun.com
请各位大侠多多指教!

 
to :Huzzz

请教,重新获得焦点的OLE无法编辑打开的文件了!应该如何解决。
你的解决方法是否有问题
 
后退
顶部