Déformes tes fenêtres comme sous vista!

Description

Vous en avez assez des fenêtres tristes qui ne bougent pas, ne se déforment pas? Vous en avez assez de ceux qui trouvent que Vista c'est génial, il y a des effets 3D avec les fenêtres blablabla? Ce code est fait pour vous!

Lors du lancement de l'exemple, aller dans le menu Options->Animations...

Ce code permet d'appliquer automatiquement des animations automatiques aux fenêtres d'un programme. Pour l'utiliser, il suffit simplement d'ajoutter "AnimatorManager.pas" dans la liste des uses d'une unité.

Les animations se déclenchent (avec une certaine probabilité paramétrable) lorsqu'une fenêtre est rendue visible (typiquement un dialogue). Par exemple, minimiser et restaurer une fenêtre déclenche son animation. Le tout est géré par une classe-singleton: GAnimatorManager:

TAnimatorManager=class
public
procedure AnimateForm(AForm:TCustomForm;Force:Boolean=False);

procedure Customize;

property Delay:Cardinal read GetDelay write SetDelay;
property AnimatorClassID:Integer read FAnimatorClassID write SetAnimatorClassID;
property AnimationProbability:Integer read FAnimationProbability write SetAnimationProbability;

procedure SaveToIniFile(AIniFile:TIniFile;Section:string='Animator');
procedure LoadFromIniFile(AIniFile:TIniFile;Section:string='Animator');
end;

+AnimateForm permet d'animer une fiche avec la probabilité définie (Force outrepasse cette probabilité)
+Customize lance la fenêtre de paramètres des animations
+Delay est la durée des animations, en millisecondes (par défaut 700)
+AnimatorClassID est le type d'animation choisi (par défaut zéro, c'est à dire pas d'animation)
+AnimationProbability est la probabilité (comprise entre 0 et 100) qu'une fenêtre soit animée lorsqu'elle est rendue visible. Par défaut elle vaut 100 (c'est à dire que toutes les fenêtres sont animées).
+SaveToIniFile et LoadFromIniFile permettent de sauvegarder et charger les paramètres du gestionnaire d'animations dans un fichier ini. Le paramètre "Section" optionnel permet de spécifier dans quelle section on désire écrire les données.

Pour l'instant il y a 5 types d'animations différents:
+ Pas d'animations
+ Animations émulées simples: des animations sans déformation (mais avec zoom) et effets de transparence utilisant GDI
+ Animations systèmes: des animations utilisant l'API AnimateWindow
+ Animations style Vista, accélération logicielle: des animations déformantes avec des effets de pliage/dépliage en 3D dans un style ressemblant à Vista. Le tout est programmé en utilisant GDI, c'est à dire... très lent!
+ Animations style Vista, accélération matérielle: la même chose, utilisant OpenGl, avec des effets de transparence en plus.

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AnimatorManager, Menus, IniFiles;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Options1: TMenuItem;
    Animations1: TMenuItem;
    procedure Animations1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Animations1Click(Sender: TObject);
begin
  GAnimatorManager.Customize;
end;

procedure TForm1.FormCreate(Sender: TObject); {On charge les derniers paramètres utilisés}
var
  f:TIniFile;
begin
  f:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  GAnimatorManager.LoadFromIniFile(f);
  f.Destroy;
end;

procedure TForm1.FormDestroy(Sender: TObject); {On sauvegarde les derniers paramètres utilisés}
var
  f:TIniFile;
begin
  f:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  GAnimatorManager.SaveToIniFile(f);
  f.Destroy;
end;

end.

Conclusion :


Comme vous pouvez le constater, c'est très facile à utiliser. En rajouttant AnimatorManager dans les uses du programme, on obtient ce qu'on peut voir sur la capture.

A noter: pour que tout fonctionne, il faut aussi que les 7 unités:
AnimatorManager.pas
AnimatorManagerDialogFormUnit.pas
FormAnimator.pas
GlBitmap.pas
GlCanvas.pas
GlFont.pas
GlTexture.pas
TLS.pas

soient présentes dans le répertoire du projet (ainsi bien évidemment que AnimatorManagerDialogFormUnit.dfm).

Référez-vous à la mention de copyright dans AnimatorManager.pas pour l'utilisation dans vos programmes.

Bon codage!

Codes Sources

A voir également

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.