Olá pessoal!

Estou apanhando de um componente ListView que estou utilizando para mostrar um 
mapa de mesas no meu sistema. O que ocorre é que eu utilizava o código abaixo 
para formulár o mapa a cada alteração que uma mesa era adicionada ou alterada:

procedure TfrmFrente.CompoeMapa(Sender: TObject);
Var
  List: TStringList;
  List2: TStringList;
Var
  NewItem: TListItem;
  I: Integer;
begin
  // MONTAGEM DO ARQUIVO DE TEXTO
  sqlMapaMesasIni('N', '%');
  sqlMapaMesas.First;
  List := TStringList.Create;
  While Not (sqlMapaMesas.Eof) do
    begin
      List.Add(sqlMapaMesas.FieldByName('MESA_CARTAO').AsString);
      If ((Time >= (sqlMapaMesas.FieldByName('ULTIMO_LANCAMENTO').Value + 
dm.sqlConfig.FieldByName('CT_MINUTOS_ALERTA').Value))) then
      // se o tempo sem atendimento for igual ou maior que o definido no config
        begin
          If (vPassada <> 1) then
          // se for a passada 1 coloca os ícones normais
            begin
              If (sqlMapaMesas.FieldByName('STATUS').AsString = 'A') then
                List.Add('@' + IntToStr(1))
              else
                List.Add('@' + IntToStr(0));
            end
          else
          // caso contrário coloca o ícone em branco
            begin
              List.Add('@' + IntToStr(3));
            end;
          // se houver mesas agrupadas... adiciona no mapa
          If Not (sqlMapaAgrupadas.IsEmpty) then
            begin
              While Not (sqlMapaAgrupadas.Eof) do
                begin
                  // se para agrupadas também for passada 1 coloca ícone padrão 
de agrupamento
                  If (vPassada <> 1) then
                    begin
                      List.Add(sqlMapaAgrupadas.FieldByName('MESA').AsString);
                      List.Add('@' + IntToStr(2));
                    end
                  else
                  // caso contrário ícone branco
                    begin
                      List.Add(sqlMapaAgrupadas.FieldByName('MESA').AsString);
                      List.Add('@' + IntToStr(3));
                    end;
                  sqlMapaAgrupadas.Next;
                end;
            end;
      //    sqlMapaMesas.Next;
        end
      else
      // se não tiver excedido o tempo limite do config
        begin
          If (sqlMapaMesas.FieldByName('STATUS').AsString = 'A') then
            List.Add('@' + IntToStr(1))
          else
            List.Add('@' + IntToStr(0));
          // se houver mesas agrupadas... adiciona no mapa
          If Not (sqlMapaAgrupadas.IsEmpty) then
            begin
              While Not (sqlMapaAgrupadas.Eof) do
                begin
                  List.Add(sqlMapaAgrupadas.FieldByName('MESA').AsString);
                  List.Add('@' + IntToStr(2));
                  sqlMapaAgrupadas.Next;
                end;
            end;
      //    sqlMapaMesas.Next;
        end;
      sqlMapaMesas.Next;
    end;
  If (vPassada <> 2) then
    vPassada := 2
  else
    vPassada := 1;
  List.SaveToFile(ExtractFilePath(Application.ExeName) + 'Mapa.txt');
  List.Free;

  
  // MONTAGEM DO MAPA NA TELA
  lvMesas.Items.Clear;
  lvMesas.ViewStyle := vsIcon;
  sqlMapaMesasIni('N', '%');
  
//***********************************************************************************
  // aqui ele configura o listview
  
//***********************************************************************************
  NewItem := Nil;
  lvMesas.Items.Clear;
  List2 := TStringList.Create;
  Try
    List2.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Mapa.txt');
    For I := 0 to List2.Count - 1 do
      If (List2[I][1] = #9) then
        NewItem.SubItems.Add(Trim(List2[I]))
      else if (List2[I][1] = '@') then
        NewItem.ImageIndex := StrToIntDef(List2[I][2], 0)
      else
        begin
          NewItem := lvMesas.Items.Add;
          NewItem.Caption := List2[I];
        end;
  Finally
    List2.Free;
  end;
end;

Acontece que agora quero fazer com que uma mesa que esteja sem atendimento a X 
minutos seja apresentada com o ícone intermitente, e confesso que toh apanhando.
Minha idéia era utilizar um Timer que a cada 500 (ciclo de tempo) faria a 
conferência das mesas abertas e apenas trocaria o ícone representantes por uma 
imagem em branco dando o efeito de intermitência. Mas não tah dando muito certo.

Se alguém puder me dar uma luz, fico agradecido.

Leonardo Vinicius Freitag



      Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua 
cara @ymail.com ou @rocketmail.com.
http://br.new.mail.yahoo.com/addresses

[As partes desta mensagem que não continham texto foram removidas]

Responder a