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 :

Mettre une fenetre toujours au premier plan


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut Mettre une fenetre toujours au premier plan
    bonsoir
    J'ai cree une fenetre sans barre de titre qui s'affiche en haut de l'ecran la Form est initialisee a " fsStayOnTop ", mais j'aimerais que les autres fenetres s'affichent et s'ajustent sous ma Form, je cherche une piste

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    s'affichent et s'ajustent sous ma Form
    Dans ce sens là (?) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    SetBounds(0,0,Screen->Width, 100);
    }
    //--
     
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    Form2->Show();
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm2::FormShow(TObject *Sender)
    {
    SetBounds(0,Form1->Height, Width, Height);
    }
    Pour interdire le déplacement de Form2 il suffirait d'intercepter et de gérer l'événement WM_WOVING.
    (toujours sur BCB3 Pro donc ...)

    A plus !

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Sinon, en interprétant le problème autrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    Form2->Show(); // peu importe
    Form3->Show(); // peu importe à ce stade
    Application->NormalizeAllTopMosts(); // << y compris Form1
    Form3->FormStyle = fsStayOnTop; // << Replace et demeure au premier plan
    }
    Pour gérer le positionnement des autres forms par rapport à cette form, l'interception de WM_MOVING reste d'actualité !

    A plus !

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Merci pour tes reponses henderson
    Je me suis tres mal explique la fenetre que je cree va me servir de Zoom et se place en haut de l'ecran elle est redimensionnable, ce que je cherche, c'est que les fenetres presente se redimensionnes dans l'espace restant sur l'ecran de meme pour celles qui vont se charger la fenetre de Zoom deja presente, je regarde du cote des API Window je pense que c'est ce qu'il faut utiliser mais je ne vois pas lequelles

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    En faisant des testes je me retrouve devant un probleme si je fais ceci pour obtenir le Handle du bureau j'ai cette valeur " 00010014 "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HWND hwndBureau = GetDesktopWindow();
    Si je fais ceci pour obtenir le Handle pointe par le curseur en faisant ce qui suit j'ai cette valeur " 00010088 ", j'avais pris la precotion de deplacer les fenetre pour verifier que cela pointe sur le bureau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // on positionne le curseur sur la barre de titre
    // a 10 du bord gauche et 10 du bord haut
    TPoint Pt;
    Pt.x = 10;
    Pt.y = 10;
    // on recupere le Handle de la fenetre affichee
    HWND hwndAppli = WindowFromPoint(Pt); // on recupere le Handle du composant sous le curseur
    Pourquoi deux valeurs differentes, comment obtenir le Handle du bureau que l'on voit

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    DeskTop ... ???

    En supposant que cette fenêtre Zoom ne concerne que ton application, le plus simple serait quand même que ton application gère ses propres fenêtres.
    Ca peut se faire "facilement" en mettant les OnResize en guirlande :
    Zoom étant maître du positionnement des autres fenêtres elle lancera donc la OnResize de la première fenêtre qui lancera la OnResize de la deuxième fenêtre ... la OnResize de la dernière fenêtre ne lancera aucune OnResize.
    Cette daisy-chain doit respecter une condition : Zoom doit être la dernière fenêtre créée et il faudra donc inhiber l'action des OnResize avec un flag que Zoom validera lors de sa construction (pour éviter d'utiliser une fenêtre qui ne serait pas encore construite à cause de ce montage en daisy-chain).
    Dès que la OnResize de cette Zoom sera solicitée (inévitablement après sa construction), toutes les fenêtres se positionneront les unes par rapport aux autres (et l'une après l'autre)... à faire donc dans chaque OnResize (donc pour chacune d'elle) avant de solliciter la OnResize de "sa" suivante dans la daisy-chain.
    Je me limite ici à n'en décrire que le principe (comme j'ai testé ce principe avec mon BCB3 Pro ...) !

    Si on travaille dans un contexte MDI ... c'est encore plus simple ... puisque la MDIForm est maître de son contenu (on peut développer pour faire beaucoup plus que Cascade et Tile ) !!!

    A plus !

Discussions similaires

  1. Savoir si une fenetre est au premier plan
    Par Galip dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/07/2007, 13h37
  2. Réponses: 11
    Dernier message: 05/06/2007, 20h56
  3. [JFrame] Affichage d'une application toujours au premier plan
    Par michaeljeru dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 06/12/2006, 22h49
  4. [C#][.Net] Affichage d'une appli toujours au premier plan
    Par alncool dans le forum Windows Forms
    Réponses: 9
    Dernier message: 13/07/2005, 12h30
  5. forcer une fenetre à etre au premier plan jusqu'a ...
    Par peppena dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/12/2003, 16h14

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