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

Composants VCL Delphi Discussion :

Rx Controls Gif animés


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2002
    Messages : 86
    Points : 46
    Points
    46
    Par défaut Rx Controls Gif animés
    voila mon probleme, j'ai mis un composant RxGIFAnimator sur une feuille.
    Ce que je voudrais faire c'est que lorsque je passe dessus, il devienne invisible s'il etait visible auparavant et inversement.
    J'ai donc mis le code suivant dans l'evenement onmousemove du RxGIFAnimator:

    if Form1.RxGIFAnimator1.visible=false then
    Form1.RxGIFAnimator1.visible:=true
    else
    Form1.RxGIFAnimator1.visible:=false;
    end;

    Le probleme est que si je lance l'appli avec la propriete visible=true au depart, mon truc fonctionne bien, quand je passe dessus le composant deviens invisible, par contre dans le sens inverse il ne reapparait pas!!!
    et je vois pas pourquoi.

    Si quelqu'un a deja eu le probleme ou connait la solution, merci.
    Ma version de Delphi: Delphi6 Perso Fr.
    Mon systeme d'exploitation: Windows XP
    Mon niveau de prog sous delphi: euh...ca commence a aller .

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    bonjour,

    C'est tout à fait normal, ton composant RxGifAnimator ne reçoit plus les messages de la souris puisqu'il n'est plus là (invisible)

    Tu dois pouvoir résoudre ton problème en mettant la gestion du cas "invisible" dans le onmousemove du controle contenant le rxgifanimator (ton Tform ou un panel probablement...)
    Dans mousemove, il te suffit de vérifier les coordonnées de la souris pour savoir si tu est au dessus du gif.

    si tu ne fais pas attention, tu risques d'avoir le gif qui clignote (mousemove qui fait réapparaître juste après mousemove qui fait disparaître, etc.)


    devYan.

  3. #3
    Membre confirmé
    Avatar de nouanda
    Homme Profil pro
    Hobbyist
    Inscrit en
    Mai 2002
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Hobbyist

    Informations forums :
    Inscription : Mai 2002
    Messages : 246
    Points : 627
    Points
    627
    Par défaut
    tu peux aussi rajouter un composant tel un Label par dessus, c'est transparent, et tu le dessines de la meme taille que ton gif.
    " Entre le Savoir et le Pouvoir, il y a le Vouloir "

    Desole pour les accents, je suis en QWERTY...

  4. #4
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2002
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    ok, mais je trouve ca bizarre, invisible, pour moi c 'est pas disparu....l'homme invisible il est toujours present

    Sinon, je crois que je vais utiliser la deuxieme solution, certainement moins elegante mais tellement plus simple


    merci de vos aides


    a+
    toufou
    Ma version de Delphi: Delphi6 Perso Fr.
    Mon systeme d'exploitation: Windows XP
    Mon niveau de prog sous delphi: euh...ca commence a aller .

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par toufou
    ok, mais je trouve ca bizarre, invisible, pour moi c 'est pas disparu....l'homme invisible il est toujours present

    Sinon, je crois que je vais utiliser la deuxieme solution, certainement moins elegante mais tellement plus simple


    merci de vos aides


    a+
    toufou
    C'est un fonctionnement normal et tout à fait logique (à mon avis)
    Prenons un exemple :

    Lorsque tu as la fenêtre d'un programme à l'écran, si tu réduit cette fenêtre, elle n'est plus visible (elle est présente et si tu affiche les coordonnées de la fenêtre dans un showmessage, tu obtiendra la position qu'elle avait avant de disparaître) et tu ne peux pas cliquer dessus (puisque tu ne la vois pas )


    devYan.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2002
    Messages : 86
    Points : 46
    Points
    46
    Par défaut
    tu as raison, mais ca ne me semblait pas logique...

    en tout cas, merci d'avoir repondu
    Ma version de Delphi: Delphi6 Perso Fr.
    Mon systeme d'exploitation: Windows XP
    Mon niveau de prog sous delphi: euh...ca commence a aller .

  7. #7
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 17
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par nounanda
    tu peux aussi rajouter un composant tel un Label par dessus, c'est transparent, et tu le dessines de la meme taille que ton gif.
    Citation Envoyé par Nono40
    Il vaut mieux utiliser les message CM_MOUSEENTER et CM_MOUSELEAVE créés par la VCL.

    Supprime le code que tu as mis dans OnMouveMove.

    Ajoute dans la partie Private de la fiche les deux déclarations suivantes :
    private
    { Déclarations privées }
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;

    Puis ajoute le code de traitement :
    procedure TForm1.CMMouseEnter(var Msg: TMessage);
    Var Compo:TComponent;
    begin
    Compo:=TComponent(Msg.LParam);
    If(Compo=Image1)Or(Compo=Image2)
    Then Begin
    Image1.Visible:=False;
    Image2.Visible:=True;
    End;
    end;

    procedure TForm1.CMMouseLeave(var Msg: TMessage);
    Var Compo:TComponent;
    begin
    Compo:=TComponent(Msg.LParam);
    If(Compo=Image1)Or(Compo=Image2)
    Then Begin
    Image1.Visible:=True;
    Image2.Visible:=False;
    End;
    end;

    Petite explication : le comosant TControl défini une gestion pour les message MouseEnter et MouseLeave de Windows. Le gestionnaire par défaut de TControl ne fait que retourner le message au parent en plaçant dans le paramètre LPARAM l'adresse de l'objet d'origine ayant reçu l'événement.

    Mais attention : ceci ne fonctionne malheureusement qui si Form1 est le parent de Image1 et Image2. Les deux images doivent donc être placées sur la fiche et non sur un GroupBox ou autre composant pouvant servir de récepteur.
    A essayer.

    Bye.
    Cordialement, Gysmo

    [size=9]> Respectez les régles du forum.
    > Consultez le guide du developpeur Delphi devant un problème.
    > Participez à la F.A.Q Delphi !

Discussions similaires

  1. Controler l'animation d'un .gif
    Par SGJ dans le forum 2D
    Réponses: 9
    Dernier message: 03/01/2006, 19h39
  2. [FLASH MX 2004] Probleme de creation de GIF anime
    Par hedgehog dans le forum Flash
    Réponses: 5
    Dernier message: 13/03/2005, 19h07
  3. [MFC]afficher un gif animé
    Par Blo0d4x3 dans le forum MFC
    Réponses: 26
    Dernier message: 04/10/2004, 15h51
  4. Controler une anim Flash
    Par Nico-ganja dans le forum Flash
    Réponses: 2
    Dernier message: 04/03/2003, 00h37

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