2017-12-22 15 views
1

私の以前の質問に続いて、 How do I display two images consecutively like a gif?、私はgifを作成できると言われました。TSpeedButtonでgifを表示するには

ここに私の理由は次のとおりです。tspeedbuttonは私のために延長を受け付けません。.gif

これをどのように追加できますか?

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

デルファイのために私はグーグルでもドキュメントを見つけることができませんでした。

こんにちは、

実際には通知ボタンを作成しようとしています。通知がない場合、そのイメージはnotification.bmpですが、通知がある場合は、tspeedbuttonのgifである必要があります。私はタイマーを追加し、サーバーをポーリングし、私のための通知はありますか? 6秒ごとに、もしそうなら、tmpeedbuttonのbmpイメージをgifに変更する必要があります。

+0

なぜ、代わりに 'TImage'を使用しないのですか? 'TSpeedButton'は' .bmp'画像のみをサポートします。あなたの '.gif'イメージを読み込み、'(TGIFImageとしてImage1.Picture.Graphic).Animate:= True; ' – Sami

+0

@Samiそれは未知の画像の拡張が失敗したと言います(.gif) – Nevermore

+0

あなたはどちらのバージョンを使用していますか? – Sami

答えて

1

これをきれいに行うには、新しいコンポーネントを作成することをお勧めします。幸運にもTSpeedButtonであり、そのGlyphプロパティとしてTPictureのいずれかのタイプを受け入れるコンポーネントは、私たちが何をすべきか、すべてが、それはGIF

た場合グリフをアニメーション化するためにそれを修正するので、TNCRSpeedButtonのユニットをコピーすることで、そこにあります受け入れられた回答からhere

次の手順に進み、コードに行を追加します(またはこの手順をそのまま使用してください)。

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; 

をグリフとして受け取ったコンポーネントは、それをアニメーション化します。

+0

下の有権者に受け入れられた答えは私であり、私は 'TNCRSpeedbutton'の著者です、私はちょうど金色の板にOPのピースのOPを与えました、すべての情報はまだSOに入っているので、これは何のルールもしません。私の答えは何ですか? –

関連する問題