Ir para conteúdo

POWERED BY:

Arquivado

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

Valdiney F. Lima

Problemas com checkbox em tempo de execução

Recommended Posts

Olá pessoal... Antes de postar essa pergunta eu penei muito e fiz de tudo pra resolver.

 

Bom aqui vai o problema.

 

 

 

 

Eu tenho este procedimento que cria um checkbox em tempo de execução:

procedure TfrmEditarImovel.CheckBoxDependencia(rotulo: string; id, coluna, linha: integer);var	check: TCheckBox;begincheck:=TCheckBox.Create(Self);check.Parent := ScrollBox4;check.Caption := rotulo;check.Tag := id;check.Top:=(linha * 17) - 17;check.Width:=120;check.Left:=(coluna * 160) - 160;end;

Aqui eu disparo a pesquisa no banco de dados que cria os checkbox

ZQuery1.Active := false;  ZQuery1.SQL.Clear();  sql01 := 'select *from tb_imovel_dependencias';  ZQuery1.SQL.Add( sql01 );  ZQuery1.Open;  ZQuery1.Active := true;  x1 := 1;  y1 := 1;  ZQuery1.First;  dep := ZQuery4.FieldByName('dependencias_do_imovel').AsString;  while not ZQuery1.EOF do  begin	if dep <> '' then	begin	  l1 := 1;	  ok1 := false;	  for i:=1 to length( dep ) do	  begin		if dep[i] = ';' then		begin		  Delete(aux1,Pos(';',aux1),1);			CheckBoxDependencia( ZQuery1.FieldByName('descricao').AsString, ZQuery1.FieldByName('id').AsInteger, y1, x1);		  aux1 := '';		  inc(l1);		end else begin		  aux1 := aux1 + dep[i];		end;	  end;	end;	//	if (y1 = 4) then	begin	  y1 := 1;	  inc(x1);	end else begin	inc(y1);	end;	ZQuery1.Next;  end; // fim do while

 

 

Até neste ponto, as coisas estao indo bem! Ou seja, é pesquisado no banco de dados e criado os checkbox... todos com a opção checked = false...

 

Assim todos ficam desmarcados.

 

 

Só que depois que é exibido os checkbox, é preciso desmarcar alguns para regravar... Mas quando o usuario desmarca os check e eu faço uma leitura para saber quais checkbox esta marcado, mesmo os checks tando desmarcados, é dado como marcado!

 

Esse é o procedimento que verifica os checkbox marcados

dependencias_do_imovel := '';					  for x1:=0 to ComponentCount - 1 do					  if Components[x1].ClassType = TCheckBox then					  if TCheckBox(Components[x1]).Parent = ScrollBox4 then					  if TCheckBox(Components[x1]).Checked = TRUE then						begin						  if TCheckBox(Components[x1]).Tag <> tem then						  begin							ShowMessage(IntToStr(TCheckBox(Components[x1]).Tag));							tem := TCheckBox(Components[x1]).Tag;						  end;						end;

Mas eu detectei um detalhe... Quando é feito a leitura no banco de dados e marcado por exemplo apenas 3 checkbox... Estes tres que foram marcado pelo programa em tempo de execução são os que mesmo desmarcados, aparecem marcados na pesquisa do procedimento assim...

 

Se eu marcar um ou mais de um que inicialmente nao fora marcado no tempo de execução, ele aparece de forma normal... Ou seja... se eu marca dois, vao aparecer os dois que eu marquei e mais os que o programa marcou no tempo de execução. Se eu desmarcar todos... Os que eu marquei depois irao sumir, mas os que foram marcados em tempo de execução não irá ser desmarcados...

 

 

O que poderá ser isso?

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.