PDA

Ver la Versión Completa : Error en el recuento de un Array


bulc
22-05-2015, 19:53:09
Llevo toda la tarde y no consigo ver dónde está el error. El array de Label's me da un indice sin nombre y con un elemento de más.
Un Label aparece desplazado en medio de la pantalla. Lo he comparado con otro que funciona bien y nada. Me rindo... por hoy.
A ver si vosotros veis el gazapo... Echádle un vistazo, por favor.

procedure TForm1.Button3Click(Sender: TObject); // Shuffle Shape's & Label's
var
i, a, b: Integer; AuxLbl, AuxShp: TPoint;
begin
//ShowMessage( IntToStr( Length(Label_A)) +' ' + IntToStr( Length(Label_A)) +' '+ IntToStr( Length(Label_A)) ); // Muestra 25!!!
Randomize;
for i:= Low(Label_A) to High(Label_A) - 1 do
begin
a:= Random(High(Shape_A)+ 1);
b:= Random(High(Shape_A)+ 1);

AuxShp:= Point(Shape_A[a].Left, Shape_A[a].Top);
AuxLbl:= Point(Label_A[a].Left, Label_A[a].Top);

Shape_A[a].Left:= Shape_A[b].Left;
Shape_A[a].Top := Shape_A[b].Top;

Label_A[a].Left:= Label_A[b].Left;
Label_A[a].Top:= Label_A[b].Top;

Shape_A[b].Left:= AuxShp.X;
Shape_A[b].Top := AuxShp.Y;

Label_A[b].Left:= AuxLbl.X;
Label_A[b].Top := AuxLbl.Y;

end;

Memo2.Clear;
for I :=0 to High(Shape_A) do
begin
Memo2.Lines.Add( 'Shape:' +InttoStr(I) + ' ' + Shape_A[I].Name + ' left ' + InttoStr( Shape_A[I].Left)
+' Top ' + InttoStr( Shape_A[I].Top) );
end;
for I := 0 to High(Label_A) do
Memo1.Clear;
for I := 0 to High(Label_A) do
begin
// El Indice, érroneamente, va de 0 ->24 = 25 Labels y aparece el índice 22 sin nombre, con el Top erróneo.
Memo1.Lines.Add( 'Index: ' +IntToStr(I) + ' ' +Label_A[I].Caption +' Left '+
IntToStr( Label_A[I].Left )+' Length '+ IntToStr(Length(Label_A))+' T '+ IntToStr( Label_A[I].Top ) ) ;
end;
end;
////////////////////////////////////////////////////////

Muchas gracias por el esfuerzo. Si hace falta más código, lo envío.
Saludos.
Bulc

Al González
22-05-2015, 22:09:24
OK. Pero, para no rendirnos, di de qué va el asunto... :)

mamcx
22-05-2015, 23:02:41
"Uno de estos ciclos, no es como los otros, es diferente de todos los demas..."

Cantado con este estilo:

https://www.youtube.com/watch?v=_JvSBkVMSn0

P.D: Mirar que es igual, que es diferente, es basico de la depuracion ;)

bulc
23-05-2015, 10:28:50
Hago un recorrido a los componentes de tipo TLabel en una aplicación y me devuelve uno de más.

mamcx
23-05-2015, 18:07:31
No cojiste la indirecta? El problema esta en los ciclos, no siguen el mismo patron.

bulc
23-05-2015, 18:35:47
No cojiste la indirecta? El problema esta en los ciclos, no siguen el mismo patron.
Espero que haya pegado la imagen correctamente... soy novato. Si te fijas, en el índice 22 pega un salto. Eso hace que uno de los TLabel ( el llamado DENTON10 se quede desplazado y fuera de lugar. Lo del ciclo no lo entiendo.

Casimiro Notevi
23-05-2015, 18:54:28
Una pista:

https://copy.com/hoWWZthdpwKp7f7L