关于form的parent(100分)

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

huanq

Unregistered / Unconfirmed
GUEST, unregistred user!
我编了一个程序,有十几个窗口,form1为main form,其中有一个panel1
其它form中的onactive中有如下代码
form1.panel1.parent:=formX;
formX为要active的窗口
可点过几次之后,那个panel就消失了,相应的位置留下一片空白
想是内存不足,但在win2k中却没有这种情况,不知道该如何解决
望各位大虾赐教,急用
(注:delphi6+win98se)
 
你的代码真有趣,parent应该在创建控件时指定,而不能在create而且指定parent的情况下
改变parent,程序语句本来就有问题!
 
to eliuliu
sorry i'm a beginner.
我在其他form中要用到这个panel及其上面的button等东西,该怎么办?
 
那你必须连同它的form一同调用。
 
HunyterTeam
excuse me
能详细些吗?
 
你的这种用法不正确,你不能将已知Form上的Panel赋值为其它的窗口,你可以将新创建的窗口
的父指定为已知Form上的Panel,如formX.parent:=form1.panel1;
 
你这样不好的。
你将form1.panel1.parent:=formX改为
formX.parent :=form1.panel;这样才算是比较规范的。
另外,在你的每个form的onactive过程中,应该先遍历所有没有关闭的窗体。
然后将它们关闭掉。
 
你确定是这样的吗?
我试了一下,出错‘cannot change visible in onshow or onhide’
 
我不能把其他form Free 掉
这样做不行,还有其他方法吗?
多谢多谢!
 
怎么没有人理我了?我的问题还没解决呢!
 
到底什么意图?
用frame是否可以解决?
 
form1.panel1.parent:=formX;
这句很可疑。
假设formX=form2, 则这时panel1.parent=form2
假设再次调用时formX=form3时, 此时form1中已经没有panel1这个控件了(panel1.parent=Form2了)。再次调用form1.panel1.parent := form3怎么会成功呢? 想不通。

不过如果用类似下列语句的话肯定不会有问题的。
unit unit1;
....
type
TForm1 = class(TForm)
Panel1: TPanel;
public
....
end;

var
form1: TForm1;
GlobPanel: TPanel;

....

procedure TForm1.FormCreate(Sender: TObject);
begin
GlobPanel := Form1.Panel1;
end;


unit Unit2;

type
TForm2 = class(TForm)
....
end;

var
Form2: TForm;

implementation
uses unit1;

...
procedure TForm2.FormActivate(Sender: TObject);
begin
GlobPanel.parent := self;
end;

....
 
to pearl
我试过了,和从前的情况一样,还是几次切换之后那个panel消失
 
那就在设置panel.parent后加一句panel1.invalidate;
 
是GlobPanel.parent := self; 的后面吗?
 
对。
GlobPanel.Invalidate;
 
情况有所好转,但是多点过几次之后,还是相同的现象
 
愁死我了!
 
to pearl
我把你说的
GlobPanel.parent := self;
GlobPanel.Invalidate;
放在onactive中,还是象从前一样,但放在onshow中,情况好些了
可以多点几次了(98里)
以前win2k里没有这现象,但现在有了毛病了
 
主要是刷新出问题了。 如果设置完panel.parent 后马上强制刷新所有界面估计问题就得到解决了。
试试 GlobPanel.parent := self;后加一句
redrawwindow(handle, nil, 0, RDW_INVALIDATE or RDW_ERASE or RDW_ERASENOW or RDW_ALLCHILDREN);
 
后退
顶部