Problemas com o comando case of

Delphi

05/05/2004

Eu desenvolvendo um sistema onde de acordo com o valor na tabela vai ou não habilitar um item no CheckListBox. Exemplo:

case StrToInt(dm.ADOTblProvacod_comp_curric.AsVariant) of
1 : begin
frmCadDtProva.CheckListBoxCompCurric.Checked[0] := True;
end;
end;

Só que eu quero que o valor para entrar em uma condição do case seja dinâmico, para não ficar muito extenso pois de iníco serão 30 condições para verificação no case of. Exemplo:
case StrToInt(dm.ADOTblProvacod_comp_curric.AsVariant) of
[b:046e406601]valorCampoTabela[/b:046e406601] : begin
frmCadDtProva.CheckListBoxCompCurric.Checked[0] := True;
end;
end;
Senão tiver jeito aceito sugestões!!!


Chucky21

Chucky21

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

05/05/2004

Colega,

Fiz um teste aqui e não apresentou nenhum problema, veja:

procedure TForm1.Button1Click(Sender: TObject);
var i: variant;
begin
    i := 0;
    Case i of
    0: begin
      rxCheckListBox1.Checked[0] := true;
    end;
    1: begin end;
    2: begin end;
  end;
end;



GOSTEI 0
Beppe

Beppe

05/05/2004

A expressão, sim, é dinâmica. Já em cada braço do case deve constar uma expressão ordinal, e constante, conhecida em tempo de compilação. Se gostaria diferente, o método genérico para isso é transformar o case em if´s encadeados.


GOSTEI 0
Fabio.hc

Fabio.hc

05/05/2004

case StrToInt(dm.ADOTblProvacod_comp_curric.AsVariant) of 
1 : begin 
     frmCadDtProva.CheckListBoxCompCurric.Checked[0] := True; 
     end; 
end; 



Tente assim:

var indice:integer;
begin
   indice:=dm.ADOTblProvacod_comp_curric.Asinteger - 1;
   frmCadDtProva.CheckListBoxCompCurric.Checked[indice] := True;
end;



GOSTEI 0
Chucky21

Chucky21

05/05/2004

Valeu galera com a ajuda de vocês pude montar a seguinte solução do meu problema:
procedure TForm1.BitBtn1Click(Sender: TObject);
var indice, I:integer;
begin
indice:=ADOTable1cod_comp_curric.Asinteger - 1;
for i := 0 to CheckListBox1.Count-1 do
begin
  CheckListBox1.Checked[I] := False;
  CheckListBox1.Checked[indice] := True;
end;


Valeu a todos!!!


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

05/05/2004

melhore um pouquinho seu código, pois não é necessário atribuir o valor True ao indice selecionado em cada iteração do laço. faça algo como:

procedure TForm1.BitBtn1Click(Sender: TObject);
var i: integer;
begin
    for i := 0 to CheckListBox1.Count-1 do
        CheckListBox1.Checked[I] := False;

    CheckListBox1.Checked[ ADOTable1cod_comp_curric.Asinteger - 1 ] := True; // faz isso uma única vez
end;


GOSTEI 0
POSTAR