Imagelist animee dans une tstatusbar

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 229 fois - Téléchargée 17 fois

Contenu du snippet

Voici comment mettre une TImageList dans une TStatusbar et le tous annimé,
comme le fait le compilateur Visual Studio
Un grand merci a DelphiProg

Il suffit d'avoir :
un TTimer
TImageList
TStatusBar

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    StatusBar1: TStatusBar;
    ImageList1: TImageList;
    procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
   Form1: TForm1;
   ImgIndex: integer = 0;
implementation

{$R *.dfm}

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  ImageList1.Draw(StatusBar1.Canvas, Rect.Left + 2, Rect.Top, ImgIndex);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var Rect: TRect;
begin
  if ImgIndex < ImageList1.Count - 1 then
  begin
     ImageList1.Draw(StatusBar1.Canvas, Rect.Left + 2, Rect.Top, ImgIndex);
     inc(ImgIndex);
  end
  else
  begin
    ImageList1.Draw(StatusBar1.Canvas, Rect.Left + 2, Rect.Top, ImgIndex);
    ImgIndex := 0;
  end;
  StatusBar1.Panels[2].Text:=TimeToStr(Now);
end;

end.

A voir également

Ajouter un commentaire Commentaires
Messages postés
104
Date d'inscription
samedi 23 décembre 2000
Statut
Membre
Dernière intervention
9 mai 2013

je te remercie beaucoup ca fonctionne et pour y ajouter du text? dans le memepanel?
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Cirec :

- ingrédients
- recette
- commentaire du chef

:o)

Cordialement, Bacterius !
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
39
pourquoi faire simple quand on peut faire compliqué ... hein :p

1 StatusBar
1 ImagaList
1 Timer

et une seule procédure ... "OnTimer"

procedure TfrmMain.Timer1Timer(Sender: TObject);
const
SB_SETICON = WM_USER+15;
var
aIcon: TIcon;
begin
aIcon := TIcon.Create;
try
ImageList1.GetIcon(ImageList1.Tag, aIcon);
ImageList1.Tag := (ImageList1.Tag+1) mod ImageList1.Count;

StatusBar1.Perform(SB_SETICON, 0, aIcon.Handle);
StatusBar1.Perform(SB_SETICON, 3, aIcon.Handle);
finally
aIcon.Free;
end;
end;

pour les besoins de l'exemple j'ai laissé la création et la destruction du TIcon dans la procédure "OnTimer" mais il est préférable de le créer une fois au début et de le libérer à la fin de l'application

explications:
StatusBar1.Perform(SB_SETICON, // message a envoyer
1, // N° du panel (-1 = simple panel) voir ps
aIcon.Handle);// Handle de l'icône a afficher 0 pour l'effacer.

pour + d'explications voir ici:
http://msdn.microsoft.com/en-us/library/bb760755%28VS.85%29.aspx

simple et efficace :D

ps: chez moi en "SimplePanel" ça ne fonctionne pas !!!
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
var
ImgIndex: Integer;

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
// animation Panels[0] :
ImageList1.Draw(StatusBar1.Canvas, 1, 3, ImgIndex);
// animation Panels[1] :
ImageList1.Draw(StatusBar1.Canvas, StatusBar1.Panels[0].Width + 2, 3, ImgIndex);
StatusBar1.Panels[2].Text:=TimeToStr(Now);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(ImgIndex);
if ImgIndex = ImageList1.Count then
ImgIndex := 0;
StatusBar1.Invalidate;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
ImgIndex := 0;
StatusBar1.Panels[0].Style := psOwnerDraw;
StatusBar1.Panels[1].Style := psOwnerDraw;
end;
Messages postés
1
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
5 octobre 2009

comment instaler une photo dans un dossie jounne informatique ou dans une clè usb c'est qulquin le sait je lui serait grè de mon fair par sois un logiciel ou une formule je vous remercie bien d'avence.pour me lon voyer voissi mon E-mail:DAGOBA1982@HOTMAIL.COM UN GRAND MERCI
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.