Problème avec DoubleBuffered
Re-Bonjour.
Dans une de mes applications, j'ai la simulation d'un compteur à tambours, obtenu par déplacement progressif (Timer interrupt) d'une image composée de la bande des chiffres derrière une fenêtre (la transparence gif fonctionne). Problème : si je n'active pas le double buffer, je vois des "flashs" ; et si je l'active, alors si je clique en dehors de la fiche pendant le déplacement de la "bande", toute l'application est réduite sur la barre des tâches, phénomène qui ne se produit pas avec le double buffer désactivé (et jamais sous Delphi ... :( )
J'ai bien une solution bancale : ne pas laisser le logiciel se mettre sur la barre des tâches en cas de perte de focus, mais tout de suite le quitter "proprement" ! Faute de mieux ... :?
Bug ?
Vous avez dit "bizarre" ?
Je ne vois pas ce qui pourrait être "planqué", car le phénomène disparaît si je désactive DoubleBuffered. A moins que ce ne soit encore une méchante interaction avec la dll externe que j'utilise et qui m'a aussi déjà joué quelques tours avec le MediaPlayer. Certes elle est open source (à condition d'avoir le courage de l'analyser ... en C ! ), mais toute l'usine à gaz Windows qu'il y a derrière ne l'est pas ...
:P
Problème maintenant résolu
En fait je lançais mon exe par double-clic dans l'explorateur et en cliquant à l'extérieur de ma fiche j'avais cliqué dans une partie "non vide" de ce même explorateur, sur la ligne d'un des fichiers ... Si je clique dans une partie vide (ou sur la barre des tâches) la perte de focus ne pose pas de problème. J'ai d'ailleurs réussi à reproduire le phénomène en désactivant le double buffer, celui-ci n'était donc pas en cause ...
En exploitation mes logiciels sont lancés à partir du Menu Démarrer et je ne risque donc pas le "clic qui tue". Comme quoi on arrive très vite à faire des erreurs d'interprétation ! Pour information : la dll "suspecte" sert en fait à piloter un circuit d'interface USB, elle est fournie par le fabricant.
Mais comme je suis quand même d'un naturel curieux (et vicieux), j'ai fait les essais suivants :
- Caractéristiques de la "Form" : centrée sur l'écran, pas de bordure, "FsStayOnTop".
- Avec n'importe lequel de mes programmes Lazarus, j'ai ce comportement bizarre de réduction sur la barre des tâches si je clique sur le nom d'un fichier quelconque dans l'explorateur.
- Avec le programme initial utilisant le "compteur" mais écrit en Delphi 6 (et utilisant le composant HID Jedi), je peux cliquer où je veux, même sur le nom du exe s'il est en surbrillance, quand il y a mouvement ou non ... rien ne se passe, la fenêtre reste en place, il y a seulement l'indication de la perte de focus ! Idem pour la version que j'avais écrite en utilisant la dll. Enfin, j'avais un moment utilisé Delphi 3 (avec la dll, le composant HID ne fonctionne qu'à partir de la version 4, et sans le compteur car il n'y a pas de Doublebuffer) : idem à Delphi 6. Comprenne qui pourra ... Mais pour moi il y a quand même "un problème" lié à Lazarus lui-même !
Désolé encore pour le dérangement ... car comme dit, EN PRATIQUE le problème ne se posera pas !