Melhorar Código de criar componentesss emtempo de Execução

Delphi

05/06/2012


var
  times  : array[0..11] of integer;
  i, qt, n, total : integer;
  achou : boolean;
  label2: TLabel;
  label3: TLabel;
  label4: TLabel;
  label5: TLabel;
  label6: TLabel;

begin
  Randomize;
  //ShowMessage(No iníco);
  label2 := TLabel.Create(Self); //Da o valor especificado a variavel do tipo TButton
  label3 := TLabel.Create(Self);
  label4 := TLabel.Create(Self);
  label5 := TLabel.Create(Self);
  label6 := TLabel.Create(Self);
  //ShowMessage(Create Certo);
  label2.Parent := ScrollBoxMostra; //O botão aparece no formulario,você pode colocá-lo dentro de
  //qualquer outro componente colocando o nome dele,exemplo: panel1
  label3.Parent := ScrollBoxMostra;
  label4.Parent := ScrollBoxMostra;
  label5.Parent := ScrollBoxMostra;
  label6.Parent := ScrollBoxMostra;
  //ShowMessage(Parent certo);
  label2.Name:=label2; //Dá um nome ao botão
  label3.Name:=label3;
  label4.Name:=label4;
  label5.Name:=label5;
  label6.Name:=label6;
  //ShowMessage(Name certo);
  label2.Left:=16; //Especifica a posição X do botão
  label2.Left:=16;
  label3.Left:=16;
  label4.Left:=16;
  label5.Left:=16;
  label6.Left:=16;
  //ShowMessage(Left certo);
  label2.Top:=25 + Label1.Top; //Especifica a posição Y do botão
  label3.Top:=25 + Label2.Top;
  label4.Top:=25 + Label3.Top;
  label5.Top:=25 + Label4.Top;
  label6.Top:=25 + Label5.Top;
  //ShowMessage(Top certo);
  label2.Height:=19; //Define a altura do botão
  label3.Height:=19;
  label4.Height:=19;
  label5.Height:=19;
  label6.Height:=19;
  label2.AutoSize:=True; //Define a largura do botão
  label3.AutoSize:=True;
  label4.AutoSize:=True;
  label5.AutoSize:=True;
  label6.AutoSize:=True;
...



O código acima está funcionando legal...
Agora eu gostaria de melhora-lo! ESTE código com um pouco de observação está estático no SENTIDO DOS COMPONENTESS CRIADO POR MIM em tempo de EXECUÇÃO!

Eu gostaria de criar quantos componentes eu QUISESSE em Tempo de execução ???

Tipo um for i := 0 to VariavelDinamic
begin
label[i] := Tlabel.create;
end;

EU SEI que o código acima não va func MAS é só para expressar o que u gostaria de fazer CRIAR quantos componentes eu quisesse

Grato desde já pela ajuda


O código acimaestá funcionando legal...
Agora eu gostaria de melhora-lo! ESTE código com um pouco de observação está estático no SENTIDO DOS COMPONENTESS CRIADO POR MIM em tempo de EXECUÇÃO!

Eu gostaria de criar quantos componentes eu QUISESSE em Tempo de execução ???

Tipo um for i := 0 to VariavelDinamic
begin
label[i] := Tlabel.create;
end;

EU SEI que o código acima não va func MAS é só para expressar o que u gostaria de fazer CRIAR quantos componentes eu quisesse

Grato desde já pela ajuda
Ewerton Rodrigues

Ewerton Rodrigues

Curtidas 0

Respostas

Marco Salles

Marco Salles

05/06/2012

Seria mais ou menos assim :

var
times : array[0..11] of integer;
i, qt, n, total : integer;
achou : boolean;
Mylabel:Tlabel;

begin
for I := 0 to VariavelDinamic do
begin
//ShowMessage(No iníco);
Mylabel := TLabel.Create(Self); //Da o valor especificado a variavel do tipo TButton

//ShowMessage(Create Certo);
Mylabel.Parent := self; //O botão aparece no formulario,você pode colocá-lo dentro de
//qualquer outro componente colocando o nome dele,exemplo: panel1

//ShowMessage(Parent certo);
Mylabel.Name:=Mylabel +inttostr(i); //Dá um nome ao botão

//ShowMessage(Name certo);
Mylabel.Left:=16; //Especifica a posição X do botão

//ShowMessage(Left certo);
Mylabel.Top:=25 + (i+1)*Mylabel.Height; //Especifica a posição Y do botão

//ShowMessage(Top certo);
Mylabel.Height:=19; //Define a altura do botão

