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

Langage Delphi Discussion :

Afficher une fenêtre "dynamique"


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut Afficher une fenêtre "dynamique"
    Bonjour,
    Comment pourrais-je faire en sorte d'afficher une petite fenêtre quand le curseur rentre dans une zone et quand il la quitte, et que cette fenêtre bouge pendant que le curseur bouge dans la zone voulue.

    J'ai essayé de travailler avec OnMouseEntrer et Leave (avec Show), mais j'y arrive pas.
    Vous n'auriez pas une piste ?
    (Je sais que c'est peu con comme situation, mais

    Merci.

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 875
    Points : 11 366
    Points
    11 366
    Billets dans le blog
    6
    Par défaut
    1) montrer la fenêtre ou la créer dans le OnMouseEnter (la mettre en fsStayOnTop ?)
    2) la déplacer dans le OnMouseMove
    3) cacher ou libérer la fenêtre dans le OnMouseLeave

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Salut,

    Mais s'il ne s'agit que de quelques lignes (sans picture), le principe du hint ne suffirait-il pas ?

    @+

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Salut!
    Non, Hint ne répond pas à mes besoins dans ce cas,
    Je vais essayer de peaufiner quelque chose, sinon je post le code !

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Bon,
    Je viens de tester un truc, mais ça marche toujours pas.
    Dans les sections, OnMouseEnter et OnMouseLeave (sur un TPanel) , tout va bien, voici les codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //OnMouseEnter
    FormPopUp.Show;
    FormPopUp.FormStyle:=fsStayOnTop;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //OnMouseLeave
    FormPopUp.Hide
    Par contre j'ai un souci avec le déplacement (OnMouseMove) qui fait que la fenêtre (principale ou l'autre ???) scintille et n'apparait pas quand je met ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      FormPopUp.Left:=Mouse.CursorPos.X;
      FormPopUp.Top:=Mouse.CursorPos.Y;
    Par contre, si je met seulement l'une des ligne, tout marche bien, mais sur un seul côté seulement

    Vous auriez une idée sur pourquoi les associer provoque un souci ?

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 875
    Points : 11 366
    Points
    11 366
    Billets dans le blog
    6
    Par défaut
    pê peux-tu essayer de l'encadrer par un BeginUpdate/EndUpdate pour que ça ne rafraichisse qu'une fois ? mais il n'y en a pê pas pour une fiche !

    et utiliser DoubleBuffered pour diminuer le scintillement.

  7. #7
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Ben j'ai testé et c'est ok sans scintillement, ni rien

    J'ai placé ça au dessus d'un jvRichEdit (qui possède la méthode MouseLeave).

    @+

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 761
    Points : 13 368
    Points
    13 368
    Par défaut
    A chaque fois que tu bouges ta souris et qu'elle passe sur la fenêtre OnTop, l'événement OnMouseLeave est appelé puisque le curseur n'est plus sur le contrôle correspondant. La fenêtre OnTop est donc masquée. Dès que celle-ci disparait, ben OnMouseEnter survient puisque la souris se trouve à nouveau sur le contrôle. A l'arrivée, scintillement .

    Tu constateras ce phénomène uniquement si tu déplaces ta souris à droite en bas .

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Merci pour vos réponses.
    Effectivement, la souris bouge et affiche la fenêtre alors le curseur se "focalise" sur la fenêtre affiché, donc OnMouseLeave survient et ainsi de suite, par contre (je crois) que pas seulement à en bas à droite !

    Simple solution, éloigner un petit peu la fenêtre du curseur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FormPopUp.Left:=Mouse.CursorPos.X+4;
    FormPopUp.Top:=Mouse.CursorPos.Y+4;
    Et le tour est joué.

    Autre question qui survient, puis ne pas perdre le focus sur la fenêtre appelante ! ça crée un espèce de mini-scintillement ?!

  10. #10
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Pour cette raison que je ne pigeais pôô pourquoi moi seul n'obtenais pas de scintillement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Form2.Left := Mouse.CursorPos.X + 20;
      Form2.Top  := Mouse.CursorPos.Y + 20;

  11. #11
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    Pour cette raison que je ne pigeais pôô pourquoi moi seul n'obtenais pas de scintillement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Form2.Left := Mouse.CursorPos.X + 20;
      Form2.Top  := Mouse.CursorPos.Y + 20;


    Exactement ! Une idée sur comment éviter de perdre le focus de la première fenêtre au profit de la deuxième ?

  12. #12
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Une idée sur comment éviter de perdre le focus de la première fenêtre au profit de la deuxième ?
    J'avais bien lu... Mais n'ayant pas eu cette observation je ne dis rien.

    Mais ma manip consistait a placer le code en question au dessus d'un JVRichEdit couplé à un simple Panel ne possédant pas la méthode OnMouseLeave.

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 761
    Points : 13 368
    Points
    13 368
    Par défaut
    Puisque le Top/Left de la fenêtre OnTop est positionné sous le pointeur, le scintillement apparaît forcement lors d'un déplacement souris: à droite, en bas ou en bas/à droite .

    Ajouter un offset est une solution si le contrôle est relativement petit ou si les déplacements sont faibles (inférieur aux offsets).

    Le mieux serait de placer un hook et d'intercepter les mouvements avant qu'ils ne soient envoyés aux fiches. Un exemple ici.

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Merci pour le lien Andnotor, finalement, le problème est résolu.

    Et pour la fenêtre qui perd le focus, j'ai finalement opté à afficher un TPanel au lieu de TForm, d'ailleurs c'est mieux, solution plus simple, mais bon .


    Merci !

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

Discussions similaires

  1. Afficher une Fenêtre MDI à partir d'une DLL
    Par FredericB dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/12/2005, 16h58
  2. Afficher une fenêtre d'informations qui donne l'impression de se détâcher
    Par jean_bobi dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 25/09/2005, 15h31
  3. Réponses: 1
    Dernier message: 16/02/2005, 12h04

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