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 :

détecter click hors form ouverte modale


Sujet :

Delphi

  1. #1
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut détecter click hors form ouverte modale
    bonjour

    je voudrais simuler le comportement d'un popup avec une form ouverte en modal (via ShowModal)

    il faudrait en particulier que je puisse détecter, depuis la form ouverte en modal, si l'user a cliqué en dehors de celle ci

    comme la form est en modal je suppose que tous les messages (par ex en click sur une autre form, voire une autre appli) lui sont à un moment ou un autre redirigés, mais je trouve pas comment le récupérer

    merci de votre aide

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut

    moi je n'afficherais pas la fenêtre en showmodal.
    j'utiliserais plutôt une form sans bordure, et en stayOnTop. tu as des évènement pour détecter lorsque la form perd le focus (dsl je ne m'en souviens pas pour le moment et j'ai pas l'ide devant moi) et avec le composant TApplicationEvents, tu peux détecter lorsque l'application perd le focus.
    avec ca tu devrais pouvoir avancer.

  3. #3
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    moi je n'afficherais pas la fenêtre en showmodal
    dans ce cas j'ai absolument besoin du modal, l'useur ne doit pas pouvoir faire autre chose avant d'avoir fermé la fiche

    TApplicationEvents
    j'avais essayé d'en poser un sur ma form, curieusement il ne reçoit aucun message souris lorsqu'on clique alleurs que sur la form en modal ?!

  4. #4
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut
    il faudrait en particulier que je puisse détecter, depuis la form ouverte en modal, si l'user a cliqué en dehors de celle ci
    est vraiment possible pour une fenêtre en Modal ? je me le demande.
    pourrais tu préciser d'avantage ce que tu souhaites obtenir ?

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Variante pour capturer des événements "souris" en-dehors d'une fiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    type oSouris = Object bG,bD : integer;
                          p     : tPoint;
                          H     : HWnd;       end;
     
      var souris   : oSouris;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin     souris.H:=GetCapture;
              souris.bG:=getAsyncKeyState(VK_LButton);
              souris.bD:=getAsyncKeyState(VK_RButton);
              getCursorPos(souris.p); { y = souris.p.y.x = souris.p.x }
    end;
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    jlf
    jlf est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Par défaut
    est vraiment possible pour une fenêtre en Modal ? je me le demande.
    pourrais tu préciser d'avantage ce que tu souhaites obtenir ?
    simplement fermer la fenêtre modale lorsque l'user clique ailleurs

    Variante pour capturer des événements "souris" en-dehors d'une fiche :
    souris.bG:=getAsyncKeyState(VK_LButton);
    merci je ne connaissais pas cette fonction

    ça pourrait faire l'affaire mais l'obligation d'interroger régulièrement via un timer m'ennuie un peu
    je me demande bien comment sont dispatchés les messages hors fiche modale ...

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    simplement fermer la fenêtre modale lorsque l'user clique ailleurs
    souris.bG:=getAsyncKeyState(VK_LButton); ... ça pourrait faire l'affaire mais l'obligation d'interroger régulièrement via un timer m'ennuie un peu
    Bof! Avec par exemple un Timer1.intervalle:=250 qui est un intervalle ni trop serré ni trop large ceci ne devrait pas ralentir l'application.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Citation Envoyé par jlf
    dans ce cas j'ai absolument besoin du modal, l'useur ne doit pas pouvoir faire autre chose avant d'avoir fermé la fiche
    Tu peux simuler le comportement modal avec une boucle et un boolean pour l'affichage et un pour le résultat.

    il existe déjà des topics qui en parle. L'idéee est d'avoir une fiche en stayontop avec une propriété boolean pour gérer son ouverture.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
      MaFenetrePasModaleMaisQuiFaitMineDeLEtre := 
        TMaFenetrePasModaleMaisQuiFaitMineDeLEtre.create(nil);
      try
        MaFenetrePasModaleMaisQuiFaitMineDeLEtre.Affichage := true;
         // en attente de fermeture (simulation du principe modal)
        while MaFenetrePasModaleMaisQuiFaitMineDeLEtre.Affichage do
          application.processMessages;
     
        if MaFenetrePasModaleMaisQuiFaitMineDeLEtre.Resultat then
            ... 
        else
            ...
      finally
        MaFenetrePasModaleMaisQuiFaitMineDeLEtre.Free;
      end;
    Evidement cela implique aussi de gérer les évenement hors "MaFenetrePasModaleMaisQuiFaitMineDeLEtre".

    C'est vous qui voyez !

    a+

Discussions similaires

  1. Détecter clic de souris hors form
    Par MrThorr dans le forum VB.NET
    Réponses: 20
    Dernier message: 01/03/2009, 19h28
  2. [Form et popup] target d'un form ouvert dans une popup
    Par Flobel dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 19/01/2007, 21h05
  3. form fenetre modale : set focus sur Etat ??:!
    Par djefff75 dans le forum IHM
    Réponses: 15
    Dernier message: 10/02/2006, 03h28
  4. Détecter si la form est regardé
    Par Zenar dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 30/10/2005, 17h06
  5. Détecter click sur le bouton de l'application dans Taskbar
    Par bob2553 dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 22/08/2005, 22h34

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