Mylabel.AutoSize:=True; //Define a largura do botão

end;
end;
GOSTEI 0
Ewerton Rodrigues

Ewerton Rodrigues

05/06/2012

Seria mais ou menos assim :

var
times : array[0..11] of integer;
i, qt, n, total : integer;
achou : boolean;
Mylabel:Tlabel;

begin
for I := 0 to VariavelDinamic do
begin
//ShowMessage(No iníco);
Mylabel := TLabel.Create(Self); //Da o valor especificado a variavel do tipo TButton

//ShowMessage(Create Certo);
Mylabel.Parent := self; //O botão aparece no formulario,você pode colocá-lo dentro de
//qualquer outro componente colocando o nome dele,exemplo: panel1

//ShowMessage(Parent certo);
Mylabel.Name:=Mylabel +inttostr(i); //Dá um nome ao botão

//ShowMessage(Name certo);
Mylabel.Left:=16; //Especifica a posição X do botão

//ShowMessage(Left certo);
Mylabel.Top:=25 + (i+1)*Mylabel.Height; //Especifica a posição Y do botão

//ShowMessage(Top certo);
Mylabel.Height:=19; //Define a altura do botão

Mylabel.AutoSize:=True; //Define a largura do botão

end;
end;


Vou testar o Código aqui. Eu não pensei que com um for daria, eu pensei que seria algo mais diferente

Mas vou testar agora e respondo
GOSTEI 0
Ewerton Rodrigues

Ewerton Rodrigues

05/06/2012

var
  times  : array of integer;
  i, qt, n, total : integer;
  achou : boolean;
  labels: TLabel;
  label2: TLabel;
  label3: TLabel;
  label4: TLabel;
  label5: TLabel;
  label6: TLabel;

  MudaPosition: integer;

begin
  Randomize;
  SetLength(times, QuantTime);
  MudaPosition := 224;

  for i := (low(times) + 2) to ((Length(times) -1) div 2) + 1 do
  begin
    labels := TLabel.Create(Self); //Da o valor especificado a variavel do tipo TButton
    labels.Parent := ScrollBoxMostra; //O botão aparece no formulario,você pode colocá-lo dentro de
    //qualquer outro componente colocando o nome dele,exemplo: panel1
    labels.Left:=16; //Especifica a posição X do botão
    labels.Top:=25 + MudaPosition; //Especifica a posição Y do botão
    labels.Height:=19; //Define a altura do botão
    labels.AutoSize:=True; //Define a largura do botão
    labels.Caption := True;
    labels.Name:= label + inttostr(i); // Coloca um Nome na Label
    MudaPosition := MudaPosition + 25;
    Memo1.Lines.Add(labels.Name + #13);
  end;


Este código Até Funcionou Criou os COMPONENTES
MAS NÃO ESTÁ SENDO ACESSÍVEL ??? Não entendi

Pois abaixo deste código eu tento acessa-lo e não dá

Código de acesso abaixo e é no mesmo evento!
...
for i := 0 to total do
  begin
    if i = 0 then
    begin
    label1.Caption := Time  + inttostr(times[i]) +  x Time  + inttostr(times[total+i+1]);
    ShowMessage(Label1.Name);
    ShowMessage(Label1.Caption);
    end;
    if i = 1 then
    begin
    label2.Caption := Time  + inttostr(times[i]) +  x Time  + inttostr(times[total+i+1]);
    ShowMessage(label2.Name);
    ShowMessage(label2.Caption);
    end;
    if i = 2 then
    begin
    label3.Caption := Time  + inttostr(times[i]) +  x Time  + inttostr(times[total+i+1]);
    end;
    if i = 3 then
    begin
    label4.Caption := Time  + inttostr(times[i]) +  x Time  + inttostr(times[total+i+1]);
    end;
    if i = 4 then
    begin
    label5.Caption := Time  + inttostr(times[i]) +  x Time  + inttostr(times[total+i+1]);
    end;
    if i = 5 then
    begin
    label6.Caption := Time  + inttostr(times[i]) +  x Time  + inttostr(times[total+i+1]);
    end;



Perde a referencia do NOME e do CAPTION que como pode ser percebido no código acima deste
E como pode ser visto também eu tive de colocar o nome das variáveis lá no VAR (declarei-as) [Pois sem isto não poderia colocar na segunda parte do código isto label2.name; ect]

Não sei o que acontece MAS se alguém poder ajudar agradeço desde já
GOSTEI 0
Marco Salles

Marco Salles

05/06/2012

utilize o findcomponent para acessar estes objetos

GOSTEI 0
POSTAR