begin process at 2010 09 03 22:09:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > DÉFORMES TES FENÊTRES COMME SOUS VISTA!

DÉFORMES TES FENÊTRES COMME SOUS VISTA!


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :23 132 / 3 001

Auteur : Forman

Ecrire un message privé
Commentaire sur cette source (62)
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='An imator');
    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
AnimatorManagerDialo gFormUnit.pas
FormAnimator.pas
GlBitmap.pas
GlC anvas.pas
GlFont.pas
GlTexture.pas
TLS.pas

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

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

Bon codage!

 Fichier Zip

Les Membres Club peuvent 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

 Sources du même auteur

Source avec Zip TRADUCTION DE DOKAN EN DELPHI: UN DRIVER "USER-MODE" POUR DI...
Source avec Zip Source avec une capture TASK MANAGER EN MODE TEXTE (ÉMULATION MODE 03H)
Source avec Zip Source avec une capture CHRONOMÈTRE POUR LE THÉ
Source avec Zip UTILITAIRE POUR LANCER UN PROGRAMME DEPUIS UN AUTRE COMPTE (...
Source avec Zip Source avec une capture DÉMONSTRATION DE LA GESTION DES OBJETS EN MÉMOIRE PAR DELPHI...

 Sources de la même categorie

Source avec Zip Source avec une capture AUSSI PRATIQUE QUE CANVAS.PIXELS[ ] MAIS JUSQU'À 450 FOIS PL... par Caribensila
Source avec Zip Source avec une capture REMPLISSAGE D'UNE COURBE DE BÉZIER par barbichette
Source avec Zip Source avec une capture DESKTOPICONFLYING par cantador
Source avec Zip Source avec une capture DÉFILEMENT D'UN TEXTE SOUS FORME D'IMAGE SUR UN AFFICHEUR À ... par zwail1
Source avec Zip Source avec une capture CONVERSION PIXEL, MM, INCH, TWIPS, POINT... par yanb

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture UNITÉ DE SUPPORT VISTA par Bacterius
Source avec Zip Source avec une capture EFFET VITRE ET THUMBNAILS SOUS VISTA par Bacterius
Source avec Zip Source avec une capture ANIMATION AVEC PNG par Bacterius
Source avec Zip Source avec une capture AVATARS IN MADNESS par cantador
Source avec Zip UN TASKDIALOG EN TROIS CLICKS par chramade

Commentaires et avis

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.

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 :)

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

whoua je suis soufflé =) 10/10

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

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

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!)

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)

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;

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 ^^

Commentaire de Francky23012301 le 22/08/2006 16:49:43

Salut,

Bon travail Forman : vraiment bluffant.

Code : nickel

10/10.

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

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!

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   :-(

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)

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

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

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 ^^

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

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!

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 ;-)

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.

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.

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.

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.

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.

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

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 ;-)

Commentaire de flo160fr le 27/12/2006 10:54:14

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

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

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

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.

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

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;

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

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?

Commentaire de hackeur13 le 10/06/2007 00:41:28

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

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?

Commentaire de hackeur13 le 10/06/2007 01:26:00

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

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.

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.

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

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!

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!

Commentaire de getmeall le 14/08/2007 20:10:29

great

Commentaire de Forman le 15/08/2007 00:08:44

thanks!

Commentaire de Rudy3212 le 15/08/2007 13:27:57

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

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

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

Commentaire de aminedelphi le 16/07/2008 02:44:06

very very Gooooooooood

Commentaire de Forman le 16/07/2008 08:01:49

Thanks!

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.

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

Il fonctionne, j'ai delphi7 !

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"?

Commentaire de Alphaplus le 05/08/2009 16:39:52

bonjour, je vien de découvrir que l'on pouvait déformer les fenetre d'XP avec ce code source et ca m'interraisse mais le problem est que je n'arrive a m'en servir du tout.

je n'ai peut ètre pas trop ma place sur ce forum mais changer l'animation de mes fenètres m'interraisse beaucoup donc j'aimerais bien (si quelqu'un a le temps) que quelqu'un m'explique comment faire. (par exemple je ne sais pas ce que sont les uses et je n'arrive pas a effectuer une seul des action qui sont expliquées dans le tuto)

en esperant que quelqu'un ai le temps et l'envie de me répondre =) merci d'avance

Commentaire de Forman le 05/08/2009 16:59:45

Lorsque tu crées un nouveau projet, une nouvelle unité est crée automatiquement par Delphi (Typiquement, elle va s'appeler Unit1.pas). Au début de chaque unité, il y a d'abord la ligne:

unit Unit1;

Puis, juste en dessous:

uses
  SysUtils, Windows, Forms, etc;

C'est cette ligne qui est appelée la clause "uses" en langage Pascal. Si mes souvenirs sont bons, pour que les animations soient activées, il te faut rajouter AnimatorManager à la liste juste avant le point-virgule (et avec une virgule pour la séparer du reste juste avant bien sûr). Donc, ça deviens:

uses
  SysUtils, Windows, Forms, etc, AnimatorManager;

Théoriquement, il n'y a que ça à faire. Demande-moi si ça ne fonctionne pas.

Commentaire de JulioDelphi le 05/08/2009 17:25:14 administrateur CS

Salut alphaplus
Attention, ceci est un code source, ce code et donc ces animations ne fonctionnent que sur les applications que tu vas créer en delphi, ce n'est une sorte d'addon XP comme un TweakLike qui fera que toutes les fenetres XP seront ainsi animées.
Programmes-tu en delphi ?
a +

Commentaire de Forman le 05/08/2009 17:40:31

Ah oui j'aurais dû demander ça en premier :-*)

Commentaire de Alphaplus le 05/08/2009 23:46:57

merci de me répondre aussi vite ^^ en fait je n'ai pas de connaissances la dessus j'ai vu tout a l'heure qu'il fallait delfi alor j'ai pris delfi 6, je l'ai instalé mais maintenan je n'arrive a rien ... je ne veut pas trop vous déranger mais pourriez vous m'expliquer comment procéder en détail si c'est pas trop demander =) Merci

Commentaire de JulioDelphi le 06/08/2009 09:17:14 administrateur CS

Déjà c'est "Delphi" :p
Les animations ne seront présentes que sur les fenêtres que tu vas créer dans tes applications.
J'entends donc que tu vas créér des applications, des programmes, et ça avec Delphi.
Si tu ne programmes pas, delphi ne te servira à rien et ce code source non plus :/

Commentaire de Alphaplus le 06/08/2009 13:48:42

A ok autant pour moi j'avais pas compris sa bah tan pis alor ^^ merci quand mm de m'avoir aidé.

mais vous connaissez peut ètre un programme pour XP qui permet d'animer les fenètres lors de leur minimisation ou maximisation ect. si vous en connaissez dites moi le nom du ou des logiciels svp après j'avette de vous embeter ^^ merci

Commentaire de aminedelphi le 08/08/2009 23:13:09

WindowFX
http://www.stardock.com/products/windowfx/
tu peu avoir un aperçu rapide sur google Images

Commentaire de Alphaplus le 08/08/2009 23:16:06

merci ^^

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

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,264 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales