Componentes Dinâmicos Em Form Dinâmico, ComponentCount = 0

30/06/2008

1

Fala pessoal, eu de novo com esses componentes dinâmicos

bo, criei um form e elguns checks dinamicos nesse form, qdo vou dar um componentcount nesse form, ele retona 0, como???

function TfrmPadrao.CarregaListaOpcoes(Titulo : String; Opcoes: TStringList): String;
var
  i, Altura : Integer;
  frmLista : TForm;
  Grupo : TGroupBox;
  CheckItens : array of TCheckBox;
  Selecionadas : String;
begin
  SetLength(CheckItens, Opcoes.Count);

  // Criando o Form dinâmico
  //
  frmLista := TForm.Create(Self);
  frmLista.Position := poScreenCenter;
  frmLista.BorderStyle := bsSingle;
  frmLista.BorderIcons := [biSystemMenu];
  frmLista.Caption := ´Opções´;
  frmLista.Width := 300;

  // Criando o GroupBox
  //
  Grupo := TGroupBox.Create(Self);  // UM COMPONENTE
  Grupo.Parent := frmLista;
  Grupo.Top := 4;
  Grupo.Left := 8;
  Grupo.Width := 278;
  Grupo.Caption := ´ ´ + Titulo + ´ ´;
  Grupo.Font.Style := [fsBold];

  Altura := 18;

  for i := 0 to Opcoes.Count -1 do   // MAIS ALGUNS
  begin
    CheckItens[i] := TCheckBox.Create(Self);
    CheckItens[i].Parent := Grupo;
    CheckItens[i].Caption := Opcoes.Strings[i];
    CheckItens[i].Top := Altura;
    CheckItens[i].Left := 12;
    CheckItens[i].Width := 260;
    CheckItens[i].Font.Style := [fsBold];
    Altura := Altura + 25;
  end;

  Grupo.Height := Altura;
  frmLista.Height := Grupo.Height + 44;

  // Mostra o Form
  //
  frmLista.ShowModal;

  for i := 0 to frmLista.ComponentCount -1 do  // <<=== RETORNA ZERO, HEIN???
    if frmLista.Components[i] is TCheckBox then
      if (frmLista.Components[i] as TCheckBox).Checked = True then
        Selecionadas := Selecionadas + ´1´
      else
        Selecionadas := Selecionadas + ´0´;

  Result := Selecionadas;

  FreeAndNil(frmLista);
end;



valew de novo


Responder

Posts

30/06/2008

Brunodsr

pelo seu codigo, ele tem que retornar zero mesmo.

Vc ta passando SELF como owner na criacao dos objetos ao inves de passar o novo form criado.

Troque o self pelo novo objeto do tipo TForm criado e repita os testes.

Espero ter ajudado


Responder

30/06/2008

Seu_madruga

Perfeito!!! :D

Era isso mesmo amigo, valew mesmo, salvou minha vida hehehe

Eu achei que a propriedade Parent já fazia o vínculo dos componentes mostrando quem era o owner, mas foi vacilo meu mesmo, no próprio create vc passa o owner!

resolvido!!!


Responder