Saludos a todos
Estoy desarrollando un programa de una bodega, en el cual hay un botellero implementado con un array de botones
Quiero construir los botelleros dinamicamente a partir de su numero de filas y columnas, que leeré de los campos correspondientes de una base de datos (para las pruebas los paso a traves de unos tedit: txtfila y txtcolumna)
Código:
procedure Tfrmvino.Button1Click(Sender: TObject);
var
fila, columna: integer; //numero de filas y columnas del botellero
i, j: integer;
posx, posy: integer; //posicion del boton en pantalla
begin
fila := strtoint(txtfila.Text);
columna := strtoint(txtcolumna.Text);
posx := 500;
posy := 90;
for i:= 0 to 9 do //limpiamos la matriz de botones
for j:= 0 to 9 do
botellero[i,j].free;
for i:= 0 to fila - 1 do
begin
for j:= 0 to columna - 1 do
begin
botellero[i,j]:= TButton.Create(self);
botellero[i,j].Parent := frmvino;
botellero[i,j].Top := posy;
botellero[i,j].Left := posx;
botellero[i,j].Name := 'botella_' + inttostr(i) + '_' + inttostr(j);
botellero[i,j].Tag := strtoint( inttostr(i) + inttostr(j));
botellero[i,j].Width := 30;
botellero[i,j].Height := 30;
posx := posx + 29;
end;
posx := 500;
posy := posy + 29;
end;
end;
el problema surge al limpiar el array bidimensional de botones. Ocurre lo siguiente:
- La primera matriz la dibuja correctamente (p.e, 2 filas y 4 columnas)
- Al dibujar la segunda matriz, borra correctamente la primera y dibuja la segunda. (p.e 2 filas, 2 columnas)
- Si hemos disminuido el numero de columnas en la segunda matriz respecto al anterior, si lo volvemos a incrementar para dibujar una tercera ( 2 filas, 4 columnas otra vez) salta una excepcion del tipo "access violation at address ...) en el bucle para limpiar el array justo cuando empieza a limpiar la segunda fila ( i = 1).
¿que es lo que estoy haciendo mal?
Utilizo Delphi 6 sobre Windows XP professional SP 1.
Muchas gracias por vuestra atencion