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 :

Comment savoir si un volet s'est caché ?


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut Comment savoir si un volet s'est caché ?
    Bonjour

    J'ai un petit composant, qui contient notamment un bouton. Si on clique sur ce bouton un popup est affiché. C'est une form non modale qui sert à faire une recherche.

    Je ferme ce popup quand il n'est plus actif. Quand mon composant est sur une forme classique, qu'on affiche le popup et qu'on ferme la form sans fermer d'abord le popup, ce dernier est quand même bien fermé. Donc pas de problème.

    Mais si ma forme mère est un volet, et que ce volet disparait simplement parce qu'on déplace la souris ailleurs, comment faire pour que le popup disparaisse aussi (s'il avait été affiché) ?

    Quel événement ou notification peut me permettre de provoquer la fermeture du popup ? Il faudrait bien sûr que le composant soit autonome, donc que je ne doive pas utiliser un événement de la forme mère.

    Merci pour vos suggestions éclairées.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Qu'est-ce qu'un volet ? un TTabSheet dans un TPageControl ?
    Un PopupMenu se ferme si l'on clic dessous où que l'on appuye sur Echap !
    Regarder si WM_MENUSELECT, te permets de détecter la sortie d'un Menu (je ne crois pas)
    Tu peux à la limite dans un Timer vérifier si la souris survol le Popup (un peu comme ce sujet : Problème avec TMenuItem.Hint en utilisant WindowFromPoint), si la classe n'est pas '#32768' ce que l'on ne survole pas le Popup et dans cas tu force la fermeture avec WM_CLOSE (je n'ai jamais essayé, en théorie ça devrait passer)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Par défaut
    Bonjour et merci !

    J'aurais dû préciser que j'appelle volet une forme liée à un TDockTabSet. Elle disparait notamment quand la souris clique ailleurs, mais ce n'est pas une fermeture (son événement OnClose n'est pas appelé, seulement OnHide)

    Le problème est de savoir si cette disparition génère un message qui pourrait être traité par le composant qui a été posé dessus.

    Par ailleurs, je ne parlais pas d'un popupmenu, mais d'une forme de type popup. Je crois ça n'a pas d'importance.

    Cordialement,
    Tintinux

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Tout est important !
    C'est l'erreur dans de nombreux sujets, on est noyé d'informations inutiles (ton premier sujet en est exemple) mais il manque le plus importants, les classes utilisées !
    C'est idiot, nous ne sommes pas devins, même si je lis très bien dans la cervoise et dans le sanglier ...

    Il y a des milliers de composants, plusieurs peuvent permettent des comportement similaires, on ne peut pas deviner, tu t'embêtes à écrire un sujet tout en français (volets fallait le trouver se terme !) sans préciser les composants (genre du un fichier audio mais lequel midi, wave, mp3 ..., c'est se compliquer la vie pour rien)

    Du coup, ma réponse ne sert à rien, j'ai perdu du temps, tu as perdu du temps !

    TDockTabSet, je ne connais pas, on dirait que c'est une variante du TTabControl, que j'ai utilisé aussi et pour ancrer des TForm, j'utilise la propriété parent

    Pour la forme de type Popup, encore une fois, tu as sous-estimé l'importance, tout ma réponse était basé sur le handle d'un Popup dans Windows, si tu utilises un TForm, mets donc un Timer qui ferme la fiche, avec ControlAtPos tu pourras voir si ce qu'il y a en dessus, si cela ne correspond pas à l'objet ayant demandé le Popup, tu ferme le Popup ...

    Tu pourrais aussi jouer avec OnEnter, une fois avoir survolé le speudo-Popup une première fois, tu lance TrackMouseEvent qui te permettra de récuperer un évènement LEAVE ou tu mes un boolean à true qui tu testes dans le OnLeave et tu fermes la fenêtre

    Utilise le TForm.OnHide ou TDockTabSet.OnChange qui appelerait une fonction de ton composant pour fermer la fiche avec Close ou Hide

    Plein de solution, la limite c'est juste l'imagination !
    Mais, bon depuis hier 11h44 et ce matin 08h47, tu as du trouver tout seul la réponse, j'ai fait un truc similaire, un Menu avec l'aspect d'un Balloon Hint HTML qui fonctionne même sur les control disabled. en deux petites journées c'était fait !
    par exemple, un bouton sur ce Menu permettait d'activer les disabled à la volée, ou des les désactiver, des les vider, de reprendre une valeur de l'historique (tout était mémorisé pour la traçabilité les données) il y avait un workflow assez complexe lié au métier de laboratoire.
    Evidemment, j'avais mis en place un système de fermeture automatique
    - tant que l'on est pas entrer dedans, il reste ouvert, si l'on le survole une première fois puis l'on le quitte sa surface, il se ferme,
    - un bouton permettait aussi de le fermer (un bouton orange comme sur les ballons hint)
    - le survol d'un autre control que celui à l'origine du Hint provoquait la fermeture et parfois l'ouverture d'un autre Hint ...

    Tient, je t'ai noyé de réponses et d'histoires inutiles !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Comment savoir si un fichier/répertoire est en lecture seule
    Par Guigui_ dans le forum Général Python
    Réponses: 3
    Dernier message: 29/12/2004, 16h05
  2. Réponses: 9
    Dernier message: 08/12/2004, 14h36
  3. Comment savoir si une impression s'est bien déroulé?
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/11/2003, 20h49
  4. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12
  5. Réponses: 4
    Dernier message: 10/09/2002, 17h09

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