Criando componentes em tempo de execucao

Delphi

03/09/2012

Tarde galerinha !
Estou com dificuldades em criar componentes em tempo de execução.
Os componentes devem ficar dentro de um scrollBox.
Já consegui fazer com que o scroolBox receba os panels, mas dentro dos panels deve conter um progressBar. Nao sei como faço para avisar na criacao do componente que o progress irá dentro do panel criado !
Vejam como está o codigo, lembrando que ele pega da base.

// Coloca no primeiro registro do select
qestoque.First;

// enquanto nao chega no ultimo
while qestoque.Eof = false do
 Begin

    // Cria o panel
    P := TPanel.Create(Self);
    P.align := alLeft;
    P.Width := 50 ;
    P.Height := 95;
    
    // Cria um nome para o panel com um numero para poder ser unico
    P.Name := 'Painel' + inttostr(x);
    
    //Fala para o componente ser criado dentro do ScroolBox
    P.Parent := sb1;


    // Criacao do Progress
    Pg := TcxProgressBar.Create(Self);
    Pg.Properties.Orientation := cxOrVertical;
    Pg.AutoSize := false;
    Pg.Left := 10;
    Pg.Top := 20;
    Pg.AlignWithMargins := true;
    Pg.Width := 30;
    Pg.Height := 63;
    Pg.Name := 'Progress' + inttostr(x);

    // Como definir o componente que vai ser recebido o progress se ele nao esta no form ? gera um erro no delphi
    Pg.Parent := ???;



    qestoque.Next;
    x := x +1;
 End;
Geison

Geison

Curtidas 0

Respostas

Alan Souza

Alan Souza

03/09/2012

testei passando o próprio p no Parent e funcionou:

Pg.Parent := p;


mas o código não pode ser reexecutado sem destruir todos os componentes dentro do ScrollBox.
GOSTEI 0
Geison

Geison

03/09/2012

alanps, estava agora mesmo respondendo ao topico,
deve-se colocar o nome do objeto criado (correto ?) no parent, aí foi.
Obrigado !
GOSTEI 0
Alan Souza

Alan Souza

03/09/2012

na verdade o que você passa é O objeto descendente de TWinControl.
GOSTEI 0
Geison

Geison

03/09/2012

Entendi. Obrigado !
GOSTEI 0
Deivison Melo

Deivison Melo

03/09/2012

Posso colocar o tópico como encerrado?
GOSTEI 0
Geison

Geison

03/09/2012

Quase Deividison !

mas o código não pode ser reexecutado sem destruir todos os componentes dentro do ScrollBox


eu faço isso usando o
DestroyComponents
do scroll ? ou tenho q ter todos os nomes dos componentes e destruir um a um ?
GOSTEI 0
Alan Souza

Alan Souza

03/09/2012

costumo fazer assim para destruir controles dentro de um container:

  for i := 0 to Pred(ScrollBox.ControlCount) do
    ScrollBox.Controls[0].Free;
GOSTEI 0
POSTAR