请教在panel里show一个form的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 santaclaus
  • 开始时间 开始时间
S

santaclaus

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,问一下,
form1中放有button和panel,点击button要求在panel中以showmodal方式显示form2,如何实现呢?
以下是代码部分:
if not Assigned(form2) then form2:=Tform2.Create(nil);
lform2.Parent:=panel1;
try
SendMessage(form2.Handle,WM_NCACTIVATE,-1,0);
form2.Showmodal; //如果换成show就可以
finally
form2.Free;
end;
//上面代码可以show出form2出来,但不能控制,好象没有焦点.
//在dfw里我找过类似的问题,但没有答案,郁闷....
 
大家好,问一下,
form1中放有button和panel,点击button要求在panel中以showmodal方式显示form2,如何实现呢?
以下是代码部分:
if not Assigned(form2) then form2:=Tform2.Create(nil);
lform2.Parent:=panel1;
try
SendMessage(form2.Handle,WM_NCACTIVATE,-1,0);
form2.Showmodal; //如果换成show就可以
finally
form2.Free;
end;
//上面代码可以show出form2出来,但不能控制,好象没有焦点.
//在dfw里我找过类似的问题,但没有答案,郁闷....
 
必须是show , 因为当你showmodel时, 他的handle是panel的, 而panel属于form1.
 
用showmodal 当然不行了

showmodal 是不允许转移焦点的,而你把它的parent 指定为panel
那么form2的消息是由panel传过去的,也就是说操作form2就要先让panel获得消息,而form1又不能获得焦点,这就陷入了死锁,所以就造成两个窗体都没有响应了
 
那怎么实现类似于模式的窗体呢
 
如果实在解决不了,我给个方案,就是把panel1以外的panel的Enabled社为false,form2窗体hide时,再该回来,效果和Showmodal是一样的。
 
to cactus123456,
form1上只有一个panel1,
另外,可以说具体一点吗?
 
大家帮帮忙,只要能实现我要的功能,就散分
 
cactus123456大侠的意思是说form1 中所有其它控件在form2 show 时设为false(相当与showdoal,呵呵,不过如果还有其他窗体那么都要设为false ,有点麻烦)
form2,关闭时在改为true;
 
比较麻烦,求其它解
 
看这样行不行:(只针对本窗体有效)
procedure TForm1.Button1Click(Sender: TObject);

begin
if not Assigned(form2) then form2:=Tform2.Create(self);
form2.Parent:=panel1;
SendMessage(form2.Handle,WM_NCACTIVATE,-1,0);
form2.SetBounds(1,1,panel1.width-2,panel1.height-2);
form2.Show;
panel1.SetFocus;
end;
procedure TForm1.Panel1Exit(Sender: TObject);
begin
if assigned(form2) then
panel1.SetFocus;
end;
//然后在form2 的onclose中写action := cafree;
//ondestroy中写 form2 := nil;
 
点击button要求在panel中以showmodal方式显示form2
你想通过这样达到什么目的呢????
 
有ak_2004的地方问题就能解决!给分!
 
show 别free不就解决了, 在子窗体的close事件中action := cafree 不就行了.
 
santaclaus我想问问你,form1上只有一个panel,在这个panel上show和Showmodal有什么区别,你特别想利用这个区别干什么?
 
界面是分区域,panel是用来布局的,打个比方,我们看的IE,可以分成3个区域,上面的菜单,地址,快捷键是在一个panel上,中间显示panel,下面状态条,你是想中间获得焦点的时候其他地方无法获得焦点,你只需要将菜单,地址,快捷键所在的那个panel设置为Enabled:=false,就可以了。
 
to app2001
不就是只能操作当前form嘛!
 
to cactus123456
还有菜单,以及其它的控件啊,总不能一一enable:=false吧
 
如果这样,ak_2004,的方法不失为个好方法,我试过,可以实现你的要求
 
后退
顶部