Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Valdiney F. Lima

Contagem de checkBox...

Recommended Posts

Bom pessoal.

 

Eu estou fazendo um painel de pesquisa e como não achei nenhum componente que me atendesse visualmente, resolvi fazer algo no braço.

 

Segue abaixo:

 

 

1- Tenho um ScrollBox1

2- Dentro do ScrollBox1 eu crio vários Panels. Estes panels se equivalem a cada registro do banco de dados.

3- Dentro de Cada panel criado eu crio 01 - CheckBox e 09 - Label. Isso tudo em tempo de execução.

 

Imagem da tela gerada

Imagem Postada

 

Agora eu preciso pegar quais os CheckBox foram marcado pelo usuário.

 

Então eu tentei:

procedure TfrmPesquisar.Button2Click(Sender: TObject);varmarcado: string;x2: integer;begin   for x2:=0 to ComponentCount - 1 do   if Components[x2].ClassType = TCheckBox then   if TCheckBox(Components[x2]).Parent = ScrollBox1 then   if TCheckBox(Components[x2]).Checked then   begin	 marcado := marcado + IntToStr(TCheckBox(Components[x2]).Tag);   end;   ShowMessage( marcado );end;
Mas não consegui. Mas eu suspeito que o erro esteja em procurar pelo CheckBox dentro de cada Panel que foi gerado no ScrollBox1. Mas não sei como pegar.

 

 

Abaixo vai o procedimento que cria os componentes dentro do ScrollBox1 em tempo de execução:

procedure TfrmPesquisar.Panel(rotulo, txt1, txt2, txt3, txt4, txt5, txt6, txt8: string; txt9: real; id, linha, cor, alugado: integer);var	Panel: TPanel;	CheckBox: TCheckBox;	Texto1,Texto2,Texto3,Texto4,Texto5,Texto6,Texto7,Texto8,Texto9: TLabel;beginPanel:=TPanel.Create(Self);Panel.Parent := ScrollBox1;Panel.Top := (linha * 41) - 41;Panel.Width := 856;Panel.ParentColor := true;Panel.ParentBackground := true;Panel.BevelOuter := bvNone;Panel.ShowHint := true;Panel.Caption := Panel.Name;Panel.Tag := id;// CheckBox de marcaçãoCheckBox:=TCheckBox.Create(Self);CheckBox.Parent  := Panel;CheckBox.Tag	 := id;CheckBox.Top	 := 10;CheckBox.Left	:= 10;CheckBox.Width   := 15;// Tipo de imovelTexto8		  := TLabel.Create(Self);Texto8.Caption  := txt8;Texto8.Left	 := 38;Texto8.Top	  := 5;Texto8.Parent   := Panel;// Valor do imovelTexto9		  := TLabel.Create(Self);Texto9.Caption  := FloatToStrf(txt9,ffCurrency,12,2);Texto9.Left	 := 38;Texto9.Top	  := 20;Texto9.Parent   := Panel;// ReferenciaTexto3			:= TLabel.Create(Self);Texto3.Caption	:= txt3;Texto3.Left	   := 767;Texto3.Top		:= 13;Texto3.Hint	   := 'Referência';Texto3.ShowHint   := true;Texto3.Parent	 := Panel;// Cidade - EstadoTexto2		  := TLabel.Create(Self);Texto2.Caption  := txt2;Texto2.Left	 := 243;Texto2.Top	  := 20;Texto2.Parent   := Panel;// EndereçoTexto1		  := TLabel.Create(Self);Texto1.Caption  := txt1;Texto1.Left	 := 243;Texto1.Top	  := 5;Texto1.Parent   := Panel;// GaragemTexto4		  := TLabel.Create(Self);Texto4.Caption  := txt4;Texto4.Left	 := 690;Texto4.Top	  := 13;Texto4.Hint	 := 'Garagem';Texto4.ShowHint := true;Texto4.Parent   := Panel;// DormitoriosTexto5		  := TLabel.Create(Self);Texto5.Caption  := txt5;Texto5.Left	 := 708;Texto5.Top	  := 13;Texto5.Hint	 := 'Dormitório';Texto5.ShowHint := true;Texto5.Parent   := Panel;// FotosTexto6		  := TLabel.Create(Self);Texto6.Caption  := txt6;Texto6.Left	 := 725;Texto6.Top	  := 13;Texto6.Hint	 := 'Foto';Texto6.ShowHint := true;Texto6.Parent   := Panel;// StatusTexto7		  := TLabel.Create(Self);if alugado = 0 thenbegin  Texto7.Caption	:= 'Desocupado';  Texto7.Font.Color := clGreen;end else begin  Texto7.Caption	:= 'Ocupado';  Texto7.Font.Color := clRed;end;Texto7.Left	 := 600;Texto7.Top	  := 13;Texto7.Parent   := Panel;if cor = 0 then  Panel.Color := $00EEEEEEelse  Panel.Color := clWhite;Panel.ParentColor := false;Panel.ParentBackground := false;Panel.Ctl3D := false;end;

Como eu imprimo quais CheckBox foram marcados?

 

Bom pessoal. Tentei explicar a minha dúvida o mais claro possível.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei o porque, mas o Parent não funciona. Teste:

 

for x2:=0 to ComponentCount - 1 do   if Components[x2].ClassType = TCheckBox then   if TCheckBox(Components[x2]).Checked then	 marcado := marcado + IntToStr(TCheckBox(Components[x2]).Tag);   ShowMessage( marcado );end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei o porque, mas o Parent não funciona. Teste:

for x2:=0 to ComponentCount - 1 do   if Components[x2].ClassType = TCheckBox then   if TCheckBox(Components[x2]).Checked then	 marcado := marcado + IntToStr(TCheckBox(Components[x2]).Tag);   ShowMessage( marcado );end;
Assim eu já havia testado e funcionou... Mas não pode ser assim, porque deste modo ele pega o valor de todos os CheckBox que estiverem dentro do Formulário. Eu preciso e tenho que pegar apenas os que estão dentro do ScrollBox1.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta o seguintefor x2:=0 to ComponentCount - 1 do if Components[x2].ClassType = TCheckBox then if (TCheckBox(Components[x2]).Parent is TPanel) and (TCheckBox(Components[x2]).Parent.Parent = ScrollBox1) then if TCheckBox(Components[x2]).Checked then begin marcado := marcado + IntToStr(TCheckBox(Components[x2]).Tag); end; ShowMessage( marcado );end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode tentar desta forma tb:

 

procedure TForm1.BitBtn1Click(Sender: TObject);var	x: integer;	total: integer;begintotal:=0;for x:=Self.ComponentCount - 1 downto 0 do	if Self.Components[x].GetParentComponent = ScrollBox1 then		if Self.Components[x].ClassType = TCheckBox then			if TCheckBox(Self.Components[x]).Checked then				Inc(total);ShowMessage(IntToStr(total) + ' CheckBox marcado.');end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.