Criar ListBox´s em RunTime
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.
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
Curtidas 0
Respostas
Imoreira
24/03/2005
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;
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;
GOSTEI 0
Diogoalles
24/03/2005
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
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
GOSTEI 0
Imoreira
24/03/2005
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]
Onde lê-se: combo.parent:=form1,
coloque combo.parent:=[color=blue:cb07b87060]{nome do seu panel}[/color:cb07b87060]
GOSTEI 0
Diogoalles
24/03/2005
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
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
GOSTEI 0
Massuda
24/03/2005
Talvez [url=http://forum.clubedelphi.net/viewtopic.php?t=57173]este tópico[/url] do fórum seja útil para você.
GOSTEI 0
Diogoalles
24/03/2005
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:
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.
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.
GOSTEI 0
Massuda
24/03/2005
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; ...
GOSTEI 0
Diogoalles
24/03/2005
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.
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.
GOSTEI 0
Massuda
24/03/2005
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.GOSTEI 0
Diogoalles
24/03/2005
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
e o outro não estava aparecendo porque eu tinha Align=alClient :oops:
Blz galera... ficou show isso aqui
abraço a todos
Diogo
GOSTEI 0
Diogoalles
24/03/2005
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
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
GOSTEI 0
Kapak
24/03/2005
Se vc estiver criando os TListBox c/ owner, então ele próprio os libera.
GOSTEI 0