关于align属性,真的很难。高手看看吧。(200分)

Z

zlj555

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Form中放Panel1,然后依次在Panel1中放入Panel2,Panel3,Panel4,Panel5,并且align
属性分别都设为alTop,但是当我用程序依次把Visible设为False时,再用程序依次Visible
=True,问题出现了,就是各个控件的出现位置不能控制(不是按Panel2,3,4,5排列的)
有谁有比较好的办法解决这一问题。我希望的是哪个先Visible=true就哪个排在最上面。
 
建立一个Panle6.
把P1,P2,P3,P4,P5都放进Panle6里面.
直接Panle6.visible := False; 就可以了吧?

:)...
 
属性不要设成visible,只要用height来控制就好了。注意调节高度很方便。
 
你说错了吧,本来就是哪个先Visible=true就哪个排在最上面的啊。
如果要按顺序排列,可不可以先将顺序靠后又先true的再false一下,把顺序靠前的true完
之后再把它置为true。
 
解决了,但是以上的各位都没答对呀.:)
 
我的办法可以解决呀...
说说你怎么解决的吧?
 
你的分反正也拿不回来,送给提出有效答案的朋友吧!
 
在object treeview中看。
 
我来猜:
把所有的Panel的Align属性都设为alNone,Visible为False;
以后就
Align := alTop; Visible := True;
Align := alNone: Visible := False;
配对使用。
 
那个先Visible,那个在最上,这个问题我若干年前就解决了
 
to 郭玉梁,你是如何解决的??
 
于BringToFromt和SendToBack配合一下不就行了.
 
我刚试出的这个方法,代码有点乱,可以实现,你试试:
在主FORM上加一个sname:String;的全局变量
增加一个自定义函数,用来返回当前显示的最后一个Panel名:
function TForm1.findvisible:String;
var i,itop:Integer;
str:STring;
begin
with TPanel('Panel' + IntToStr(i)) do
begin
itop:=0;
str:='';
for i :=1 to 5 do
begin
if Visible then
begin
if Top>itop then
begin
itop:=Top;
str:='Panel' + IntToStr(i);
end;
end
end;
Result:=str;
end;
end;

在显示各个Panel处加入代码,以Panel11为例,其它以此类推
......
Panel1.Visible:=True;
sname:=findvisible;
if sname<>'' then
Panel1.Top:=TPanel(sname).Top+TPanel(sname).Height
else Panel1.Top:=0;
......
用以上方法可以实现最后显示的Panel1在最上面,显示部分的代码你可以再做一个自定义函数进一步
将代码优化
 
多人接受答案了。
 
顶部