Ver Mensaje Individual
  #1  
Antiguo 16-05-2006
Raze Raze is offline
Registrado
 
Registrado: feb 2005
Posts: 9
Reputación: 0
Raze Va por buen camino
Liberar array bidimensional de botones

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

Última edición por Raze fecha: 17-05-2006 a las 09:35:32.
Responder Con Cita