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

Composants VCL Delphi Discussion :

Créer une fenêtre flottante qui ne peut avoir le focus


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Créer une fenêtre flottante qui ne peut avoir le focus
    Boujour,

    J'aimerais qu'une fenêtre 'custom' apparaissent sur une autre fenêtre principale mais de façon flottante. De cette manière, je peux utiliser le menu de la fenêtre principale tout en rendant visible la deuxième fenètre.

    Quand je fais:
    fenetre2.visible:= true;
    cette fenetre 2 reçoit le focus et donc si j'étais en train de cliquer sur un menu de la fenetre principale. le menu se ferme car cette dernière n'a plus le focus.

    Y a t-il un moyen de faire une fenêtre que l'on voit mais qui n'affecte pas les autres fenêtres du programme?
    P.S.: Ce genre de fenêtre existe dans l'API Macintosh existe-t-il en Win

    Merci!
    En Dieu j'ai mon abri.

    Ps 11,1

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Je n'ai pas très bien compris ce que tu voualis faire :

    Faire du MDI ?
    => Il faut mettre FormStyle en fsMDIForm pour la fiche principale et en fsMDIChild pour la fenêtre enfant.

    Activer une fenêtre enfant MDI ?
    => ActiveMDIChild.BringToFront;

    Mettre une fenêtre dans une autre sans utiliser le MDI ?
    => Form2.ParentWindow := Form1.Handle;

    En espérant t'avoir aidé... Si c'est pas bon, essaye de reformuler le problème.

    Bon développement !

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  3. #3
    Membre émérite
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Points : 2 883
    Points
    2 883
    Par défaut
    Ce style de fenêtre popup sans focus n'existe pas sous Windows. Dans ce dernier toute fenêtre à le focus quant elle est créée. Il y a des moyens de contourner bien entendu.

    Maintenant si tu veux afficher la fenêtre pendant que tu fais d'autres trucs sans perte de focus (genre sélection dans une combo) il faut utiliser d'autres méthodes.
    Celle qui me vient à l'esprit est celle des Hint. Regarde le source de la VCL sur la gestion des Hints, la fenêtre qui est créée répond tout à fait à ton besoin et utilise une astuce pour ne pas prendre le focus ni le faire perdre à ce qui est en cours.
    Sinon autre idée : afficher un simple rectangle (comme un panel avec du texte) en le créant sur le bureau au lieu de la fiche princiale.

    Je n'ai jamais eu à faire çà mais ce sont les 2 directions dans lesquelles je chercherais.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Voilà la façon de faire:

    setWindowPos(frmBulle.Handle, HWND_TOPMOST, Rect.Left, Rect.Top, form2.Width, form2.Height,SWP_NOACTIVATE);

    ShowWindow(frmBulle.Handle, SW_SHOWNOACTIVATE);

    C'est comme ça qu'on montre une fenêtre par dessus toutes les autres sans toutefois lui donner le focus.

    J'ai trouvé cette méthode dans la procédure THintWindow.ActivateHint
    du fichier controls.pas.

    Merci pour les conseils !!
    En Dieu j'ai mon abri.

    Ps 11,1

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Amélioration de réponse
    Correction de la réponse précédente, voilà en fait mon code en plus clair:

    //Affecter du texte dans un composant sur la form//

    form2.tAide.Caption:= getLongHint(application.Hint);

    //placer la form sur toutes les fenêtres//

    setWindowPos(frmBulle.Handle, HWND_TOPMOST, Rect.Left, Rect.Top, form2.Width, form2.Height,SWP_NOACTIVATE);

    //montrer la form//

    ShowWindow(frmBulle.Handle, SW_SHOWNOACTIVATE);

    //Je ne comprend pas pourquoi je dois mettre la ligne suivant mais si je ne la met pas, le hint affecter au caption de taide n'apparaît pas : : //

    form2.visible:= true;
    En Dieu j'ai mon abri.

    Ps 11,1

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 21/09/2013, 13h38
  2. Réponses: 26
    Dernier message: 20/09/2013, 10h56
  3. Réponses: 2
    Dernier message: 08/06/2006, 15h49
  4. Comment créer une application Service qui lance un .exe.
    Par yosthegost dans le forum Delphi
    Réponses: 5
    Dernier message: 18/05/2006, 11h37
  5. Créer une fenêtre
    Par RaygKross dans le forum Qt
    Réponses: 12
    Dernier message: 08/02/2006, 09h34

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