Fórum Manipular componentes criados em tempo de execução #244653
27/07/2004
0
Se fosse em tempo de projeto era só dar dois clicks sobre cada componente, em tempo de projeto, e digitar as linhas de código. Mas se eles não aparecem em tempo de projeto, o que faço?
Sonec2004@itelefonica.com.br
Sonec2004
Curtir tópico
+ 0Posts
27/07/2004
Marcelo Saviski
procedure LabelClick(Sender: TObject); begin //faz algo aqui end;
e quando criar o componente:
LabelCriado.OnClick := LabelClick;
ok?
Gostei + 0
27/07/2004
Sonec2004
Obrigado pela ajuda, mas ainda tenho uma dúvida. Meu código é assim:
Procedure CriaLabel; Var CriaLabel : Array[1..10] of TLabel; i: Integer; Begin Y:=30; For i:=1 to 10 do Begin CriaLabel[i].Create(Self); CriaLabel[i].Caption:=´Rotina nº ´+IntTostr(i); CriaLabel.top:=y; y:=y+20; End; End;
São criados 10 componentes. Como diferenciar um do outro?
sonec2004@itelefonica.com.br
Gostei + 0
28/07/2004
Emiliano
Procedure CriaLabel; Var CriaLabel : Array[1..10] of TLabel; i: Integer; Begin Y:=30; For i:=1 to 10 do Begin CriaLabel[i].Create(Self); CriaLabel[i].Caption:=´Rotina nº ´+IntTostr(i); CriaLabel.top:=y; y:=y+20; End; End;
Execute o programa abaixo que vc terá uma ideia de como identificar os Labels, já que é um vetor de labels vc deve identificálos pelo indice do vetor.
procedure TForm1.Button1Click(Sender: TObject);
var
CriaLabel : Array[1..10] of TLabel;
i,Y: Integer;
Begin
Y:=30;
For i:=1 to 10 do
Begin
CriaLabel[i] := TLabel.Create(Self);
CriaLabel[i].Parent := Self;
CriaLabel[i].OnClick := ClicaLabel;
CriaLabel[i].Caption:=´Rotina nº ´+IntTostr(i);
CriaLabel[i].top:=y;
y:=y+20;
End;
CriaLabel[1].Caption := CriaLabel[1].Caption + ´ -> Este é o label de indice 1´;
CriaLabel[10].Caption := CriaLabel[10].Caption + ´ -> Este é o label de indice 10´;
end;
procedure TForm1.ClicaLabel(Sender: TObject);
begin
ShowMessage(´Cliquei no Label com a ´ + (Sender as TLabel).Caption );
end;
Coloque este código em um formulário com um Button e crie a procedure ClicaLabel.
Espero ter esclarecido.
[]´
Gostei + 0
28/07/2004
Rodc
Ou usar o tag do componente.
For i:=1 to 10 do
Begin
CriaLabel[i].Create(Self);
CriaLabel[i].Caption:=´Rotina nº ´+IntTostr(i);
CriaLabel.top:=y;
CriaLabel.Name := ´Label´ + IntToStr(i);
CriaLabel.Tag := i;
y:=y+20;
End
Gostei + 0
28/07/2004
Paulo_amorim
Para diferenciar componentes existe a propriedade Name... :wink:
Mas mesmo assim dependendo do código do seu LabelClick não seria necessário...
Até+
Gostei + 0
28/07/2004
Eniorm
mas não consegui associar o evento OnClose do form principal
ao form q foi criado em tempo. Usei:
with TForm.Create(Self) do begin OnClose := FormClose; ShowModal; end;
Mas não deu certo....
Gostei + 0
29/07/2004
Sonec2004
Usei o código do Emiliano e identifiquei os labels pelos tags.
sonec2004@itelefonica.com.br
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)