一个很古怪的问题。。(0分)

I

imacih

Unregistered / Unconfirmed
GUEST, unregistred user!
{计算可见SpeedButton的位置}
procedure TWEForm.ChangeVisible;
var
i, j: integer;
a: array[1..11] of integer;
sb: array[1..11] of TSpeedButton;
begin
sb[1] := sbAddWaterRecord;
sb[2] := sbPrint;
sb[3] := sbAddAmmeterRecord;
sb[4] := sbPreview;
sb[5] := sbUpdate;
sb[6] := sbDelWater;
sb[7] := sbChangeWater;
sb[8] := sbAddWater;
sb[9] := sbDelAmmeter;
sb[10] := sbChangeAmmeter;
sb[11] := sbAddAmmeter;
for i := 1 to 11do
begin
if sb.Visible then
a := 1
else
a := 0;
end;
sb[1].Left := 0;
for i := 2 to 11do
begin
if sb.Visible then
begin
sb.Left := 0;
for j := 1 to i - 1do
sb.Left := sb.Left + sb[j].Width * a[j];
end;
end;
end;
上面这段代码用来移动ToolBar上SpeedButton的位置,使可见的SpeedButton始终靠左。
但上面这段代码得出的结果却是把SpeedButton的顺序给倒过来了,也就是说看程序的结果好像从左到右应该是
Sp1----Sp11的,但得出来的效果却是从Sp11----Sp1。
还有,下面这小段代码:
for i := 1 to 11do
begin
if sb.Visible then
a := 1
else
a := 0;
end;
调试时,i的值居然是从11一直递减到1的,不解!!!!
望大侠指点!
谢谢!
 
上次好象有人,提过这样的现象,,,:O
我d5,win2000,没这样的问题 :O
 
碰到过too,不过忘了当时怎么解决了。
 
帮我认真想一想,谢谢!
 
不送分阿?
 
我意思是说,我似乎看到过有关这个问题的症状和解决方法的文章,但是实在没印象了。[:(]
我当时项目很急,所以也没好好找原因,用了个while循环,在里面使用Inc(i)...
应付过去的。
后来,就忘了去找解决方法了。[^]
 
编译器优化了代码,for循环中,它不是一直增加,而是一直递减,
如 for i := 0 to xdo
实际是 计数器是 x,然后循环一次减一,直到0,你要么另外加一个
变量,循环一次加一,或者在循环里面对i值进行引用试试,我记得
看到文章说在循环里对循环量进行引用,编译器就不会优化(即不会
改变循环量的值).
 

Similar threads

S
回复
0
查看
795
SUNSTONE的Delphi笔记
S
S
回复
0
查看
797
SUNSTONE的Delphi笔记
S
S
回复
0
查看
956
SUNSTONE的Delphi笔记
S
S
回复
0
查看
779
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部