显示方式的问题[300分献上](300分)

5

52free

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我问题的一个演示
我要在一个scrollbox上动态创建一些groupbox组件
但是这段程序的结果是,创建groupbox的顺序却是逆序的
我是想从上到下是1,2,3,4
最终的结果却是4,3,2,1
align:=altop;//请注意这一句
哪位能给点有建设性的意见
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 4do
begin
with TGroupBox.Create(self.ScrollBox1)do
begin
Parent:=Self.ScrollBox1;
align:=altop;
caption:=inttostr(i);
end;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=4do
wnto 1do
begin
with TGroupBox.Create(self.ScrollBox1)do
begin
Parent:=Self.ScrollBox1;
align:=altop;
caption:=inttostr(i);
end;
end;
end;

测试通过,可以结贴啦!
 
^_^,这样也行啊。
 
to xuxiaohan老大
我是为了第一个创建的控件排在最上面
而不仅仅是为了搞个虚假的caption值
我只是给出一个直观演示真正问题并不是那个caption值
苦笑:(
 
很简单,在每次创建之后,设置groupbox的top属性=一个肯定比前面的height加起来都大的数据 就可以了。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 4do
begin
with TGroupBox.Create(self.ScrollBox1)do
begin
caption:=inttostr(i);
align:=altop;
top:= 100*i;
Parent:=Self.ScrollBox1;
end;
end;
end;

 
to eric.youbin
你的想法是一个方法,实际上我如果实在不能找到解决的方法,就只能如此了
但我是个懒人,就是想不劳而获啊,明明有这个属性我就是用不上,郁闷ing
再看看,别的兄弟有什么想法
晚上我来结贴
 
eric.youbin是正确的
groupbox创建是按循序创建的,这没有问题,问题出在align:=altop上,你可以发现,如果不顶端对齐时,4个GROUPbox是重叠在一起的,并且排列循序是4-3-2-1,因此,当你创建1时,它是可以TOP在最上面的,可是你调试时可以发现,当你创建2时,就算不对齐,它本身都是在1的上面。。。因为groupbox缺省的TOP都为0。。。,只有设置第二个GROUPBOX的TOP值大于第一个时,才正确。
 
52free:
那是我误会了,你也把把简单问题复杂化了。
var
i:integer;
begin
for i:=1 to 4do
with TGroupBox.Create(self.ScrollBox1)do
begin
Parent:=Self.ScrollBox1;
caption:=inttostr(i);
end;
for i:=ScrollBox1.ComponentCount-1do
wnto 0do
TGroupBox(ScrollBox1.Components).Align:=alTop;
OK,测试通过,达到你的要求了。还有问题?
 
for i:=4do
wnto 1do
 
to xuxiaohan:
你的方法可行,但我的问题仍然是简化的,我还有其它控件参与其中:)
oalongteng的方法可行,其实是在创建的时候赋一个top值超过前面控件的top值即可了
简化来说就像前面的程序中加上一句,当然实际问题不可能这么容易,谢谢各位给我的提示综合你们的想法就能够实现我的需求
for i:=1 to 4do
begin
with TGroupBox.Create(self.ScrollBox1)do
begin
caption:=inttostr(i);
top:= 10000*i;
align:=altop;
Parent:=Self.ScrollBox1;
end;
end;

 
设置可以这么做,
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=4do
wnto 1do
begin
with TGroupBox.Create(self.ScrollBox1)do
begin
Parent:=Self.ScrollBox1;
name := 'grp_box'+inttostr(i);
align:=altop;
caption:=inttostr(i);
end;

end;

end;

访问可以这么做
var i,k: integer;
begin
for i:= 0 to self.ScrollBox1.ControlCount -1 do
begin
if self.ScrollBox1.Controls.ClassName = 'TGroupBox' then
begin
showmessage(TGroupBox(TWinControl(self.ScrollBox1.Controls)).Name) ;
TGroupBox(TWinControl(self.ScrollBox1.Controls)).Align := altop;
end;

end;
end;
 
多人接受答案了。
 

Similar threads

顶部