Ver Mensaje Individual
  #11  
Antiguo 26-09-2008
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Reputación: 21
gatosoft Va camino a la fama
Hey amigo Nebli... No, a mi no me incomoda el hecho que hagas tu aplicacion asi..... Yo solo comentaba que ya muchos hemos pasado por ahi y hemos tenido el mismo dilema....

Bueno por otro lado, si me da un tick en el ojo cuando veo que prefieres hacer el trabajo en tiempo de diseño.... Es cierto que te toca escrbir un poco mas de codigo, pero no es tanto y compensa a la hora de hacer el mantenimiento a tu codigo.... como tu mismo observas... si quieres hacer una matriz de 500 x 500 vas a tener probelmas mas adelante....

Te envio un codigo de base para que lo revises ... a lo mejor te sirve...

1) Abre un proyecto nuevo
2) pon un Boton en el formulario
3) has dobleclick sobre el boton (Se crea el evento onclick pero no hagas nada con eso)
4) sobre-escribe todo este codigo en tu Unit1...

Espero que te sirva

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    //Debes crear tu evento Onclick... Definido de la siguiente manera   
    //type TNotifyEvent = procedure (Sender: TObject) of object;
    Procedure MyOnClick(Sender: TObject);
    procedure ConstruirPaneles(objContenedor_p:TWinControl; intFilas_p, intColumnas_p:Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ConstruirPaneles(objContenedor_p:TWinControl; intFilas_p, intColumnas_p:Integer);
Var ElPanel:TPanel;
    i,j,
    intContador,
    intAncho,
    intAlto,
    intSeparacionFilas,
    intSeparacionColumnas,
    intMargenFilas,
    intMargenColumnas:Integer;
Begin

   //Valores en Pixeles
   //Juega con ellos para que veas el efecto
   intAncho:=40;
   intAlto:=40;
   intSeparacionFilas:=5;
   intSeparacionColumnas:=5;
   intMargenFilas:=50;
   intMargenColumnas:=50;

   intContador:=0; //Para manejar el Tag

   For i:=1 to intFilas_p do
     For j:=1 to intColumnas_p do
     Begin
        inc(intContador);

        ElPanel:=TPanel.Create(objContenedor_p);
        ElPanel.Name:='MyPanel_'+IntTostr(intContador);
        ElPanel.Tag:=intContador;
        ElPanel.Caption:=IntToStr(intContador);
        ElPanel.OnClick:= MyOnClick; //Asignas tu evento al evento de cada panel que crees

        ElPanel.Width:=intAncho;
        ElPanel.Height:=intAlto;
        ElPanel.Top:=(i-1) * (intAlto+intSeparacionFilas) + intMargenFilas;
        ElPanel.Left:=(j-1) * (intAncho+intSeparacionColumnas) + intMargenColumnas;
        ElPanel.Parent:=objContenedor_p;
     end;// for j
end;

Procedure TForm1.MyOnClick(Sender: TObject);
Begin
  ShowMessage('Clickeaste en el panel: '+(Sender as TPanel).Caption);
  //Pon aqui el codigo que quieras... por ejemplo para dar color a tus paneles
  //Bueno aqui utilizars el tag para algo....
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ConstruirPaneles(Self,10,12);
end;

end.

Bye

Última edición por gatosoft fecha: 26-09-2008 a las 18:07:13. Razón: Se me olvido un comentario
Responder Con Cita