Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DÉFORMES TES FENÊTRES COMME SOUS VISTA!


Information sur la source

Catégorie :Graphique Classé sous : animation, vista, hook Niveau : Initié Date de création : 22/08/2006 Date de mise à jour : 27/08/2006 02:53:35 Vu / téléchargé: 20 134 / 2 810

Note :
9,44 / 10 - par 9 personnes
9,44 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (53)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • 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.
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!
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

27 août 2006 01:16:17 :
+ Prise en charge des erreurs: l'utilisateur a le choix de désactiver un animateur de la liste s'il déclenche une exception (typiquement le cas du matériel non supporté). + Ajout des 2 méthodes SaveToIniFile et LoadFromIniFile + Correction de quelques bugs dans la partie OpenGl + Ajout de messages d'erreur plus explicites + Correction du bug pour le multi-écran. Ca devrait donc fonctionner cette fois...
27 août 2006 01:22:55 :
Description de SaveToIniFile et LoadFromIniFile
27 août 2006 02:53:35 :
Rajout d'un oubli

Commentaires et avis

signaler à un administrateur
Commentaire de Forman le 22/08/2006 12:17:47

Si quelqu'un a l'occasion d'essayer le programme sous Win2000, Win95 ou Win98, merci de me dire si ça fonctionne ou non.

signaler à un administrateur
Commentaire de Rudy3212 le 22/08/2006 13:01:42

C'est cool cette source merci,

Par contre j'ai pas win98, ni 2000 et encore moins 95 lol.
Désolé allez 10/10 :)

signaler à un administrateur
Commentaire de JulioDelphi le 22/08/2006 13:14:31 administrateur CS

whoua je suis soufflé =) 10/10

signaler à un administrateur
Commentaire de qoprek le 22/08/2006 13:55:19

Bonjour,

Sur mon poste les animations style Vista logicelles ne font rien (juste la tempo qui dure et hop la fenêtre affichée normalement) et les animations style Vista matérielles provoquent une exception générée par Assert(FPBufferARB<>0,SysErrorMessage(GetLastError));
dans TPBufferCanvas.CreateContextCreateContext.

Pour l'exception je pense que c'est tout simplement que mon sous-système vidéo ne gère pas l'accéleration matérielle mais peut-être remonter une exception trappée en indiquant que cette option n'est pas disponible. Peut être même une fonction de tests des animations disponibles pourraient être intégrées a l'objet et mettrait a jour la liste des animations disponibles.

Quant a l'animation style Vista logicielle, je ne sais pas pourquoi je n'ai rien.

Cdlt.
Benoit

Informations:
Report Date: 08/22/2006
Report Time[hr:mm:ss]: 13:45:49
Driver Version: 6.14.10.4410
Operating System: Windows XP* Professional, Service Pack 2 (5.1.2600)
Default Language: French
DirectX* Version: 9.0
Physical Memory: 1015 MB
Minimum Graphics Memory: 8 MB
Maximum Graphics Memory: 128 MB
Graphics Memory in Use: 16 MB
Processor: x86 family 6 Model 13 Stepping 8
Processor Speed: 1994 MHZ
Vendor ID: 8086
Device ID: 2592
Device Revision: 03
*   Accelerator Information   *
Accelerator in Use: Mobile Intel(R) 915GM/GMS,910GML Express Chipset Family
Video BIOS: 3412
Current Graphics Mode: 1280 x 1024 True Color (60 Hz)
*   Devices Connected to the Graphics Accelerator   *
Active Monitors: 1
Active Notebook Displays: 1
*   Monitor   *
Monitor Name: Dell 1704FPT (Analog)
Display Type: Analog
Gamma Value: 2,20
DDC2 Protocol: Supported
Maximum Image Size: Horizontal: 13,3 inches
Vertical:   10,6 inches
Monitor Supported Modes:
640 x 480 (60 Hz)
640 x 480 (75 Hz)
720 x 400 (70 Hz)
800 x 600 (60 Hz)
800 x 600 (75 Hz)
1024 x 768 (60 Hz)
1024 x 768 (75 Hz)
1152 x 864 (75 Hz)
1280 x 1024 (60 Hz)
1280 x 1024 (75 Hz)
Display Power Management Support:
Standby Mode: Supported
Suspend Mode: Supported
Active Off Mode: Supported
*   Notebook   *
Monitor Name: Écran Plug-and-Play
Display Type: Digital
Gamma Value: 3,54
DDC2 Protocol: Supported
Maximum Image Size: Horizontal: Not Available
Vertical:   Not Available
Monitor Supported Modes:
640 x 480 (60 Hz)
800 x 600 (60 Hz)
1024 x 768 (60 Hz)
1400 x 1050 (50 Hz)
1400 x 1050 (60 Hz)
Display Power Management Support:
Standby Mode: Supported
Suspend Mode: Supported
Active Off Mode: Supported
*   SDVO Encoder Report   *
** Encoder 1 **
Vendor ID: Silicon Image
Device ID: 170
Device Revision: 2
Major Version: 1
Minor Version: 0

