GroupBox e Edit em RunTime Delphi

02/03/2016

2

Bom dia, tenho algumas duvidas sobre criação em RunTime, pois bem, tenho um form onde crio edit's, label's e groupbox's em RUNTIME, eu trago da tabela onde tenho um campo de ativado ou desativado, quando ativo cria o objeto no form, nessa minha tabela tenho o campo grupo, que identifica cada edit para um grupo.
Agora vem a duvida, como fazer para criar em runtime os edit's com seus respectivos groupbox.
Exemplo: edit1, edit2 pertencem ao gropo Pessoa, ja o edit3, edit4 pertencem ao grupo empresa

como fazer para que quando criar cada edit seja posicionado dentro do groupbox especificado.
segue o código da criação em Runtime até o momento.
procedure TFrm_Cadastro_Cliente.FormShow(Sender: TObject);
var
  I, J, K, L, sql_delec: Integer;
  sql_campo, sql_valor, sql_completo : String;

begin
  DM := TDataM_Basico.Create(Self);
  DM.QSelect_pirado.SQL.Clear;
  DM.QSelect_pirado.SQL.Add('SELECT ID_COMPONENTE,NOME_COMPONENTE, CAPTION_COMPONENTE, TAMANHO_COMPONENTE, GRUPO_COMPONENTE FROM COMPONENTES WHERE ID_COMPONENTE BETWEEN 1 AND 50 AND STATUS_COMPONENTE = '+QuotedStr('1'));
  DM.QSelect_pirado.Open;

  DicionarioLabel:= TObjectDictionary<String,TObject>.Create;
  DicionarioEdit:= TObjectDictionary<String,TObject>.Create;
  try
    J:= 60;
    K:= 85;
    L:= 0;


    for I := 0 to DM.QSelect_pirado.RowsAffected-1 do
        begin
        J:= J+60;
        K:= K+60;
        L:= L+100;

          //CRIA GROUPBOX
          gro_        := TGroupBox.Create(Self);
          gro_.Name   := 'gro_'+ DM.QSelect_pirado.FieldByName('GRUPO_COMPONENTE').AsString;
          gro_.Parent := Frm_Cadastro_Cliente;
          gro_.Caption:= 'Grupo '+DM.QSelect_pirado.FieldByName('GRUPO_COMPONENTE').AsString;
          gro_.Top    := L;
          gro_.Left   := 50;
          gro_.Width  := 800;
          gro_.Height := 100;

          //CRIA OS LABELS
          lbl_        := TLabel.Create(self);
          lbl_.Name   := 'lbl_'+DM.QSelect_pirado.FieldByName('NOME_COMPONENTE').AsString;
          lbl_.Parent := Frm_Cadastro_Cliente;
          lbl_.Caption:= DM.QSelect_pirado.FieldByName('CAPTION_COMPONENTE').AsString;
          lbl_.Anchors:= [akTop, akRight];
          lbl_.Top    := J;
          lbl_.Left   := 60;
          DicionarioLabel.Add(IntToStr(i),lbl_);

          //CRIA OS EDITS
          edt_        := TMaskEdit.Create(Self);
          edt_.Name   :='edt_'+DM.QSelect_pirado.FieldByName('NOME_COMPONENTE').AsString;
          edt_.Parent := Frm_Cadastro_Cliente;
          edt_.Text   := '';
          edt_.Anchors:= [akTop, akRight];
          edt_.Font.Color := 000000;
          edt_.Top    := K;
          edt_.Width  := DM.QSelect_pirado.FieldByName('TAMANHO_COMPONENTE').AsInteger;
          edt_.Left   := 60;
          DicionarioEdit.Add(IntToStr(i),edt_);
          DM.QSelect_pirado.Next;
        end;
  finally
    DM.QSelect_pirado.Close;
  end;

end;
Responder

Post mais votado

02/03/2016

Não sei se entendi bem, mas experimente alterar o Parent dos Label's e Edit's para o nome do Groupbox.

Troque as linhas:

lbl_.Parent := Frm_Cadastro_Cliente;
edt_.Parent := Frm_Cadastro_Cliente;

Por:
lbl_.Parent := TGroupBox(Frm_Cadastro_Cliente.FindComponent('gro_' + DM.QSelect_pirado.FieldByName('GRUPO_COMPONENTE').AsString));
edt_.Parent := TGroupBox(Frm_Cadastro_Cliente.FindComponent('gro_' + DM.QSelect_pirado.FieldByName('GRUPO_COMPONENTE').AsString));
Responder

Mais Posts

02/03/2016

Felipe Tomm

SHow, isso mesmo!
Obrigado
Responder