Problemas com algoritimo que liga 3 TStringLists

Delphi

15/05/2007

Meu problema é o seguinte..
tenho 1 listview e 1 CheckListbox e uma TStringList auxiliar

preciso fazer o seguinte.. se surgir um caption novo na lista 1 marque a checklistbox.. e caso suma algum deles, deschecke ela na checklistbox

estou a alguns dias nesse problema e nao estou coseguindo resolver a questão deles se descheckarem..
então pensei em por uma 3º lista, q serviria como auxiliar..

    //Checka elas caso nao estejem marcadas na lista..
    for X := 0 to Ck.Items.Count - 1 do
     begin
       for Y := 0 to ListAux.Count - 1 do
        begin
          if ((Ck.Items.Strings[X] = ListAux.Strings[Y]) and (Ck.Checked[X] = False)) then
           begin
             Ck.Checked[X] := True;
             ListTmp.Add(IntToStr(Y));
           end;
        end;
      end;

     //Deschecka caso ele esteje caido pra 6º ou mair posição
     for X := 0 to ListAux.Count - 1 do
      begin
        for Y := 0 to ListTmp.Count - 1 do
         begin
           if (ListAux.Strings[X] = ListTmp.Strings[Y]) then
            begin
              for Z := 0 to Ck.Count - 1 do
               begin
                 if (Ck.Checked[X]) then
                  begin
                    Ck.Checked[Z] := False;
                  end;
               end;
            end;
         end; 
      end;


agradeço desde ja se alguem poder me auxiliar.. derrepente pra alguem com o pesnsamento não focado com isso diretamente, seje facil de enxergar a solução.


Nightshade

Nightshade

Curtidas 0

Respostas

Davicarrano

Davicarrano

15/05/2007

irmao, eu entendi isso dessa forma, se não for explica melhor pra tentar ajudar.... da forma q entendi nem precisa do outro list




//Checka
for X := 0 to Ck.Items.Count - 1 do
begin
If (ListAux.indexof(Ck.Items.Strings[X])>=0) and (Ck.Checked[X] = False) Then
Ck.Checked[X] := True;
end;

//Deschecka
for X := 0 to ListAux.Count - 1 do
begin
if (Ck.Items.indexof(ListAux.Items.Strings[X])>=0) and (Ck.Checked[X]) Then
Ck.Checked[Z] := False;
end;


GOSTEI 0
Nightshade

Nightshade

15/05/2007

hehehe não é tao simples assim..
eu estou fazendo uma comparação de 3 listas.. alias são 2, porém estou usando uma terceira como auxiliar.
numa lista eu tenho 10 itens esses 10 itens e num chechlistbox eu tenho em torno de 80 itens
entao se um nome entra nessa lista de 10, ela deve ser chechada na outra lista.
e se um desses nomes sai da lista, ele deve descheckar.

estou tentando agora da seguinte forma, porem nao funciono ainda:

    //Checka elas caso nao estejem marcadas na lista..
    for X := 0 to Ck.Items.Count - 1 do
     begin
       for Y := 1 to ListAux.Count do
        begin
          if ((Ck.Items.Strings[X] = ListAux.Strings[Y]) and (Ck.Checked[X] = False)) then
           begin
             Ck.Checked[X] := True;
             ListTmp.Add(IntToStr(Y));
           end;
        end;
      end;

//     //Deschecka caso ele esteje caido pra 6º ou mair posição
       for X := 0 to ListAux.Count - 1 do
         begin
           for Y := 0 to ListTmp.Count - 1 do
             begin
               if (ListAux.Strings[X] = ListTmp.Strings[Y]) then
                begin
                  ListTmp.Delete(Y);
                end;
             end;
         end;

        for X := 0 to Ck.Count - 1 do
         begin
           for Y := 0 to ListTmp.Count - 1 do
             begin
               if (Ck.Items.Strings[X] = ListTmp.Strings[Y]) then
                begin
                  Ck.Checked[X] := False;
                end;
             end;
         end;



GOSTEI 0
Nightshade

Nightshade

15/05/2007

esse algoritimo utiliza um que anteriormente fiz, no qual seleciona os 5 maiores de uma lista, e depois os 5 menores..
entao formam-se ai os 10 membros da ListView..

agora com esses 10 captions eu quero controlar a chacklistbox atraves de valores deles..


GOSTEI 0
Nightshade

Nightshade

15/05/2007

...


GOSTEI 0
Nightshade

Nightshade

15/05/2007

...


GOSTEI 0
Nightshade

Nightshade

15/05/2007

...


GOSTEI 0
POSTAR