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 :

fixer une fenêtre


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut fixer une fenêtre
    problème probablement trivial pour un po :
    je dois rendre la form principale ainsi que celle des fenêtre enfants d'une application
    innamovible dans l'écran.
    comment doit-on proceder?
    compilateur : Borland C++ 6.
    Merci de vos réponses!

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Mettre BorderStyle de la Form a bsNone, mais ca fait peut etre plus que ce que tu veut

  3. #3
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    Merci de cette réponse! mais cela n'est pas la solution...
    Bien sur BsNone fair disparaitre la barre qui n'appartient pas à l'application et qui est responsable de ma question mais:
    je doit faire une applic qui sera child d'un système nettement plus vate et pour des questions d'homogénéité de présentation, cette barre "du haut" doit rester présente.
    J'y ai juste supprimé tous les icones minimize, maximize, Exit, ...
    pour ce faire a l'event oncreate j'execute :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
       TBorderIcons tempBI = BorderIcons;
       tempBI >> biMaximize;
       tempBI >> biMinimize;
       tempBI >> biHelp;
       tempBI >> biSystemMenu;
       BorderIcons             =       tempBI;
    Je cherche donc à rendre innamovible des fenêtre possédant cette header qui est sous le controle de window et non de l'application

  4. #4
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    Par innamovible j'entends qu'elle ne puisse être déplacée par l'utilisateur.
    Les autres aspects de la question sont résolus par le petit code que j'ai cité préalablement

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 9
    Par défaut
    Je comprends un peu mieux.
    Je n'ai pas testé ces solutions, mais ce sont peut-être des pistes:
    1) utiliser les propriétés Position poDefaultPosOnly et poDefaultSizeOnly de TForm.
    2) (hack-o-rama) dans OnShow, enregistrer Left, Top, Height and Width; dans OnResize, restaurer ces valeurs. A voir si il n'y a pas un message windows que l'on pourrait attraper lrsque la fenêtre est déplacée.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 9
    Par défaut
    Que voulez-vous dire exactement par inamovible? qu'on ne peut déplacer ? qu'on ne peut fermer ? ou qui doit rester au dessus des autres fenêtres?

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Eventuellement, une idée afin de 'bloquer' l'accés aux zones non clientes de la TForm, afin d'éviter de la déplacer même si la barre de titre est visible :
    . dans le .h de la TForm, en private:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private:	// Déclarations de l'utilisateur
    		void __fastcall OnNCLBUTTONDOWN(TMessage& msg);//bouton gauche enfoncé, dans la zone non client
     
            BEGIN_MESSAGE_MAP
    				MESSAGE_HANDLER(WM_NCLBUTTONDOWN,TMessage,OnNCLBUTTONDOWN)
    		END_MESSAGE_MAP(TForm)
    . dans le .cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm2::OnNCLBUTTONDOWN(TMessage& msg)
    {
    	msg.Msg = WM_NCLBUTTONUP;
    }
    On ne peut donc plus 'saisir' la fenêtre par la barre de titre et la déplacer ...

    En espérant t'aider,
    @ +

    Suite :

    Par contre, dans mon cas, on ne peut plus cliquer sur les boutons de la barre de titre (mais j'ai cru comprendre que dans ton cas, il n'y en avait pas).

    Sinon, on peut toujours imaginer rester sur cette idée et tester le paramètre wParam du message, qui est le 'hit-test':
    voir alors aussi WM_NCHITTEST peut être, pour selectionner les cas ou l'on peut cliquer sur la zone non cliente ou non.

    non ?

  8. #8
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    M E R C I !!!

    Cela rempli en tout cas 95% de mon attente!

  9. #9
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Mais alors .... c'est quoi les 5 % restant ?


  10. #10
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    avec la macro dans la zone private, il n'est pas à priori aisé de pouvoir switcher cette option de ON à OFF à travers le soft lui-même. Mais cela reste marginal pour mon application.
    J'ai essayé - mais sans résultat positif - de changer
    msg.Msg = WM_NCLBUTTONUP; par msg.Msg = WM_NCLBUTTONDOWN; suivant les conditions d'appels. J'aurrais pensé que l'interception de l'event WM_NCLBUTTONUP; et le substituer à lui-même aurait rendu la mobilité à la fenêtre : mais non...
    Mais je n'ai pas réfléchi plus que cela et je ne pourrais pas m'avancer trop sur ses conclusions.
    en tout cas encore MERCI

  11. #11
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Content d'avoir pu t'aider ...

    Et avec une variable bool (en private, dans la TForm), initialisée a false au lancement de la form, qui passerais a true en fonction des cas ?
    On écrirais alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void __fastcall TForm2::OnNCLBUTTONDOWN(TMessage& msg)
    {
    if (Libre == true)
    {
    	msg.Msg = WM_NCLBUTTONUP;
    }
    else
    {
    	this->DefaultHandler(&msg);
    }
    }
    On peut imaginer capter le message WM_NCMOUSEMOVE (de la même manière que pour WM_NCLBUTTONDOWN), et faire changer la valeur de la variable booléenne en fonction de la zone survolée (par exemple) si besoin.
    A moins que je me trompe gravement, cette évènement sera capter de toute façon avant le click dans la zone non cliente.

    @ +

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

Discussions similaires

  1. Fixer une fenêtre hwnd en avant-plan
    Par frankytactik dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/02/2013, 12h30
  2. Réponses: 0
    Dernier message: 16/02/2011, 11h52
  3. Fixer une fenêtre dans l'écran
    Par thibane dans le forum GTK+ avec C & C++
    Réponses: 12
    Dernier message: 08/06/2007, 17h25
  4. fixer la taille d'une fenêtre
    Par hammag dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 25/04/2006, 18h33
  5. Fixer la taille d'une fenêtre
    Par rockelite dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 24/12/2005, 13h09

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