如何在TSpeedButton

时间:2017-12-22 13:27:10

标签: delphi animated-gif

按照我先前提出的问题; How do I display two images consecutively like a gif?,有人告诉我,我可以创建一个gif

以下是我的理由: tspeedbutton 不接受.gif分机。

我该如何添加?

btnNotification.Glyph.LoadFromFile(ICON_DIR + '/notification-active.gif');

我用谷歌搜索但由于德尔福而无法找到文档。

您好,

其实我正在尝试创建通知按钮。如果没有通知,则其图像为notification.bmp,但如果有通知,则应该是tspeedbutton上的gif。我添加了一个计时器并轮询服务器,是否有通知给我?在每6秒,如果是,我需要将bmp图像更改为tspeedbutton上的gif

1 个答案:

答案 0 :(得分:1)

以干净的方式执行此操作我建议您构建一个新组件。幸运的是,有一个组件是TSpeedButton并且接受任何类型的TPicture作为其Glyph属性,我们所要做的就是修改它以使Glyph动画化,如果它是GIF

因此,请从已接受的答案here

中复制TNCRSpeedButton的单位

转到以下步骤并将代码行添加到代码中(或者只是将代码替换为该代码)。

procedure TNCRSpeedButton.GlyphChanged(Sender: TObject);
begin
  if (FGlyph.Graphic <> nil) and (not FGlyph.Graphic.Empty) then
  begin
    FGlyphCoordinates.OnChange := nil; // Prevent multiple invalidates
    FGlyphCoordinates.X := (Width - FGlyph.Graphic.Width) div 2;
    FGlyphCoordinates.Y := (Height - FGlyph.Graphic.Height) div 2;
    FGlyphCoordinates.OnChange := CoordinatesChanged;
///// add these lines here ///////////////////////////////////
    if (FGlyph.Graphic is TGifImage) then
      begin
      (FGlyph.Graphic as TGifImage).Animate := True;
      end;
//////////////////////////////////////////////////////////////
  end;
  Invalidate;
end;

现在组件收到TGIFImage作为其字形时,它将为其设置动画。