IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

gestion des contours des png [Archives]


Sujet :

Delphi

  1. #41
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Bon, c'est impossible, je t'explique pourquoi ça ne peut pas marcher :
    Reprend donc la démo alphaform2, c'est de ce code que je devais repartir...
    Lance notepad par exemple et place dessus notre form. Jusque là aucun problème, mais maintenant, tout en conservant alphaform au 1er plan (il a donc en mémoire la capture du notepad), tu vas redimensionner notepad de haut en bas (tu descend la barre de titre de notepad). Notre form va tout de suite se mettre derrière notepad (normal puisque notepad récupère le focus), et lorsque tu descendras assez bas pour revoir apparaître notre form, tu t'apercevras que l'arrière-plan n'est pas bon, c'est encore la capture de notepad alors qu'il n'est plus derrière notre form...

    En résumé, je ne pense pas pouvoir capturer ce qui est derrière notre form à partir du moment où notre form n'est plus au 1er plan. C'est pour cette raison que l'utilisation de UpdateLayeredWindow devait apporter la solution puisque l'arrière-plan sera toujours le bon. Et lorsque notre form est active, je la passe en mode "control"... Mais même cette solution ne va pas être facile à réaliser. Mais bon, faut pas baisser les bras maintenant, on a déjà bien progressé, je pense qu'il faut continuer à chercher.
    De retour parmis vous après 10 ans!!

  2. #42
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Bizarre qu'il existe pas un code genre "hook" qui puisse déterminer si la zone de l'écran où se trouve notre fenêtre est en train d'être dessinée par une autre fenêtre ou pas

    Sinon j'ai mis les liens directs pour étudier le code C+

  3. #43
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Le souci vient du fait que je ne sais pas comment faire pour capturer l'arrière-plan du programme lorsque que celui-ci se trouve sur une fenêtre et est "caché" automatiquement par cette fenêtre qui prend la main.

    La seule solution que je possède est d'utiliser UpdateLayeredWindow...
    De retour parmis vous après 10 ans!!

  4. #44
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Aïe, exact, on touche la limite des captures...


    Mais pourtant quand il n'y a plus que alphaform et que donc windows lui redonne le focus, il y a bien une nouvelle capture de ce qui se trouve derrière alphaform puisque si on le déplace ...le dessous est correct ! comment la capture peut prendre en compte ce qui est derrière (à l'heure actuelle avec le code qu'on a) ?

  5. #45
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je ne sais pas. En tous les cas, je suis sûr d'une chose, c'est que l'on ne peut pas se permettre de capturer en boucle pendant tout le temps où l'arrière-plan de notre programme est susseptible de changer, sachant surtout qu'il faut rendre le programme invisible le temps de capturer ce qu'il ya derrière ! J'espèrais trouver une méthode pour obtenir l'arrière-plan d'une fenêtre sans devoir la rendre invisible...

    Maintenant, avec UpdateLayeredWindow, on évite de devoir capturer l'arrière-plan. Il faut donc transformer le programme en une seule image le temps que le programme reprenne le focus. C'est l'unique solution que je possède pour corriger ce problème. Mais elle n'est pas évidente à mettre en oeuvre...

    ps: Je n'ai pas réussi à télécharger les démos que tu as donné plus haut, le login 9onmail n'existe pas j'ai l'impression.
    De retour parmis vous après 10 ans!!

  6. #46
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Au temps pour moi (...)

  7. #47
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Bon voilà le programme terminé. J'ai mis pas mal de temps avant d'arriver à le mettre au point. Je n'ai pas remarqué de bugs à part un petit scintillement de des pixels transparents lorsque le programme repasse en mode "controls". Je vais voir si j'arrive à le supprimer. En attendant, si tu trouves un bug, avertis-moi, à+

    http://sub0.developpez.com/delphi/alphafusion2.zip
    De retour parmis vous après 10 ans!!

  8. #48
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    BRAVO !

    cela me semble parfait. Il reste un freeze quand une application fsStayOnTop est utilisée en même temps mais c'est acceptable, ça arrive avec des logiciels de grand nom (Adobe, Corel, etc...)

    Donc, je vois rien à redire pour l'instant, je vais tester ça cet aprèm

    Quel boulot !!

    ça doit te soulager les neuronnes d'avoir réussi, nan ?

    Bon je vais essayer d'adapter le soft pour voir s'il répond bien mais à priori c'est tellement propre comme résultat que je crois que ça va être impèc...

  9. #49
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Alors visiblement les contrôles sont effacés quand on reproduit le test d'une fenêtre qui passe devant alphafusion. puis quelques milllisecondes après ils sont redessinés avec le fond du dessin puis quand on clique sur la fiche ils redeviennent normaux...

    Je continue de tester

    En fait si on lance alphafusion alors que 2 fenêtres étaient derrière et qu'on en réduit une... on retrouve le bug d'affichage

  10. #50
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Salut,

    à la recherche d'une réponse sur le forum je suis tombé sur votre post que j'ai suivi et trouvé très intéressant. Mes félicitations à tous les 2 et notamment à Sub0 quand à son travail.
    Cependant, si je peut me permettre, j'ai trouvé un petit bug.
    Je vais essayer d'expliquer ça du mieux possible. Sur mon PC j'ouvre 2 fenêtres (l'une après l'autre) qui sont plus grande que l'application Alphafusion2, puis je lance l'application Alphafusion2, je mets la fenetre de l'application Alphafusion2 devant les 2 fenêtres. Et je réduit ensuite celle qui se trouve dessous. Et là le contour n'est pas bon autour de la fenêtre alphafusion car il s'agit du contour de la fenêtre réduite. Alors qu'en fait il y a la 2ème fenêtre que j'avais ouvert au début. Cela fonctionne très bien par contre si j'ai une seule fenêtre en dessous, que je la réduit et que j'ai le bureau windows ensuite. J'espère avoir été assez clair, sinon n'hésitez pas à me poser des questions.
    Voila, c'est un petit détail, et cela n'enlève en rien la qualité du travail que vous avez fait. Mais je voulais juste l'indiquer car je sais que Sub0 aime bien aller jusq'au bout des choses.
    Bon courage et bon dev.

  11. #51
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Je vois que DarkChamallo a été plus rapide que moi.

  12. #52
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Bien vu! Alors effectivement, ya un bug là. J'ai ajouté un MakeBlend dans l'évènement OnActivate et il semblerait que se soit en partie corrigé... Je vais continuer à chercher.
    De retour parmis vous après 10 ans!!

  13. #53
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    MDR, à force de trafiquer j'ai un alphafusion qui.. rentre en fusion nucléaire la fiche s'inverse, se dédouble et fait un effet néon , lol, je crois que je vais recommencer avec le code propre

  14. #54
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Petite précision : outre le bug d'affichage de la fenêtre de derrière qui reste, en fait les contrôles disparaissent puis sont mal redessinés s'ils sont en dehors de l'image Opaque visible.

    Exemple : mettre le bouton exit dans la partie noire de l'image (juste en dessous de la fiche)

  15. #55
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    En rajoutant un "Button1.Refresh;" à la fin de la procédure RecomposeForm cela suffit dans 80% des cas à ce que le bouton en dehors du dessin soit redessiné...

  16. #56
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    J'ai ajouté une nouvelle fonction qui modifie le masque de transparence afin de conserver les controls; Tout semble fonctionner excepté avec une fenêtre stayontop où les controls disparaissent encore. Je trouve finalement que ça fait qu'en même beaucoups de code juste pour avoir une form avec un masque de transparence ! J'espère un jour trouver plus simple et plus efficace... Pour télécharger le code, c'est le même lien que précédemment, à+
    De retour parmis vous après 10 ans!!

  17. #57
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je serais maintenant tenté d'essayer d'obtenir cette form avec un autre procédé pour comparer les performances : Dessiner le PNG sur une form indépendante et les controls sur une autre form transparente...
    De retour parmis vous après 10 ans!!

  18. #58
    Membre du Club Avatar de DarkChamallo
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 113
    Points : 56
    Points
    56
    Par défaut
    Dans l'histoire ce qui nous manquait c'est de savoir quand notre alphabidule devait être redessiné pour toujours être parfait quelle que soit les déplacements ou modifications de fenêtres à l'écran.

    Or on sait très bien que notre alphatruc, tout comme chaque application, est bombardée en permanence par les messages windows (hook ?) alors comment se fait-il qu'avec un simple ApplicationEvents on ne puisse pas faire un code du type :

    If(applicationevents.msg = repaintwindow) then RecomposeForm;

    ?

    Bon, je n'ai pas la patience de furter d'avantage ce soir... mon oreiller m'appelle, bonne nuit !

  19. #59
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Si j'ai fait comme ça, c'est que je n'ai pas trouvé mieux (pour l'instant en tous les cas). En général, lorsque je cherche à réaliser qq chose, je commence toujours par essayer d'utiliser la méthode la plus évidente, mais ça ne marche pas forcément comme on le voudrait.

    L'évènement qui t'intéresse est WM_ERASEBKGND. Tu repeindras la fenêtre à chaque fois que tu changeras quelque chose à l'écran...
    à+
    De retour parmis vous après 10 ans!!

  20. #60
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par Sub0
    Dessiner le PNG sur une form indépendante et les controls sur une autre form transparente...
    Oulala, j'aurai peut-être du essayer cette méthode avant, tanpis.
    Donc voilà, c'est carrément plus simple, moins de code, donc moins de bug. J'en ai profité pour ajouter le code pour le chargement d'image PNG. Le seul problème est qu'avec une config pas très puissante, le déplacement saccade. La solution serait de fusionner les forms juste avant le déplacement puis de restaurer après, mais bon, est-ce que ça en vaut la peine ?

    http://sub0.developpez.com/delphi/form2alpha.zip
    De retour parmis vous après 10 ans!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GRAPH] [GCHART] Couleur des contours des barres d'histogramme
    Par mohamed_ dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 02/09/2011, 10h18
  2. Réponses: 3
    Dernier message: 30/06/2009, 19h16
  3. Réponses: 2
    Dernier message: 23/01/2008, 23h56
  4. Réponses: 19
    Dernier message: 20/12/2006, 10h15
  5. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo