Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Leandro Ferreira

[Resolvido] Componentes em Tempo de Execução

Recommended Posts

Pessoal,

 

Me desculpem pela falta de pratica em programação(principalmente em Delphi), mas ai vai minha dúvida:

 

Criei vários ListBoxs em tempo de execução.

Quando o usuário estiver em qualquer um deles e pressionar enter, preciso obter o item que estava selecionado.

O problema é que mesmo com o foco no primeiro listbox por exemplo, eu só obtenho o item do ultimo que foi criado.

 

abaixo um código (p/teste ) que coloquei no evento de um botao de um form e a procedure :

 

quem puder ajudar, agradeço.

 

procedure TForm1.Button1Click(Sender: TObject);
VAR
contador,largura : INTEGER;
begin
  largura :=1;
  FOR CONTADOR:=1 TO 4 DO
  begin
	ListBox  := TListBox.CreateParented(Self.Handle);
		ListBox.Parent:= Form1;
		ListBox.Top:=20;
		ListBox.Color := clBlack;
		ListBox.Font.Color := clyellow;
		ListBox.Font.Size := 8;
		ListBox.Left := 100 * largura;
		ListBox.Width := 100;
		ListBox.Height := 260;
		ListBox.Name := 'ListBox' + inttostr(contador);
		Form1.ListBox.OnKeyPress := TeclaPressionada;
		Listbox.Items.Add('Contador '+ InttoStr(contador) +'Linha1');
		Listbox.Items.Add('Contador '+ InttoStr(contador) +'Linha2');
		Listbox.Items.Add('Contador '+ InttoStr(contador) +'Linha3');
		largura := largura + 1;
  NEXT;
  if ListBox.Name = 'ListBox1' Then ListBox.SetFocus;
  end;

end;


procedure TForm1.TeclaPressionada(Sender:TObject;var key:Char);
begin

  if key = #13 then
  ShowMessage(ListBox.Items[ListBox.ItemIndex]);

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente da seguinte forma:

 

procedure TForm1.BitBtn1Click(Sender: TObject);
var
	contador,largura : INTEGER;
	ListBox: TListBox;
begin
largura :=1;
FOR CONTADOR:=1 TO 4 DO
	begin
	ListBox := TListBox.CreateParented(Self.Handle);
	ListBox.Parent:= Form1;
	ListBox.Top:=20;
	ListBox.Color := clBlack;
	ListBox.Font.Color := clyellow;
	ListBox.Font.Size := 8;
	ListBox.Left := 100 * largura;
	ListBox.Width := 100;
	ListBox.Height := 260;
	ListBox.Name := 'ListBox' + inttostr(contador);
	ListBox.OnKeyPress := TeclaPressionada;
	Listbox.Items.Add('Contador '+ InttoStr(contador) +'Linha1');
	Listbox.Items.Add('Contador '+ InttoStr(contador) +'Linha2');
	Listbox.Items.Add('Contador '+ InttoStr(contador) +'Linha3');
	largura := largura + 1;
	if ListBox.Name = 'ListBox1' Then
		ListBox.SetFocus;
	end;
end;

Maior alteração foi neste código, usando o Sender que foi repassado...

 

procedure TForm1.TeclaPressionada(Sender:TObject;var key:Char);
begin
if key = #13 then
	if ((Sender as TListBox).ItemIndex > -1) then
		ShowMessage((Sender as TListBox).Items[(Sender as TListBox).ItemIndex]);
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.