Ir para conteúdo

POWERED BY:

Arquivado

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

Valdiney F. Lima

preciso criar checkbox em tempo de execução

Recommended Posts

Primeiro você precisa fazer a criação dinâmica dos CheckBox, algo do tipo:

 

procedure TForm1.CheckBox(rotulo: string; coluna, altura: integer);var	check: TCheckBox;begincheck:=TCheckBox.Create(Self);check.Parent:=Self;check.Caption:=rotulo;check.Top:=(altura * 17) - 17;check.Width:=200;[code]check.Left:=(coluna * 160) - 160;end;

No caso criei uma procedure que você passa o nome, a coluna e altura de posição... Mas pode chamar fazendo assim:

 

procedure TForm1.btnCarregaTelaClick(Sender: TObject);var	x, y: integer;beginfor y:=1 to 3 do	for x:=1 to 11 do		CheckBox('Check Box (Col: ' + IntToStr(y) + ', Linha: ' + IntToStr(x) + ')',y,x);end;

No caso faz dois FOR para criar 3 colunas, cada uma com 11 linhas de checkbox...

 

Depois para validar basta fazer:

 

procedure TForm1.btnValidaMarcadosClick(Sender: TObject);var	x: integer;	lista: string;beginlista:='';for x:=0 to ComponentCount - 1 do	if Components[x].ClassType = TCheckBox then		if TCheckBox(Components[x]).Checked then			begin			if lista <> '' then				lista:=lista + #13;			lista:=lista + TCheckBox(Components[x]).Caption;			end;if lista <> '' then	ShowMessage(lista);end;

Ficando o fonte todo assim:

 

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons;type  TForm1 = class(TForm)	btnCarregaTela: TBitBtn;	btnValidaMarcados: TBitBtn;	procedure btnCarregaTelaClick(Sender: TObject);	procedure btnValidaMarcadosClick(Sender: TObject);  private	{ Private declarations }	procedure CheckBox(rotulo: string; coluna, altura: integer);  public	{ Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnCarregaTelaClick(Sender: TObject);var	x, y: integer;beginfor y:=1 to 3 do	for x:=1 to 11 do		CheckBox('Check Box (Col: ' + IntToStr(y) + ', Linha: ' + IntToStr(x) + ')',y,x);end;procedure TForm1.CheckBox(rotulo: string; coluna, altura: integer);var	check: TCheckBox;begincheck:=TCheckBox.Create(Self);check.Parent:=Self;check.Caption:=rotulo;check.Top:=(altura * 17) - 17;check.Width:=200;check.Left:=(coluna * 160) - 160;end;procedure TForm1.btnValidaMarcadosClick(Sender: TObject);var	x: integer;	lista: string;beginlista:='';for x:=0 to ComponentCount - 1 do	if Components[x].ClassType = TCheckBox then		if TCheckBox(Components[x]).Checked then			begin			if lista <> '' then				lista:=lista + #13;			lista:=lista + TCheckBox(Components[x]).Caption;			end;if lista <> '' then	ShowMessage(lista);end;end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro você precisa fazer a criação dinâmica dos CheckBox, algo do tipo:

procedure TForm1.CheckBox(rotulo: string; coluna, altura: integer);var	check: TCheckBox;begincheck:=TCheckBox.Create(Self);check.Parent:=Self;check.Caption:=rotulo;check.Top:=(altura * 17) - 17;check.Width:=200;[code]check.Left:=(coluna * 160) - 160;end;
No caso criei uma procedure que você passa o nome, a coluna e altura de posição... Mas pode chamar fazendo assim:
procedure TForm1.btnCarregaTelaClick(Sender: TObject);var	x, y: integer;beginfor y:=1 to 3 do	for x:=1 to 11 do		CheckBox('Check Box (Col: ' + IntToStr(y) + ', Linha: ' + IntToStr(x) + ')',y,x);end;
No caso faz dois FOR para criar 3 colunas, cada uma com 11 linhas de checkbox...Depois para validar basta fazer:
procedure TForm1.btnValidaMarcadosClick(Sender: TObject);var	x: integer;	lista: string;beginlista:='';for x:=0 to ComponentCount - 1 do	if Components[x].ClassType = TCheckBox then		if TCheckBox(Components[x]).Checked then			begin			if lista <> '' then				lista:=lista + #13;			lista:=lista + TCheckBox(Components[x]).Caption;			end;if lista <> '' then	ShowMessage(lista);end;
Ficando o fonte todo assim:
unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons;type  TForm1 = class(TForm)	btnCarregaTela: TBitBtn;	btnValidaMarcados: TBitBtn;	procedure btnCarregaTelaClick(Sender: TObject);	procedure btnValidaMarcadosClick(Sender: TObject);  private	{ Private declarations }	procedure CheckBox(rotulo: string; coluna, altura: integer);  public	{ Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnCarregaTelaClick(Sender: TObject);var	x, y: integer;beginfor y:=1 to 3 do	for x:=1 to 11 do		CheckBox('Check Box (Col: ' + IntToStr(y) + ', Linha: ' + IntToStr(x) + ')',y,x);end;procedure TForm1.CheckBox(rotulo: string; coluna, altura: integer);var	check: TCheckBox;begincheck:=TCheckBox.Create(Self);check.Parent:=Self;check.Caption:=rotulo;check.Top:=(altura * 17) - 17;check.Width:=200;check.Left:=(coluna * 160) - 160;end;procedure TForm1.btnValidaMarcadosClick(Sender: TObject);var	x: integer;	lista: string;beginlista:='';for x:=0 to ComponentCount - 1 do	if Components[x].ClassType = TCheckBox then		if TCheckBox(Components[x]).Checked then			begin			if lista <> '' then				lista:=lista + #13;			lista:=lista + TCheckBox(Components[x]).Caption;			end;if lista <> '' then	ShowMessage(lista);end;end.
Valeu de mais meu amigo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Márcio...

Voltando ao componente. Teria como eu criar alguma propriedade ou variavel ligada a cada objero.

 

É que os CheckBox será criando com base no banco de dados.

 

A tabela que contém os dados tem os seguintes campos:

 

ID - DESCRIÇÃO

 

Ou seja, o rótuno do CheckBox seria a descrição... Eu preciso atribuir ao CheckBox o ID também, porém não consigo.

Teria como vincular uma variavel para cara CheckBox contendo o ID dele?

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

PessoalMuito boa a solução do Márcio, Mas ficar criando componente pode ser inviável,Voce basicamente poderia criar 3 checkboxs ocultos e ir posicionando e exibindo-os em cada linha.Para armazenar o valor crie um array 3x3 de boolean.E depois usar e abusar dos eventos dos checkboxes..rsrs Mas serão só 3.Isso ai..T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... Isto quem decide é ele... se acha que é melhor de uma forma ou outra, apenas passei a forma que ele pediu, pode-se fazer de várias formas o controle... http://forum.imasters.com.br/public/style_emoticons/default/natal_wink.gif

Ta valendo... Toda ajuda aqui ta sendo válida. Eu sei que é chato ficar respondendo perguntas de iniciante, mas um dia eu ainda vou retribuir a altura.É que eu não estou tendo tanto tempo pra fazer pesquisas não. Tenho até o dia 23 deste mês pra entregar um projeto de cadastro de imóveis. Agradeço a paciência de todos que tem me ajudado e a você Márcio que não tem poupado esforço pra responder as minhas perguntas.Valeu pelo help!

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.