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

Langage Delphi Discussion :

Bloquer fenetre premier plan


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut Bloquer fenetre premier plan
    Bonjour, je souhaite bloquer une fenetreen avant plan mais aussi qu'elle reste active
    En gros, lorsqu'on clique en dehors de la fenetre je veux qu'elle reste affiché (ca c'est facile avec la propriété StayOnTop) mais je veux auusi qu'elle reste active (??)

    Merci et bonne prog !!

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    J'ai peur de ne pas bien te comprendre, car ce que tu décris est tout simplement une fenêtre modale, comme par exemple une boite de dialogue qui attend une réponse de l'utilisateur.

    Un CreateForm suivi d'un ShowModal devrait suffire !

    @+

  3. #3
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    oui le principe c'est ca mais c'est pas pour une simple fenetre c'est pour la fenetre principale de mon application tant que l'application est active, la fenetre ne dois pas pouvoir etre "déselectionnée" et je n'arrive pas a appliquer showModal a Form1 si tu sais comment faire ou si quelqu'un a une autre idée, je suis preneur.
    MERCI ET BONNE PROG !!

    Edit : en gros je veux lui redonner le focus quand elle le pert !!

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    On peut essayer un timer qui toutes les 500 ms fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetactviveWindow(myMainForm.handle) ;
    SetForegroundWindow(myMainForm.handle) ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Ta fonction ne marche pas chez moi, la fenetre ne prend pas le focus l'action qui se produit est un clignotement dans la barre de titre !

  6. #6
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Graffito
    Bonjour,

    On peut essayer un timer qui toutes les 500 ms fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetactviveWindow(myMainForm.handle) ;
    SetForegroundWindow(myMainForm.handle) ;

    As-tu essayé l'événement OnDeactivate de la fiche principale ?
    Et pourquoi pas dans le OnActivate de chacune des autres fiches ?
    -Slimjoe

  7. #7
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Dans l'aide de mon Delphi 7 :

    OnDeactivate

    Occurs when the form loses focus.

    Delphi syntax:

    property OnDeactivate: TNotifyEvent;

    C++ syntax:

    __property Classes::TNotifyEvent OnDeactivate = {read=FOnDeactivate, write=FOnDeactivate, stored
    =IsForm};

    Description

    Use OnDeactivate to perform special processing when the form transitions from being the active form to another form in the same application becoming the active form. If activation goes to another application, this event is not triggered. To determine if another application has become active, Use the TApplication object’s OnDeactivate event.
    -Slimjoe

  8. #8
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    mon probleme est pas l'endroit ou le placer mais la fonction a utilisé car celle vu plus haut ne permet pas de redonner le focus a la fenetre !!

  9. #9
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.FormDeactivate(Sender: TObject);
    begin
      Form1.SetFocus;
    end;
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  10. #10
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.FormDeactivate(Sender: TObject);
    begin
       SetActiveWindow(handle) ;
       SetForegroundWindow(handle) ;
    end;
     
    procedure TForm1.btn1Click(Sender: TObject);
    begin
       TForm2.Create(self).Show;
    end;
    Je viens de faire le test. J'ai beau cliquer 14 fois sur mon boution, j'ai droit à 14 fiches supplémentaire et ma fiche principale reste toujours au premier plan et a toujours le focus.
    -Slimjoe

  11. #11
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Le SetFocus; de denokan fonctionne aussi très bien en passant.
    -Slimjoe

  12. #12
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Graffito
    Bonjour,

    On peut essayer un timer qui toutes les 500 ms fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SetactviveWindow(myMainForm.handle) ;
    SetForegroundWindow(myMainForm.handle) ;

    Il serait peut être plus judicieux de faire remonter d'abord al fenêtre devant, puis après de l'activer et pas l'inverse car je pense qu'on ne peut pas donner le focus à une fenêtre non visible (y a qu'a voir avec delphi quand on donne le focus sur un élément invisible ^^).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Met la fenetre au premier plan
    SetForegroundWindow(myMainForm.handle) ;
     
    // Active la fenetre
    SetactviveWindow(myMainForm.handle) ;
    [edit]

    Citation Envoyé par Aide delphi
    The SetActiveWindow function activates a window, but not if the application is in the background. The window will be brought into the foreground (top of Z-Order) if its application is in the foreground when the system activates the window.
    [/edit]
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  13. #13
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    MERCI A TOUS
    j'ai complété un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if GetForegroundWindow<>myMainForm.handle then begin
        // Met la fenetre au premier plan
        SetForegroundWindow(myMainForm.handle) ;
        // Active la fenetre
        SetactiveWindow(myMainForm.handle) ;
    end;
    Ce code placé dans un timer permet de bloquer le focus sur la fenetre principale et la bloque au premier plan !!

  14. #14
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Peut-être suis-je un peu naïf mais n'est-ce pas un peu inutilement lourd que d'appeller L'API GetForegroundWindow 2 fois par secondes ?
    -Slimjoe

  15. #15
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    le truc c'est que si tu fais SetForegroundWindow tout de suite tu as une sorte de clignotement de la fenetre alors je prefere tester avant de l'initialiser!!

  16. #16
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    comment faire pour intercepté les message de l'application car d'apres l'aide lorsque l'on clique en dehors de l'appli c'est l'evenement application.ondeactivate qui change de valeur !! le FormX.ondeactivate ne sert que lorsque l'on change de form mais dans la meme application

  17. #17
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Et Application.OnDeactivate := FormX.OnDeactivate ne fonctionne pas ? (encore une fois pardonnez ma naïveté)
    -Slimjoe

  18. #18
    Membre averti
    Avatar de jmjmjm
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2005
    Messages : 760
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par slimjoe
    Et Application.OnDeactivate := FormX.OnDeactivate ne fonctionne pas ? (encore une fois pardonnez ma naïveté)
    Je ne comprend pas trop ce que tu veux dire si tu veux dire que Application.onactivate vaut FormX.onactivate c'est faut!!

    Si tu veux initialiser application.Ondeactivate avec FormX.ondeactivate ca ne sert a rien c'est l'inverse qu'il faudrait faire et ou le plasser ??

  19. #19
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Salut!

    Je dis ça sans avoir testé alors ça vaut ce que ça vaut.

    Sauf que si tu fais dans le OnCreate de ta fiche principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.OnDeactivate := self.OnDeactivate
    tu indiques à Delphi que le gestionnaire de l'événement OnDeactivate de l'Application (celui qui est exécuté lorsque l'Application perd le focus) devra être celui qui tu implémenteras dans ta fiche principale. En fait, tu assignes à OnDeactivate de Application la procédure à exécuter lorsque l'événement sera soulevé et à mon avis si cette procédure est la même que celle de la fiche principale, ça devrait répondre à ce que tu as besoin.

    Mais j'ai peut-être tors, ça ne serait pas la première fois
    -Slimjoe

  20. #20
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Tiens, j'ai peut-être mieux

    1. Implémente un OnDeactivate sur ta fiche principale
    2. Dépose un composant TApplication (il est sous l'onglet Additional)
    3. Dans les événements du TApplication, sous OnDeactivate, sélectionne "FormDeactivate" (l'événement de ta fiche)
    -Slimjoe

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Détecter fenetre premier plan ?
    Par Orthonic dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/05/2007, 06h32
  2. [vb.net] Fenetre en premier plan obsolu
    Par arnolem dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/12/2005, 11h37
  3. [WINAPI] - Fenetre au premier plan
    Par Scyrius dans le forum Windows
    Réponses: 2
    Dernier message: 26/10/2005, 14h47
  4. [débutant][JDialog] laisser la fenetre au premier plan ?
    Par Gromitou dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 03/09/2004, 11h33
  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