GARANTIR DESCONTO

Fórum Criar ListBox´s em RunTime #273941

24/03/2005

0

Olá Pessoal,
Utilizo Delphi 7 e Firebird 1.5.
No meu banco tenho duas tabelas, sendo uma delas a Mestre e a outra a Detalhe, sao elas:

[u:1736f4c778]Pedidos[/u:1736f4c778]
CD_PEDIDO
DT_PEDIDO
HR_PEDIDO
CD_CLIENTE

[u:1736f4c778]Pedido_Produtos[/u:1736f4c778]
CD_PEDIDO
CD_PRODUTO
QTDE_PRODUTO

Tenho uma tela onde eu informo um intervalo de DT_PEDIDO.
O que eu preciso é para cada pedido que esta pesquisa retornar criar um ListBox com os Pedido_Produtos.
Então, se eu tiver 4 Pedidos, gostaria de criar 4 ListBox´s que irá conter cada um os Pedidos_Produtos.

Agradecido
Diogo.


Diogoalles

Diogoalles

Responder

Posts

24/03/2005

Imoreira

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
combo:tComboBox;
altura,x:integer;

begin
for x:=form1.ControlCount-1 downto 0 do begin
form1.Controls[x].Destroy[color=blue:2946171827];// destroi os combos anteriormente criados;[/color:2946171827]
end;

tbPedidos.first;
altura:=2;
while not tbPedidos.eof do begin
combo:=tComboBox.Create(self);
combo.Top:=altura;
combo.Left:=5;
combo.parent:=form1;
combo.Style:=csDropDownList;
while not tbProdutos.eof do begin
combo.items.Add(tbProdutoscd_produto.asstring[color=blue:2946171827]{coloque aqui o campo que voce quizer}[/color:2946171827]);
tbProdutos.Next;
end;
inc(altura,23);
tbPedidos.next;
end;
end;


Responder

Gostei + 0

24/03/2005

Diogoalles

Blz Moreira... show de bola..

só mais uma dúvida, se eu tiver 2 panels neste form, ainda posso especificar dentro de qual Panel gostaria de criar ?


abraço

Diogo


Responder

Gostei + 0

24/03/2005

Imoreira

isso é definido na propriedade [color=blue:cb07b87060]parent[/color:cb07b87060].
Onde lê-se: combo.parent:=form1,
coloque combo.parent:=[color=blue:cb07b87060]{nome do seu panel}[/color:cb07b87060]


Responder

Gostei + 0

28/03/2005

Diogoalles

Gostaria de deixar um pouco mais complexo meu problema.
Após criar em run-time os ListBox´s eu ainda tenho neste meu form um Edit1.
Então, gostaria que ao clicar em um dos LIstBox´s criados, que receberam seus devidos valores, este valor que eu clicar apareça no Edit, resumindo também preciso criar o evento OnClick em Runtime ou algo parecido que adicione o texto selecionado ListBox a um Edit.


agradeço

Diogo


Responder

Gostei + 0

28/03/2005

Massuda

Talvez [url=http://forum.clubedelphi.net/viewtopic.php?t=57173]este tópico[/url] do fórum seja útil para você.


Responder

Gostei + 0

28/03/2005

Diogoalles

Ok Massuda, valeu a dica,
Mas acho que não estou conseguindo ligar as pontas, será q poderiam me dar um auxílio?

Criei os ListBox´s dinamicamente conforme o iMoreira passou.
Aí eu crio uma procedure chamada ListBox_Clique que ficaria assim:

procedure Listbox_Clique(ListBox:TListBox);
begin
  Edit1.Text := ListBox.Items[ListBox.ItemIndex];
end


O que não estou conseguindo é Ligar esta procedure (se ela estiver certa) ao ListBox dinamico que estou clicando... no caso se eu tiver 3 ListBox´s que foram criados dinamicamente como vou saber se é o ListBox1, 2 ou 3 que está sendo clicado? como vou ligar a procedure?

será q deu pra enteder?? hehe , espero que sim

agradecido
Diogo.


Responder

Gostei + 0

28/03/2005

Massuda

Aí eu crio uma procedure chamada ListBox_Clique que ficaria assim...
Como o tratador do evento OnClick é um TNotifyEvent, seu código deveria ser algo parecido com isso:
procedure TSeuForm.ListBoxClick(Sender: TObject);
var
  ListBox: TListBox;
begin
  ListBox := Sender as TListBox;

  Edit1.Text := ListBox.Items[ListBox.ItemIndex];
end


no caso se eu tiver 3 ListBox´s que foram criados dinamicamente como vou saber se é o ListBox1, 2 ou 3 que está sendo clicado...
Você pode usar a propriedade [b:e068fc40cf]Tag[/b:e068fc40cf] dos listboxes criados dinamicamente exatamente como faria se os listboxes tivessem sido criados na IDE.

como vou ligar a procedure?
Você faz isso quando cria o listbox:
...
ListBox := TListBox.Create(self); 
ListBox.Parent := ...
ListBox.Top := ... 
ListBox.Left := ... 
ListBox.OnCLick := ListBoxClick;
...



Responder

Gostei + 0

28/03/2005

Diogoalles

bha Massuda, valeu mesmo, fantástico..
iMoreira obrigado tb... demais !!!!

Nunca usei TAG e li pelo help que ela é tipo um índice d objeto, isso mesmo? como eu poderia aplicar ela?

Ultimo problema é que estou tentando criar os ListBox´s dentro de um ScrollBox que já está fixo no meu form, só que, por exemplo, se a aplicação tiver 3 ListBox pra criar ele só deixa visivel o ultimo que for criado... eu executei um passo a passo e ele cria os 3 ListBox mas só o ultimo aparece ... tentei dar um update, refresh..etc.. ñ deu ... alguma sugestão?


abraço
Diogo.


Responder

Gostei + 0

28/03/2005

Massuda

Nunca usei TAG e li pelo help que ela é tipo um índice d objeto, isso mesmo? como eu poderia aplicar ela?
Tag é uma propriedade do tipo Integer que você pode usar para qualquer coisa que você desejar. No seu caso, você poderia fazer Tag = 1 para o primeiro listbox, Tag = 2 para o segundo listbox, etc e depois ler o valor de Tag quando quiser/precisar distinguir os listboxes.

...estou tentando criar os ListBox´s dentro de um ScrollBox que já está fixo no meu form, só que, por exemplo, se a aplicação tiver 3 ListBox pra criar ele só deixa visivel o ultimo que for criado...
Você está criando os listboxes em posições diferentes do scrollbox? Veja se a propriedade AutoScroll do TScrollbox está com o valor True.


Responder

Gostei + 0

28/03/2005

Diogoalles

Blz, saquei o ´TAG´
e o outro não estava aparecendo porque eu tinha Align=alClient :oops:

Blz galera... ficou show isso aqui

abraço a todos

Diogo


Responder

Gostei + 0

28/03/2005

Diogoalles

O que é melhor utilizar para qdo eu fechar o form que tem os ListBox´s dinamicos serem destruidos e limpar da memoria?
Destroy ? Free ?

e qual é o momento mais adequado para destruir? no fechamento do form?
e no caso dos eventos onde crio objetos, destruo logo ao fim da procedure?


abraço

Diogo


Responder

Gostei + 0

28/03/2005

Kapak

Se vc estiver criando os TListBox c/ owner, então ele próprio os libera.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar