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 :

Empêcher les Form secondaires de minimiser lorsque la MainForm est minimisée


Sujet :

C++Builder

  1. #1
    tlt
    tlt est déconnecté
    Membre averti Avatar de tlt
    Homme Profil pro
    Programmeur
    Inscrit en
    Juillet 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Programmeur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 202
    Points : 412
    Points
    412
    Par défaut Empêcher les Form secondaires de minimiser lorsque la MainForm est minimisée
    Bonjour

    J'ai un projet avec plusieurs Form en auto-create dont une est la MainForm.
    Comment empêcher les Form secondaires de minimiser lorsque la MainForm est minimisée?
    Ou bien dois-je les créer autrement (dynamiquement avec d'autres parametres) ?
    J'ai déjà essayé de les créer dynamiquement mais c'est toujours la même réaction: quand la MainForm est minimisée, toutes les autres fenêtres sont minimisés.

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 20
    Points : 47
    Points
    47
    Par défaut
    Hello. Crée-la non-modale

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Bonjour,

    Une solution pourrait être aussi de faire une "vraie fausse" fenêtre principale : après lancement de l'appli et activation de la MainForm vous faites apparaître une nouvelle Form qui sera utilisée comme fenêtre principale dans la logique de votre appli (sans la déclarer comme telle) et vous cachez la MainForm system par un Hide().

    Yves

  4. #4
    tlt
    tlt est déconnecté
    Membre averti Avatar de tlt
    Homme Profil pro
    Programmeur
    Inscrit en
    Juillet 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Programmeur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 202
    Points : 412
    Points
    412
    Par défaut
    Citation Envoyé par Kianii Voir le message
    Hello. Crée-la non-modale
    La MainForm? Elle n'est pas modale

    Une solution pourrait être aussi de faire une "vraie fausse" fenêtre principale : après lancement de l'appli et activation de la MainForm vous faites apparaître une nouvelle Form qui sera utilisée comme fenêtre principale dans la logique de votre appli (sans la déclarer comme telle) et vous cachez la MainForm system par un Hide().
    Je vais essayer ça si c'est possible

  5. #5
    tlt
    tlt est déconnecté
    Membre averti Avatar de tlt
    Homme Profil pro
    Programmeur
    Inscrit en
    Juillet 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Programmeur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 202
    Points : 412
    Points
    412
    Par défaut
    Après une petite nuit blanche, j'ai trouvé une manière élégante de le faire:

    • lorsque'on veut minimiser la MainForm, on ne doit ni appeler Hide() , ni Application->Minimize(). On doit plûtot mettre la propriété Visible de la MainForm à false et le Windowstate à wsMinimized. Les autres fenêtres resteront visible et ne seront pas minimisées avec la MainForm.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Visible = false;
      WindowState = wsMinimized;
      J'en ai profité pour utiliser un TTrayIcon car une fois la MainForm invisible, il n'y a plus de moyen de la restaurer puisqu'elle est invisible, à part depuis les autres fenetres biensûr. Je contrôle la restauration depuis le TTrayIcon.


    • Lorsqu'on veut réduire la MainForm (un TMainWindow pour mon cas) , on n'execute pas la procédure normale de réduction de fenêtre , on doit changer le comportement de la fenêtre.
      On intercepte le message système WM_SYSCOMMAND , on teste si le WPARAM est à SC_MINIMIZE. On redéfinit le comportement du bouton réduire grace à un BEGIN_MESSAGE_MAP et en mettant le TMessage.result à 0 pour dire qu'on a réçu a commande mais qu'on ne l'execute pas. C'est à ce moment là aussi qu'on met la propriété Visible à false et le Windowstate à wsMinimized

      En gros,
      Ajouter ce code dans l'en-tête de MainForm
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      ...
      private:	// User declarations
          void __fastcall WMSysCommand(TMessage &Msg);
          BEGIN_MESSAGE_MAP
      		MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMSysCommand)
      	END_MESSAGE_MAP(TForm)
      ...
      Déclarer le fonctionnement du code dans la source de MainForm
      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
      18
      19
      20
      ...
      void __fastcall TMainWindow::WMSysCommand(TMessage &Msg)
      {
          unsigned int const sys_code = Msg.WParam & 0xFFF0;
          switch (sys_code)
          {
              case SC_MINIMIZE:
              {
       
      			Msg.Result = 0;
      			Visible = false;
      			WindowState = wsMinimized;
      			return;
       
                  break;
              }       
          }
          TForm::Dispatch(&Msg);
      }
      ...

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Merci pour ce retour tlt.
    Je suppose que vous êtes là aussi sous VCL.
    Sous FMX, ayant été déjà confronté au même problème, je préfère le première méthode, plus simple.
    Perso, par principe je n'ai recours à l'interception d’événements qu'en dernier recours.
    Mais c'est une belle astuce à retenir en tout cas.

    Yves

  7. #7
    tlt
    tlt est déconnecté
    Membre averti Avatar de tlt
    Homme Profil pro
    Programmeur
    Inscrit en
    Juillet 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Programmeur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 202
    Points : 412
    Points
    412
    Par défaut
    Oui, je suis majoritairement sous VCL. Je ne me suis pas encore trop penché sur FMX mais je vais tenter aussi pour voir.

    Une petite curiosité. Pour la "vraie fausse" fenêtre principale, comment gérer vous l'inter-communication entre Form sous FMX?
    D'ailleurs comment gérer vous l'intercommunication entre Form en général, que ce soit sous FMX ou VCL ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Sauf recours à des ressources spécifiques Windows tels que le pilotage d'applis Office, je recommande très fortement FMX qui vous donnera une interface vectorielle performante et au gout du jour.
    Vous aurez également accès eu développement mobile à partir des mêmes sources.
    En 2D c'est pratiquement sans équivalent en terme de simplicité de mise en oeuvre et d'efficacité. (On le doit à Delphi)
    Evidemment la partie 3D ne concurrencera par Unity ou Unreal mais cela peut permettre d'enrichir une appli dans des cas relativement simples tout en ayant une très grande souplesse de développement.
    A l'avenir il n'est d'ailleurs pas impossible que l'on ait accès à des moteurs comme tels que Ogre 3D.

    La communication entre fiches peut se faire très simplement en déclarant le fichier d'entête de la fiche avec laquelle vous voulez communiquer (Fichier->Utiliser l'unité ou Alt F11 ou manuellement dans le code).
    Ceci vous donnera accès aux membres publics de la fiche.
    Il est possible aussi d'avoir recours à des variables globales mais c'est nettement moins élégant.

  9. #9
    tlt
    tlt est déconnecté
    Membre averti Avatar de tlt
    Homme Profil pro
    Programmeur
    Inscrit en
    Juillet 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Programmeur
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 202
    Points : 412
    Points
    412
    Par défaut
    très interessant. Je vais me pencher un peu sur FMX. En tout cas merci pour les conseils

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/12/2013, 09h09
  2. Réponses: 0
    Dernier message: 15/09/2009, 18h46
  3. Réponses: 3
    Dernier message: 14/03/2009, 09h44
  4. chercher les contrôles dans un usf lorsque son nom est dans une variable
    Par Jean-Pierre49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/04/2008, 08h14

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