signaler à un administrateur
Commentaire de Forman le 22/08/2006 14:48:56

qoprek: je pense que ta carte ne gère pas les PBuffer (pixel-buffer) de grande taille. Le code a besoin d'un PBuffer (c'est à dire un device context OpenGl off-screen) de même taille que ton écran. Un tel pbuffer (si tu es en 1280*1024>1000000 pixels @ 32 bits) consomme au moins 3-4 MO de mémoire graphique, donc je pense que c'est de là que vient le problème, étant donné que l'allocation se fait par l'intermédiaire du driver, il se peut que celui-ci limite la taille maximale. Effectivement, il faudrait que je rajoutte quelque chose pour intercepter l'erreur proprement et mettre un message d'erreur plus parlant.

Le problème c'est qu'il n'est pas vraiment recommandé de vérifier que tous les animateurs marchent avant de les proposer dans la liste. En effet, par exemple celui qui utilise OpenGl nécessite ce fameux PBuffer de plusieurs MO en mémoire graphique (et il faut l'allouer pour vérifier que ça marche). Or, allouer une telle quantité prend du temps (jusqu'à 1/2 seconde sur ma geforce 7600) et c'est inacceptable pour une animation qui dure 700millisecondes. Donc cette mémoire devrait être allouée une bonne fois pour toute... c'est à dire seulement si l'utilisateur a choisi d'utiliser l'animation OpenGl (sinon on consomme des resources pour rien, seulement pour vérifier que ça marche). Certes on pourrait imaginer un cas où l'on testerait toutes les classes d'animateurs avant d'en faire la liste uniquement quand l'utilisateur affiche le dialogue de sélection. Mais là encore ça ne résoud pas le problème, puisque l'allocation de pbuffer peut quand même échouer si tu lances le programme plus tard après qu'un autre (lancé entre temps) ait déjà consommé les resources disponibles (en effet, la mémoire graphique est distribuée entre les applications dans l'ordre où elle la demandent)...

Pour le mode software, je ne sais pas non plus pourquoi ça ne fonctionne pas. J'utilise l'API PlgBlt qui permet de déformer une image en un parallélogramme. En découpant la surface de la fenêtre et en l'appelant plusieurs fois, je reconstitue la forme "tordue" approchée désirée. Si tu ne vois rien apparaitre, ça peut venir d'un problème de rapidité: seule la première étape (non visible car en dehors de l'écran) a le temps de s'afficher, puis le délai étant dépassé quand le programme arrive à la frame n°2, il s'arrète et donc tu ne vois rien s'afficher.

Dans tous les cas, vérifie si tes drivers graphiques sont à jour.

Merci pour les commentaires en tout cas

signaler à un administrateur
Commentaire de Forman le 22/08/2006 14:54:02

Une petite remarque pendant que j'y pense: ça ne fonctionnera pas en mode multi-moniteur (j'ai déjà essayé et ça plante grave!)

signaler à un administrateur
Commentaire de Rudy3212 le 22/08/2006 14:56:42

lol, quelle idée d'avoir plusieur ecran (afin si sa veut dire sa multi-moniteur)

signaler à un administrateur
Commentaire de qoprek le 22/08/2006 15:31:25

Je suis en multi moniteur donc ca marchera pas .. zut :(

Sinon j'aurais vu une procédure de ce type pour vérifier (j'ai pas du tout testé donc ca ce trouve j'ai écrit des bêtises):

Procedure TAnimatorManager.AnimatorCheck(FenetreDeTest:TCustomForm);
Var AnimatorClassIDCourant,
    AnimatorDelayCourant,
    Compteur               : Integer;
Begin
  Assert(Assigned(FenetreDeTest),'Erreur: La fenêtre servant de tests des animations possibles n''est pas assignée !');
  AnimatorClassIDCourant := AnimatorClassID;
  AnimatorDelayCourant   := GetDelay;
  SetDelay(10);
  For Compteur := 0 To GetRegisteredAnimatorClassCount Do Begin
    AnimatorClassID := Compteur;
    Try
      FenetreDeTest.Hide;
      AnimateForm(FenetreDeTest,True);
      FenetreDeTest.Show;
    Except
      On E : Exception Do Begin
        If AnimatorClassIDCourant=Compteur Then AnimatorClassIDCourant:=0;
        FRegisteredAnimatorClasses.Remove(GetAnimatorClass(Compteur));
      End;
    End;
  End;
  SetDelay(AnimatorDelayCourant);
  AnimatorClassID := AnimatorClassIDCourant;
End;

signaler à un administrateur
Commentaire de flo160fr le 22/08/2006 15:57:34

Géniale ta source !
Sous xp : Ca marche très bien (sauf sur mon ordi qui a plusieur moniteur; mais ça marche sur l'autre ^^)

Sous 98 SE et 95(light) : ça marche pas... mes machine ne son pas assez puissantes (16 mo de ram pour le 95 32 pour le 98; 133 MHz pour le 95, 220 pour le 98; les 2 avec des cartes vidéo pouraves....)

aller un petit 10/10 pour la route ^^

signaler à un administrateur
Commentaire de Francky23012301 le 22/08/2006 16:49:43

Salut,

Bon travail Forman : vraiment bluffant.

Code : nickel

10/10.

signaler à un administrateur
Commentaire de cirec le 22/08/2006 17:38:44 administrateur CS

Salut,

je posède également un système avec deux moniteurs ...

Erreur Système - Code 1400 - Handle de fenêtre non Valide
(Comme Flo160Fr certainement ?)

Enfin après une petite recherche j'ai trouvé ceci :

en remplacant :
  FPreview.Parentwindow:=Panel3.Handle;
Par :
  FPreview.Parent:=Panel3;

tout fonctionne parfaitement ...

Génial, très bon travail

10/10 sans hésitation
@+
Cirec

signaler à un administrateur
Commentaire de Forman le 22/08/2006 17:42:44

Merci!

Je vais modifier le code quand j'aurai le temps pour mieux gérer les erreurs avec qqchose dans le style de qoprek. Une dernière chose: les fenêtres non rectangulaires sont "à moitié" gérées. Dans leur cas, ce qu'il y a derrière la fenêtre sera déformé et affiché de la même façon que ce qu'il y a à l'intérieur. Ceci dit, cela devrait passer à peu près inaperçu si le fond de l'écran est à peu près homogène, ou si la fenêtre n'est pas "trop" différente d'un rectangle. Par exemple, avec les fenêtres XP aux coins arrondis, on ne se rend compte de rien.

Dans tous les cas, prendre la forme de la fenêtre en compte risquerait de doubler le temps de calcul, et la mémoire utilisée, qui sont déjà bien assez grands!

signaler à un administrateur
Commentaire de Forman le 22/08/2006 17:44:17

Merci Cirec, je vais modifier en conséquence. Je n'ai qu'un moniteur à la maison et juste un ami qui a un multimoniteur, mais pas Delphi, donc c'est difficile de tester/modifier   :-(

signaler à un administrateur
Commentaire de Forman le 22/08/2006 17:48:42

Au fait, je ne sais pas si j'ai été assez clair: les animations s'appliquent à toutes les fenêtres sans distinction (à condition qu'elles soient des classes descendantes de TForm). Par exemple, après avoir choisi un animateur dans la liste et validé le dialogue, si on minimise la fenêtre principale et qu'on la restaure, il se produira une animation.

Chacune des classes d'animations possède plusieurs variantes différentes (en gros une douzaine chacunes) sauf celle de Windows (seulement 6)

signaler à un administrateur
Commentaire de cirec le 22/08/2006 17:49:13 administrateur CS

je ne suis pas certain que ce soit effectivement la cause il faudrait avoir la confirmation de Flo160Fr

En tous cas chez moi le problème est résolu sur un sytème à deux écrans

signaler à un administrateur
Commentaire de Forman le 22/08/2006 17:52:16

Ca dépend sûrement aussi de la façon dont tu paramètres tes 2 écrans (mode clone, bureau étendu, etc...). Je ne tiens pas trop à me lancer dans une gestion approfondie du multi-écran, c'est vite prise de tête, en plus la plupart des drivers sont mal fichus et buggent, et il est difficile de trouver de la documentation fiable sur le sujet...

signaler à un administrateur
Commentaire de flo160fr le 23/08/2006 10:09:43

"en remplacant :
  FPreview.Parentwindow:=Panel3.Handle;
Par :
  FPreview.Parent:=Panel3;"

Ca marche sur mon ordi multimoniteurs; donc pour moi c'est ok ^^

signaler à un administrateur
Commentaire de cirec le 23/08/2006 12:05:11 administrateur CS

Ben voilà c'était donc bien ceci qui posait problème
Mais pour ma part si quelqu'un peut m'expliquer la différence entre les deux déclarations je serai curieux de le savoir ?

Par contre Forman tu dis ceci:
"Chacune des classes d'animations possède plusieurs variantes différentes (en gros une douzaine chacunes) sauf celle de Windows (seulement 6) "

Alors oui il y en bien 6 mais de base en les combinant ça en donne 18 :-)

  // Les 6 de base
  (AW_BLEND),
  (AW_CENTER),
  (AW_HOR_POSITIVE),
  (AW_HOR_NEGATIVE),
  (AW_VER_NEGATIVE),
  (AW_VER_POSITIVE),
// et le reste
  (AW_HOR_POSITIVE or AW_VER_POSITIVE),
  (AW_HOR_NEGATIVE or AW_VER_POSITIVE),
  (AW_HOR_POSITIVE or AW_VER_NEGATIVE),
  (AW_HOR_NEGATIVE or AW_VER_NEGATIVE),
  (AW_HOR_POSITIVE or AW_SLIDE),
  (AW_HOR_NEGATIVE or AW_SLIDE),
  (AW_VER_NEGATIVE or AW_SLIDE),
  (AW_VER_POSITIVE or AW_SLIDE),
  (AW_HOR_POSITIVE or AW_VER_POSITIVE or AW_SLIDE),
  (AW_HOR_NEGATIVE or AW_VER_POSITIVE or AW_SLIDE),
  (AW_HOR_POSITIVE or AW_VER_NEGATIVE or AW_SLIDE),
  (AW_HOR_NEGATIVE or AW_VER_NEGATIVE or AW_SLIDE);

@+
Cirec

signaler à un administrateur
Commentaire de Debiars le 23/08/2006 16:40:10

Avec 256 Mo de RAM et 1800 MHz :

sous 98 SE : tout fonctionne à part Vista accélération logicielle qui affiche d'un bloc en fin de durée.

sous 2000 Pro : Vista accélération logicielle un peu saccadé. Pour le reste, parfait, impeccable!

signaler à un administrateur
Commentaire de Forman le 27/08/2006 01:11:54

Merci Debiars. Je voulais vérifier que j'avais bien réussi à corriger le bug de la fonction CheckWin32Version (définie de base dans Delphi, mais buggée pour les versions antérieures), car j'utilise l'événement WM_PRINT pour afficher la fenêtre dans un bitmap, mais cette fonction n'est disponible qu'à partir de NT.

Je poste les corrections dont on a parlé. Merci pour votre aide à tous, DelphiFr retrouve son dynamisme ;-)

signaler à un administrateur
Commentaire de Forman le 27/08/2006 01:26:04

Cirec: j'ai aussi inclus les autres versions dont tu parles dans la MAJ. J'avais essayé d'en faire des plus tordues avec des fenêtres "bondissantes" ou clignotantes ou encore palpitantes (lol) mais comment dire... au bout d'un moment ça fait beaucoup trop! Je vais donc rester avec cette version plus sobre.

signaler à un administrateur
Commentaire de Forman le 27/08/2006 15:22:06

Je crois savoir pourquoi
FPreview.Parentwindow:=Panel3.Handle;
ne fonctionne pas en mode multi-moniteur: lorsqu'on référence la propriété Handle d'un descendant de TWinControl (comme un TPanel ici) il se peut que bien que l'instance de l'objet Delphi soit créée, la fenêtre "native" (qui est représentée dans le système d'exploitation pas un THandle) ne soit pas encore créée. Si c'est le cas, Delphi force la création de cette fenêtre pour que la fonction GetHandle de la propriété Handle retourne un descripteur de fenêtre valide. Or, si jamais le THandle créé par Windows devient invalide, et si on l'a affecté au ParentHandle d'une fenêtre il se produit l'erreur décrite: "Handle de fenêtre invalide". En utilisant la propriété Parent à la place, si jamais le Handle du panel a changé, Delphi met à jour automatiquement le ParentHandle de la fenêtre native du système d'exploitation. En théorie, un handle de fenêtre n'a pas à être recréé sauf dans plusieurs cas:
-Changement du style des bords de la fenêtre (BorderStyle ou BorderIcons par exemple)
-Affectation d'un moniteur principal dans le cas d'un système multi-écran.
Mais si le Handle d'une fenêtre doit être recréé (pour une raison ou une autre) ce sera aussi le cas de tous ses enfants. Ici, la TForm du dialogue possédant le TPanel a son Handle recréé après l'appel de OnCreate. Donc, le Handle du Panel devient invalide, or il a été utilisé en tant que ParentWindow de la fenêtre d'exemple...

Ceci devrait expliquer l'erreur, si j'ai été assez clair.

signaler à un administrateur
Commentaire de xxspoonxx le 11/12/2006 04:17:27

Bonjour

Voila j'ai trouvé ces sources qui m'interresse grandement... Le probleme c'est que je suis nouveau dans la programmation... Donc je souhaiterai savoir si quelqun pourai m'expliquer par Email, ou ici,comment installer tout cela ou eventuellement savoir si on pouvai en faire un EXE...

Merci de vos réponse.

signaler à un administrateur
Commentaire de Forman le 11/12/2006 14:06:49

Bonjour,

D'abord tu dois avoir Delphi. Si c'est le cas tu as juste à compiler le programme fourni dans le zip et ça y est, tu as un EXE            ;-)
Il n'y a rien de spécial à installer pour utiliser ce source, il suffit de rajoutter "AnimatorManager" dans la liste après "uses" dans l'une des unités du programme où l'on souhaite l'utiliser.

signaler à un administrateur
Commentaire de badboy952 le 25/12/2006 11:57:13

Salut tout le monde est ce que quelqun pourait m'expliquer comment on installe ce logiciel je sais pas du tout comment faire merci d'avance.

signaler à un administrateur
Commentaire de flo160fr le 25/12/2006 14:10:39

badboy952 : Ce "Logiciel" ne s'installe pas, c'est un code source pour les developpeur Delphi, il se compile avec delphi, et ne deforme QUE sur les fenetre de l'application qui contien ce code...
Ce n'est pas un programme de "customisation" de windows...

signaler à un administrateur
Commentaire de Forman le 26/12/2006 21:51:39

flo160fr: Ca me donne une idée ce que tu as écrit: on pourrait "hooker" les processus en cours pour injecter une DLL redéfinissant la WndProc de toutes les fenêtres lancées de façon à les animer lors d'un WM_SHOW. De cette façon-là, on aurait une customisation effective de Windows ;-)

signaler à un administrateur
Commentaire de flo160fr le 27/12/2006 10:54:14

c'est une très bonne idée ça ^^.
Ravis de t'avoir inspiré ^^

signaler à un administrateur
Commentaire de theob le 07/05/2007 18:30:07

s'il vous plait, est-ce que vous pouvez me donner un lien pour telecharger le compilateur delphi? c'est urgent !!!!!

signaler à un administrateur
Commentaire de Forman le 07/05/2007 19:06:10

Salut,

effectivement il devient plus difficile de trouver les versions gratuites... voir ce post:
http://www.thoughtsabout.net/blog/archives/000056.html

On peut donc télécharger la version gratuite de Delphi 7 ici:
http://www.borland.pl/downloads/delphi_7_personal/Delphi7_Personal.zip

signaler à un administrateur
Commentaire de layann06 le 27/05/2007 17:58:24

Bonjour, je ne connais vraiment rien à la programmation, mais ce n'est pas l'envie qui me manque d'acheter un bouquin pour m'y mettre. En attendant, comment fait on pour compiler ce code? Quel fichier doit on ouvrir, et que doit on rajouter comme ligne pour compiler?
Merci d'avance pour vos réponses.

signaler à un administrateur
Commentaire de hackeur13 le 09/06/2007 18:21:31

bonsoir tout le monde,alors pour faire compiler le code source il faut que tu double clique sur project1 et tu tape f9 et tu auras l'executable,voila pour ta question.
et moi je voudrais savoir si c'est possible de faire une application mais que quand ton ouvre l'application elle s'ouvre comme les exemples tres bien faite.

ps:merci d'avance pour vos reponse!!

signaler à un administrateur
Commentaire de Forman le 09/06/2007 23:14:33

Bonsoir à tous

@hackeur13: merci pour les explications. On m'a posé la question tellement de fois sur ce source en particulier: "mais comment diable installe/lance-t-on ce programme?" que je commençais à être fatiqué de répondre...
Pour ta question, je ne suis pas sûr de saisir: "quand ton ouvre l'application elle s'ouvre comme les exemples tres bien faite." Tu veux dire comment intégrer le système de déformations dans tes propres programmes? Si c'est bien ça ta question, c'est très simple, il suffit de rajouter "AnimatorManager" dans les uses de n'importe quelle unité de ton programme, par exemple:

Unit1;

interface

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

blablabla...

end.

Si tu fais ça, le système d'animations est automatiquement activé. Si tu veux donner à l'utilisateur la possibilité de le configurer (lors du clic sur un bouton par exemple):

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

signaler à un administrateur
Commentaire de hackeur13 le 09/06/2007 23:57:06

Forman,merci j'avais trouvé la solution,et frenchement je me regale mais je me trouve fasse a un autre probleme mintenant!le probleme c'est que j'ai mis une image de fond,et quand j'execute le programme il y aparait plus mon image de fond!!!alors je suis obliger de agrandir un tout petit peu mon application pour voir mon image??alors je me demandé si quelqun avait deja eu un probleme de se genre?car depuis un bon moment j'ai galerer pour trouver un code source comme le tien,et mintenant je dois galerer avec une image de fond grrrrr!!!voila merci de ton aide!!en esperant que tu continue..bonne chance

ps:desoler pour les fautes..

signaler à un administrateur
Commentaire de Forman le 10/06/2007 00:35:13

Elle est implémentée comment ton image de fond? avec un TImage ou avec l'événement OnPaint de la fiche?

signaler à un administrateur
Commentaire de hackeur13 le 10/06/2007 00:41:28

merci d'avoir repondu alors c'est avec un TImage?

signaler à un administrateur
Commentaire de Forman le 10/06/2007 01:21:52

Hmm... je ne suis pas sûr qu'on parle tous les 2 de la même chose. Lorsque tu parles d'image de fond, tu veux dire que tu as mis une image de fond sur la TForm que tu cherches à animer? Ou tu veux parler de l'image de fond du bureau?

signaler à un administrateur
Commentaire de hackeur13 le 10/06/2007 01:26:00

non desoler je parle de l'image de fond sur la TForm!

signaler à un administrateur
Commentaire de Forman le 10/06/2007 02:35:59

Ben c'est bizarre, je viens d'essayer avec un TImage en fond, et ça s'affiche nickel dans l'animation et après chez moi. Pour que je trouve ce qui ne va pas, il faudrait donc que tu me dises:
-quelle version de Windows tu as;
-quelle version de Delphi;
-et éventuellement que tu m'envoies le code de ta fiche par MP.

signaler à un administrateur
Commentaire de Forman le 10/06/2007 02:37:55

Ah oui, et aussi pour vérifier que le problème vient bien des animations: essaie de lancer le programme en supprimant AnimatorManager des uses, et vérifie que tout s'affiche bien comme il faut.

signaler à un administrateur
Commentaire de hackeur13 le 10/06/2007 02:47:47

OK alors je vais essayer et si sa marche pas je t'envoie ma source.merci

signaler à un administrateur
Commentaire de layann06 le 10/06/2007 19:56:58

Encore bonjour, au risque de paraitre lourd ( je pense que c'est déjà fait), et de désespérer Forman (ça aussi c'est fait ^^), j'aimerai savoir s'il est possible d'appliquer les animations pour les fenêtres de windows? Quand on lance le dossier mes documents, ou bien le lecteur média, enfin les fenêtres de bases. J'ai compris qu'il suffisait de rajouter AnimationManager dans uses, dans une unité d'un programme. Seulement je ne veux pas créer un programme, je voudrais simplement pouvoir animer les fenêtres de l'ordi. Encore désolé d'être lourd, et merci de consacrer un peu de temps pour me répondre. Merci!

signaler à un administrateur
Commentaire de Forman le 10/06/2007 21:17:24

Non si c'est ça ta question, alors ça va         :-D

La réponse est: oui c'est possible, mais ça demanderait du boulot. Vraisemblablement, la façon la plus naturelle de faire ça serait de créer un service qui se lance au démarrage. Celui-ci, dès qu'une nouvelle application est lancée, se charge d'y injecter une ch'tite DLL qui elle-même se charge de surcharger les WndProc des fenêtres de l'application de façon à intercepter le message WM_SHOW et d'y intercaller l'animation avant de rendre la main au comportement normal.

Eventuellement, l'injection pourrait se faire par l'intermédiaire d'un hook global (de cette façon, inutile de surveiller en permancence la liste des process et fenêtres). Il reste une autre difficulté technique: les animations qui utilisent OpenGl. En effet, un contexte opengl ne peut pas être partagé entre plusieurs applications. Il faudrait donc garder la partie OpenGl dans un programme serveur (typiquement le service qui se lance au démarrage) et lui envoyer les données pour qu'il trace lui-même l'animation.

Le danger d'un tel programme c'est qu'il peut rendre le système instable (on peut par exemple imaginer un driver opengl buggé qui fait bugger tout le système dès qu'une fenêtre s'ouvre). Il faudrait donc être extrèmement rigoureux dans la gestion des exceptions (et aussi de la mémoire par la même occasion).

Si j'ai le temps je le ferai un jour... si tu te sens tu peux commencer, mais je te préviens ça demande pas mal de boulot!

signaler à un administrateur
Commentaire de getmeall le 14/08/2007 20:10:29

great

signaler à un administrateur
Commentaire de Forman le 15/08/2007 00:08:44

thanks!

signaler à un administrateur
Commentaire de Rudy3212 le 15/08/2007 13:27:57

Intéréssant :P,
Manque plus que tu le programme Forman :P.

signaler à un administrateur
Commentaire de randriano le 19/10/2007 06:52:06

Bonjour tout le monde !

Tout simplement, c'est fantastique !!
J'avais déja songé à un programme pareil mais sans succès, je plantais déja dès l'imagination de la technique à prendre !! Et là, tu le réussis en un coup. Ca mérite des applaudissements !!

signaler à un administrateur
Commentaire de niber2010 le 17/03/2008 18:55:28

j'aimerais l'utiliser sur xp mais comment doit on faire une fois que le zip est téléchargé car il n'y a pas de fichier exe pour l'installer.
Avez vous la procédure?

Merci

Niber

signaler à un administrateur
Commentaire de aminedelphi le 16/07/2008 02:44:06

very very Gooooooooood

signaler à un administrateur
Commentaire de Forman le 16/07/2008 08:01:49

Thanks!

signaler à un administrateur
Commentaire de speederman_ch le 22/11/2008 16:49:23 10/10

Bonjour

Ce Source ne fonctionne pas sous delphi 7 !!
Y a t'il une explication à apporter.

merci.

signaler à un administrateur
Commentaire de JulioDelphi le 22/11/2008 17:09:56 administrateur CS

Il fonctionne, j'ai delphi7 !

signaler à un administrateur
Commentaire de Forman le 22/11/2008 17:27:32

Pareil pour moi, j'ai D7.

Qu'entends-tu précisément par "ne fonctionne pas"?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Hook dll : comment ca marche ? [ par Millenius ] Bonjour, je voudrais hooker un dll.Le clavier et la souris, ca je sais faire.Ce que je voudrais, c pouvoir connaitre les flux de données entrant et so Conseil pour Moteur 3D [ par dami ] Bonjour a tous .Je développe actuellement un jeux de stratégie 3D temps réel. J'ai décidé d'importer les objects via un loader 3ds que j'ai fais, je l Animation dans un Menu [ par Chong ] Bonjour, Tiens Bestiol en parlant de Menu, moi j'aimerai savoir si qlq à déjà réalisé un composant permettant d'afficher une petite aniamtion (rectan form aux bord irreguliers : régions [ par sebrs1 ] salut à tousvoila mon pbj'assigne plusieurs fois d'affilée des regions a ma form (attention, je ne cherche pas a les combiner) afin de realiser une an Traduire Hook Cplusplus en Delphi [ par lucien ] Qui aurait le temps(d'abord), la gentillesse et la liberté mentale (ensuite) de traduire un programme (de 7 pages au format word: deux pour la dll et Decalage avec flash [ par magicvinni ] Bonjour, J'ai créé une animation flash swf, que je lis avec l'activeX de flash. Problème, lorsque je joue mon animation, elle n'est plus synchro avec Navigateur [ par eric30eric ] SpiTFirE3 8Dsalut,J'ai commencer a faire un navigateur et j'aimerait ajouter une animation comme dans explorer : quand la page se charge c'est l'anima Hook clavier sur windows XP et 9x [ par bebeb3 ] Bonjour, Je viens de finir un petit prog utilisant un hook du clavier.Sous Windows XP, il fonctionne parfaitement mais sous windows 9x, il plante d insert animation flash [ par yoghisan ] BonjourComment fait-on pour inserer et animer une animation flash (*.swf) dans delphi ?Merci Animation pour une procedure bloquante ??? [ par Antidote ] Antidote Bonjour les gens :-) , je viens à nouveau faire apelle à votre savoir: Rés


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,640 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.