ProgressBar 的问题(100分)

  • 主题发起人 主题发起人 Marlowe
  • 开始时间 开始时间
M

Marlowe

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个Progressbar 在一个Panel上放了一个ProgressBar,
一个Button 和一个Label,
不过当我执行 panel.visible := true 时
Button 和 Label都不显示。
哪位能帮我一下。
 
在什么情况下 令panel.visible:=true; 呢?他本身的属性是visible的呀?
 
补充说明:
我先设Panel.visible := false;
在需要时在置为true;
我观察只是在执行完后才显示Button 和Label
 
if panew.visible then
begin
button1.visible:=false;
label1.visible:=false;
end;
不知这样是否符合你的要求?
 
不对,button和label的visible 本来就是true
 
啊,明白了,你是想在用时显示 panel,待progressbar进行到头后
显示button1和label1,队部?
那么开始时
button1.visible:=false;
label1.visible:=false;
panel1.visible:=true;
然后当你每次改动progressbar1的position值时判断
其是否到达max值,如是,则
button1.visible:=true;
label1.visible:=true;
不就可以了么?
 
在buttonstartprogress on click时
button1.visible:=false;
lable1.visible:=false;
progressbar1.visible:=true;
panel1.visible:=true;

在progree结束时:
button1.visible:=true;
lable1.visible:=true;
progressbar1.visible:=false;

在button1onclick时:
prograssbar1.value:=prograssbar1.minvalue;
panel1.visible:=false;
 
你是否搞乱了组件的放置顺序,
应先放Panel,再在其上放置
TButton和TLabel,请检查
TButton和TLabel组件的Parent属性
是否是:panel1?
 
赵玉波说到了点上,肯定是你的Button和Label放置有问题,
在Panel上放Button和Label,不用更改Button和Label的visible,
Panel不可见时,他上面的东西都是不可见的,要可见,只用Panel.visible
是true就行了。

 
把你的程序要实现的功能解释一下,最好把关键部分的源代码贴出来!
 
试一下ProgressBar.sendtoback.
另外,你是不是要在Progressbar上显示label和button.
要是这样,你要把label和button的parent设为progressbar.
 
you might have lost the follow codes:

Application.processmessages;
 
不对,不对。
你们都理解错了。
不知是什么原因,Button只显示一个边框。等ProgressBar到头就好了。



procedure TFormjihua.BitBtn4Click(Sender: TObject);
var
i,j,t : integer;
FRow : integer;
Temp_Mac : string;

begin
if HyperGrid1.Colcount>5 then
begin
Panel4.Visible := true;
FRow := HyperGrid1.RowCount-2;
Hypergrid1.enabled := false;
HyperGrid1.RowCount := HyperGrid1.RowCount+1;
try
ProgressBar1.Min := 0;
ProgressBar1.Max := (FRow*(FRow-1)) div 2;
ProgressBar1.Position := 0;
Progressbar1.Step := 1;
ProgressBar1.SendtoBack;

for i := 1 to FRow do
begin
Temp_mac := HyperGrid1.Cells[0,i];
for j := i+1 to FRow do
begin
ProgressBar1.Position :=ProgressBar1.Position+1;
if Temp_Mac > HyperGrid1.Cells[0,j] then
begin
for t := 0 to HyperGrid1.ColCount-1 do
HyperGrid1.Cells[t,HyperGrid1.Rowcount-1] := HyperGrid1.Cells[t,i];
for t := 0 to HyperGrid1.Colcount-1 do
Hypergrid1.Cells[t,i] := HyperGrid1.Cells[t,j];
for t := 0 to hyperGrid1.Colcount-1 do
HyperGrid1.Cells[t,j] := Hypergrid1.Cells[t,HyperGrid1.Rowcount-1];
Temp_mac := HyperGrid1.Cells[0,i];

end ;

end;
end;
finally
Panel4.Visible := false;
HyperGrid1.enabled := true;
Hypergrid1.DeleteRow(HyperGrid1.RowCount-1);

end;
end;
showmessage ('排序完成,共'+inttostr(HyperGrid1.Rowcount-2)+'项任务');
 
哈哈,看来Marlowe的表述目前产生了歧义,
我们该照哪一种理解呢?
1.
(我想做一个Progressbar 在一个Panel上放了一个ProgressBar,
一个Button 和一个Label,
不过当我执行 panel.visible := true 时
Button 和 Label都不显示。)
(哪位能帮我一下。)
2.
(我想做一个Progressbar 在一个Panel上放了一个ProgressBar,
一个Button 和一个Label,)
(不过当我执行 panel.visible := true 时
Button 和 Label都不显示。
哪位能帮我一下。)

究竟
(不过当我执行 panel.visible := true 时
Button 和 Label都不显示。)
是你碰到的问题呢,还是你程序的要求?





 
啊,看来我的帖子晚了一步,Marlowe作出了回答,
这样吧,如果你做排序这种费时费力的操作,
最好把排序部分单写到一个线程里,这样就不会
出现上述问题了.
 
我觉得柳家老五说的对,因为在增加proccessbar的value时,
占用太多CPU ,没有时间去绘制button的画面,你只要每次
Proccessbar的value加一时,调用Application.processmessages即可;
 
柳五公子说的是对的,你的程序中少了一句:Application.ProcessMessages;
这一句应加在
ProgressBar1.Position :=ProgressBar1.Position+1;
Application.ProcessMessages;<==加在这
if Temp_Mac > HyperGrid1.Cells[0,j] then
....
 
Panel1.Refresh;
也可以.
 
这会好象沾边了。我先试试再说。
 
long time...............
 
后退
顶部