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

Delphi Discussion :

ordre des fenetres. complément à la FAQ


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Par défaut ordre des fenetres. complément à la FAQ
    J'ai les fenetres 1-2-3-4-5 d'applications différentes sur mon écran.
    je veux, d'un clilc sur Delphi mettre en avant la fenetre 2 et, juste sous elle, la fenetre 3 (en qque sorte, 3 est un fond d'écran pour 2).
    La FAQ donne le moyen de faire passer une fenetre en premier plan, et ça fonctionne très bien
    Mon idée est de le faire successivement pour la fenetre 3 puis pour la fenetre 2.
    ce qui donne ceci
    Code delphi : 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
    procedure TForm1Devant;
    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(Haundle);
        AttachThreadInput(Nous,Proc,False);
        Application.BringToFront;
      End Else
      Begin
        // Nous sommes déjà en premier plan
        SetForeGroundWindow(Haundle);
      End;
    end;
         begin
         Haundle := findwindow(nil, 'mafenetre3');
         TForm1Devant;
         sleep(1000);
         Haundle := findwindow(nil,'mafenetre2');
         TForm1Devant;
    end.
    ça ne fonctionne pas, ni avec une boucle, ni en récrivant deux fonctions distinctes. Si vous avez une idée...
    merci.
    Jean Pierre

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Comme d'hab, ce n'est pas clair, les fenetres de qui de quoi pour faire quoi...

    Voir ces fonctions dans l'aide
    EnumWindows()
    FindWindow()
    GetWindow()
    ShowWindow()
    + les autres fonctions de gestion de fenetres.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Par défaut
    Bon alors, je précise.
    je dois mettre, à la demande, une fenetre excel sous un logiciel affichant des données boursières sur des mini fenetres. je dois voir les données s'afficher (en premier plan, donc, dans ces minifenetres) et en même temps, dans les espaces entre ces mnini fenetres la feuille excel avec les calculs qui s'effectuent en conséquence.
    les autres logiciels tournant en tache de fond.
    j'ai les handles de tout ce petit monde, ce n'est pas le problème, mon problème est l'affichage.
    et l'astuce donnée par la FAQ ne marche qu'une fois... Pourquoi?
    Jean Pierre

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Cela ne peut pas fonctionner avec "Haundle := findwindow(nil, 'mafenetre3');"
    Il faut conserver SetForeGroundWindow(Handle);
    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
    procedure TForm1Devant;
    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;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      Devant;
    end;
    propriete interval du timer à 3000;
    Pour le test: 1)placer une autre application au premier plan (mise au premier plan)


    2) meme chose mais avec juste SetForeGroundWindow(Handle);
    dans le corps de la fonction Devant.-> clignotement dans la barre des taches.
    Pour les fonctions utiles voir mon précédent post.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Par défaut
    là, c'est moi qui ne comprends plus
    ça fonctionne très bien pour la première fenetre avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Haundle := findwindow(nil, 'mafenetre3');
    sous (windows XP)
    le problème vient lorsque je veux faire passer la seconde fenetre en premier plan devant celle que je viens d'y mettre.
    Bref, ça marche toujours pas.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Par défaut
    finalement en utilisant la fonction
    activerfenetre de l'unité system du démineur, ça fonctionne...

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

Discussions similaires

  1. Modifier l'ordre des Fields d'un dataset
    Par teska dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/03/2004, 16h38
  2. Modifier l'ordre des cartes son
    Par YéTeeh dans le forum Matériel
    Réponses: 3
    Dernier message: 19/08/2003, 01h13
  3. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53
  4. [VB6] Listage des fenêtres windows
    Par gg78 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 27/05/2003, 11h36
  5. Question : ordre des bits ?
    Par Choupi dans le forum C
    Réponses: 3
    Dernier message: 11/02/2003, 06h22

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