consulta em combobox (indexOf)

04/06/2008

5

caros colegas tenho 4 variaveis em ordem alfabética de importancia, ou seja, a variavel ´a´ é mais importante que as demais, a variavel ´b´ é menos importante que a variavel ´a´, porem é mais importante que a variavel ´c´ e ´d´, e assim por diante.

estou tentando varrer o combobox para verificar se uma ou mais dessas variáveis existe, para entao o sistema exibir uma mensagem com a variável mais importante detectada.

para isso utilizei o indexOf do combobox, mas minha consulta ficou furada, pq ela sempre para na primira condiçao(if), mesmo que a mesma nao seja satisfeita.
segue meu código, quem puder dar uma mão na soluçao desse problema eu agradeço!!!!

var
a,b,c,d, msg : string;
begin
  a   := ´primeiro lugar em importancia´;
  b   := ´segundo lugar em importancia´;
  c   := ´terceiro lugar em importancia´;
  d   := ´quarto lugar em importancia´;
  msg := ´´;


  if cbClasse.items.IndexOf(a) < 0 then // verifica se a string existe no ComboBox
  begin
    msg := ´importancia: ´ + a;
  end
    else
      if cbClasse.items.IndexOf(b) < 0 then
      begin
        msg := ´importancia: ´ + b;
      end
        else
          if cbClasse.items.IndexOf(c) < 0 then
          begin
            msg := ´importancia: ´ + c;          
          end
            else
              if cbClasse.items.IndexOf(d) < 0 then
              begin
               msg := ´importancia: ´ + d;
              end
                else
                  begin
                    msg := ´Não foi detectado importancia alguma´;
                  end;

    ShowMessage(msg);     

end;



abraços!


Responder

Posts

04/06/2008

Pestana_

os valores no combo estão exatamente como segue nas variaveis, ou seja, todas as letras estão minusculas?


flw.


Responder

04/06/2008

Mahdak

sim, todas estao iguais...


Responder

04/06/2008

Rjun

Tá certo essa condição < 0? Não teria que ser > 0?


Responder

04/06/2008

Pestana_

RJun tem razão! eu não cheguei analizar está lógica, neste caso está dizendo se não encontrar o valor da variavel [b:ea72403afe]a[/b:ea72403afe] no combo, então armazena o seu conteudo na variavel [b:ea72403afe]msg[/b:ea72403afe] e se econtrou não será armazenado na variavel!

quando não é encontrado o valor no combo é retornado [b:ea72403afe]-1[/b:ea72403afe]

não está certo!


flw.


Responder

04/06/2008

Pestana_

ficando assim:
var 
a,b,c,d, msg : string; 
begin 
  a   := ´primeiro lugar em importancia´; 
  b   := ´segundo lugar em importancia´; 
  c   := ´terceiro lugar em importancia´; 
  d   := ´quarto lugar em importancia´; 
  msg := ´´; 


  if cbClasse.items.IndexOf(a) > 0 then // verifica se a string existe no ComboBox 
  begin 
    msg := ´importancia: ´ + a; 
  end 
    else 
      if cbClasse.items.IndexOf(b) > 0 then 
      begin 
        msg := ´importancia: ´ + b; 
      end 
        else 
          if cbClasse.items.IndexOf(c) > 0 then 
          begin 
            msg := ´importancia: ´ + c;          
          end 
            else 
              if cbClasse.items.IndexOf(d) > 0 then 
              begin 
               msg := ´importancia: ´ + d; 
              end 
                else 
                  begin 
                    msg := ´Não foi detectado importancia alguma´; 
                  end; 

    ShowMessage(msg);      

end; 



Responder

04/06/2008

Mahdak

Tá certo essa condição < 0? Não teria que ser > 0?


RJun, foi erro meu mesmo, como voce disse... mesmo assim utilizei a funçao abaixo e meu problema foi resolvido.

muito obrigado pela atençao que voces disponibilizaram para me ajudar!
Um forte abraço a todos!!!



code]function StrIsInList(Lista:TStrings;Str:string): boolean;
{verificar se uma string existe dentro de um stringlist, pode ser usada para saber se uma string existe dentro de um ComboBox por exemplo.
ex:
begin
if StrIsInList(ComboBox1.Items,Edit1.Text) then
showmessage(´a string existe.´)
end;
}
var
Cont:integer;
begin
Result:=false;
for Cont:=0 to Lista.Count-1 do
if Str = (Lista.Strings[Cont])then
begin
Result:=true;
Exit;
end;
end;[[/code]


Responder