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]