bsTrayIcon的IconList属性连接了ImageList1控件,在ImageList1里有三个图片0、1、2。我要做的是,当没有消息时让bsTrayIcon只显示图片2,当有新消息时让bsTrayIcon在图片0和1之间变换显示(就会有一闪一闪的效果,象QQ一样),我自己的代码如下,自己写的过程:
procedure TFormMain.SetTrayIcon();
begin
  if iNeedDo > 0 then     //iNeedDo为待办的事情个数
  begin
    bsTrayIcon1.Hint := '您有' + IntToStr(iNeedDo) + 待办事务';
    bsTrayIcon1.CycleIcons := True;
  end
  else
  begin
    bsTrayIcon1.Hint := 您没有待办事务';
    bsTrayIcon1.CycleIcons := False;
  end;
end;程序里没写图片转换的代码,因为实验了好多都没有达到目的,总是三个图片互相转换。是不是我写的地方不对,还是应该在ImageList1控件的事件里写?现在思路有点混乱,请高手指教,谢谢!

解决方案 »

  1. AnimateTimerInterval设一个值(毫秒)
    在OnCycle事件写bsTrayIcon1.IconIndex:=NextIndex;就可以实现图片闪动
      

  2. begin
      if iNeedDo > 0 then     //iNeedDo为待办的事情个数
      begin
        bsTrayIcon1.Hint := '您有' + IntToStr(iNeedDo) + '待办事务';
        bsTrayIcon1.CycleIcons := True;
        bsTrayIcon1.IconIndex:=0;
      end
      else
      begin
        bsTrayIcon1.Hint :=' 您没有待办事务';
        bsTrayIcon1.CycleIcons := False;
        bsTrayIcon1.IconIndex:=2;
      end;
    end;
    end;procedure TFormMain.bsTrayIcon1Cycle(Sender: TObject; NextIndex: Integer);
    begin
      if NextIndex<>1 then bsTrayIcon1.IconIndex:=NextIndex;
    end;procedure TFormMain.FormCreate(Sender: TObject);
    begin
      bsTrayIcon1.IconIndex:=2;
    end;
      

  3. procedure TFormMain.SetTrayIcon();
    begin
      if iNeedDo > 0 then     //iNeedDo为待办的事情个数
      begin
        bsTrayIcon1.Hint := '您有' + IntToStr(iNeedDo) + 待办事务';
        TrayIcon1.IconList := ImageList1;//这个ImageList1里只有你所说的0、1两张图片
        TrayIcon1.CycleInterval := 400;
        TrayIcon1.CycleIcons := True;
      end
      else
      begin
        bsTrayIcon1.Hint := 您没有待办事务';
        TrayIcon1.IconList := ImageList2;//这个ImageList1里只有你所说的2一张图片
        TrayIcon1.CycleIcons := False;
      end;
    end;
      

类似问题 »