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

C++Builder Discussion :

Fenêtre AlwaysOnTop mais seulement dans l'appli


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Par défaut Fenêtre AlwaysOnTop mais seulement dans l'appli
    bonjour,

    dans mon appli, j'utilise une petite fenêtre flottante dont je souhaiterai qu'elle reste OnTop en permanence, mais seulement quand c'est mon appli qui à le focus.
    J'ai essayé avec la propriété fsStayOnTop mais dans ce cas, ma fenêtre est OnTop même si l'appli n'a plus le focus.

    Une idée ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    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 081
    Par défaut
    A Savoir qu'entre BCB6 et BCB2007, il y a déjà une différence de comportement de fsNormal

    J'ai une fenêtre en fsNormal dans mon application (BCB2007)
    Dans mon application, elle reste par dessus ma fenêtre principale, la fenêtre principale reste souvent en arrière par rapport aux sous-fenêtres SDI

    En BCB6, en fsNormal, la fenêtre principale pouvant s'afficher par dessus une autre fenêtre SDI de l'appli

    Ce comportement différent de la fenêtre principal qui reste derrière les fenêtres SDI est assez notable !

    Tu peux jouer avec BringToFront()
    la fenêtre n'a peut-être pas besoin de rester en permanence par dessus mais uniquement lors d'un affichage (je pense à une fenêtre de log ou de monitoring)

    fsStayOnTop, il me semble aussi qu'il y a quelques bizarries de comportement !
    Si tu réduis ton application, cela cache même les fsStayOnTop
    Si tu passe d'application via ALT+TAB ou en cliquant, effectivement les fsStayOnTop restent visible

    Dans TApplication.OnDeactivate, tu pourrais changer le FormStyle à la volée de ces fenêtres, le repasser en fsNormal ou alors forcer un Minimize de l'application
    Dans OnActivate, tu rétablis le fsStayOnTop
    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 éclairé
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Par défaut
    Pour info, j'utilise C++ Builder XE.
    J'ai testé ton astuce mais ça ne fonctionne pas.

    Plus précisément, ça fonctionne pour le OnActivate, mais pas sur OnDeactivate.
    Ce dernier n'a l'air de se produire qu'au minimize , ce qui ne me convient pas.
    Donc, au final, ma fenêtre flottante est bien affichée au dessus dans mon appli et si je bascule à une autre appli (par alt/tab ou clic dans la barre des tâches), elle reste affichée OnTop, comme si le OnDeactivate n'était jamais exécuté

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    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 081
    Par défaut
    Tu peux dans un Timer vérifie si l'application est Active, et cacher la fenêtre à ce moment là !

    Sinon, attention, il y a
    • TApplication::OnDeactivate - que l'on doit affecter manuellement (pas de menu de l'inspecteur), tu peux utiliser un TApplicationEvents::OnDeactivate qui lui est accessible via l'IDE
    • TForm::OnDeactivate, n'est-ce pas celui-là que tu as utilisé ?


    TApplication::OnDeactivate avec BCB2007 sur XP réagit :
    • Clic sur une autre appli
    • Alt+TAB
    • Barre des Taches
    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

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Par défaut
    non, non, j'ai bien utilisé Application->OnDeactivate.
    comme cette fonctionnalité n'est pas capitale et que j'ai d'autres priorités, je crois que je vais donc classer ça dans la rubrique TODO et je verrai ça plus tard.
    merci de ton aide.

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    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 081
    Par défaut
    Essaye via "TApplicationEvents::OnDeactivate", j'ai testé, cela fonctionne !
    Quel OS ?

    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
    17
    //---------------------------------------------------------------------------
    void __fastcall TBeginningCPPMainForm::ApplicationEvents1Deactivate(
          TObject *Sender)
    {
      for (int i = 0; i < Screen->FormCount; i++)
        if (Screen->Forms[i]->FormStyle == fsStayOnTop)
          Screen->Forms[i]->Hide();
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TBeginningCPPMainForm::ApplicationEvents1Activate(
          TObject *Sender)
    {
      for (int i = 0; i < Screen->FormCount; i++)
        if (Screen->Forms[i]->FormStyle == fsStayOnTop)
          Screen->Forms[i]->Show();
    }
    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. Intégrer une fenêtre MFC dans une appli Win32
    Par Ether64 dans le forum MFC
    Réponses: 1
    Dernier message: 02/10/2012, 15h36
  2. Réponses: 2
    Dernier message: 24/09/2008, 20h35
  3. attacher clip mais seulement dans une image précise
    Par italiasky dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 03/06/2008, 22h43
  4. Se servir du login/passwd window dans une appli
    Par ericb dans le forum Windows
    Réponses: 8
    Dernier message: 26/05/2004, 17h34

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