Problemas com checkbox em tempo de execução
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?
Discussão (1)
Carregando comentários...