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 :

activation de fenetre C++ Builder 6


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut activation de fenetre C++ Builder 6
    Bonjour,

    Je travaille sur un projet en C++ Builder 6, je souhaite sur un
    évènement activer la fenetre de mon application lorsqu'elle à été
    minimisée et qu'elle prenne le focus sur les autres applications en cours.

    J'ai essayé Form1->WindowsState = wsNormal; ça ne marche pas

    Quelqu'un peut -il m'aider ?

    Cordialement

    EricNO

  2. #2
    Responsable Magazine

    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 : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Salut,
    tu as essayé Form1->Show() ou Form1->ShowModal() ?
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  3. #3
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Je ne suis pas sûr que ca puisse t'aider, mais regarde du coté de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Application->BringToFront() ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      SetForegroundWindow(Handle);
    ou encore regarde ce bout de code dans la FAQ (en Delphi, mais très équivalant en C++ Builder)
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    Form1->Show(); n'a pas d'effet sur l'activation de ma fenetre lorsqu'elle est minimisée.

    ça marche avec

    Form1->WindowState = wsMaximized suivi de
    Form1->WindowState = wsNormal

    mais ce n'est pas trés estétique et ça ne donne pas le focus à la fenetre

    Cdlt

    EricNO

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut EricNO
    Voici la fonction Delphi passee par sat83, elle affiche la Form2 et lui donne le focus
    Form1 deux Buttons un pour afficher la Form2, un qui affiche la Form2 (qui avait ete minimisee) et donne le focus
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Form2->Show();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Form2->WindowState = wsNormal;
    DWORD Proc = GetWindowThreadProcessId(GetForegroundWindow(), NULL );
    DWORD Nous = GetCurrentThreadId();
    if(Proc != Nous)
            {
            AttachThreadInput(Nous, Proc, true ) ;
            SetForegroundWindow(Form2->Handle);
            AttachThreadInput(Nous, Proc, false ) ;
            Application->BringToFront();
            }
    else
            {
            SetForegroundWindow(Form2->Handle);
            }
    }
    //---------------------------------------------------------------------------
    /*
    procedure TForm1.Devant;
    Var Proc,Nous:Integer;
    begin
      Proc:=GetWindowThreadProcessId(GetForeGroundWindow);
      Nous:=GetCurrentThreadID;
      If Proc<>Nous Then
      Begin
        // Nous ne sommes pas l'application en premier plan
        AttachThreadInput(Nous,Proc,True);
        SetForeGroundWindow(Handle);
        AttachThreadInput(Nous,Proc,False);
        Application.BringToFront;
      End Else
      Begin
        // Nous sommes déjà en premier plan
        SetForeGroundWindow(Handle);
      End;
    end;
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    J'ai intégré l'exemple de blondelle dans mon application, mais ma fenetre
    reste minimisé, je vais quand même essayer ce code sur une appli nouvelle

    Cdlt

    EricNO

  7. #7
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 386
    Points : 1 772
    Points
    1 772
    Par défaut
    Salut !

    Avec BCB3 Pro, j'ai testé avec un Speedbutton sur la fiche et un timer (je pense que c'est faisable avec BCB6) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    WindowState = wsMinimized;
    Timer1->Enabled = true;
    }
    //----
     
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    Timer1->Enabled = false;
    WindowState = wsNormal;
    SetFocus();
    }
    Lorsque je vois que l'on qualifie deux ou trois lignes de code comme "pas propre", dans ce cas je suggère de mettre en place une propriété supplémentaire avec un Setter (donc ... en écriture seule) ou une méthode.
    Les lignes de code seront dans le setter ou dans la méthode pour n'avoir à faire que ceci (en mesurant bien la différence qu'il y a entre les deux) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RestoreFocus = true;
    ou

    Et en arrière plan, dans le Setter, on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(Value) // pour une raison ou une autre
        {
        WindowState = wsNormal;
        SetFocus();
        }
    ou bien avec la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WindowState = wsNormal;
    SetFocus();
    A plus !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Salut,

    J'ai essayer ton exemple sur un projet vierge, ça marche.
    Il ne me reste plus qu'a trouver pourquoi ça ne marche pas dans mon projet.

    Merci

    Cordialement

    EricNO

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

Discussions similaires

  1. activer la fenetre d'un autre process
    Par baert dans le forum C++/CLI
    Réponses: 1
    Dernier message: 16/10/2010, 12h55
  2. Activer une fenetre
    Par lebfar dans le forum MFC
    Réponses: 1
    Dernier message: 13/10/2007, 12h27
  3. MDI activer une fenetre ouverte
    Par lebfar dans le forum MFC
    Réponses: 1
    Dernier message: 13/09/2007, 13h50
  4. Activer la fenetre Excel (1° plan)
    Par yadla dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 24/08/2007, 22h59
  5. Clé d'activation du produit C++builder.
    Par JavaAcro dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/06/2007, 17h44

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