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 :

Comment obtenir une TOpenDialog en fsStayOnTop ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut Comment obtenir une TOpenDialog en fsStayOnTop ?
    Bonjour,

    Mon patron m’a fait créer des fenêtres en mode fsStayOnTop.

    Si j’essaye d’utiliser des openDialog, la fenêtre de dialogue est en dessous de mes fenêtres fsStayOnTop.

    Par conséquence, je change le style de mes fenêtres (fsnormal), j’utilise le opendialog puis je remets mes fenêtres en style fsStayOnTop.

    Cela fonctionne, mais le changement de mode fait clignoter mes fenêtres.

    Mon patron trouve ce clignotement inacceptable. Il veut le stayOnTop et aucun clignotement (j’ai réussit a luis fait abandonner un fond d’écran personnaliser dans les fenêtres de dialogue).

    Quelqu'un aurait il une idée ?

    J’utilise Delphi 7.

  2. #2
    Membre régulier Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 113
    Points
    113
    Par défaut
    Cherche autour de "SetWindowPos"
    J'avais lu sur un article dans un site que son avantage par rapport à fsStayOnTop est de ne plus avoir de scintillement.

    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bizarement cela fonctionne dans un sense (de fsStayOntop vers fsNormal) mais pas dans l'autre.
    C'est déja à moitié gagné.

  4. #4
    Membre régulier Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 113
    Points
    113
    Par défaut
    de memoire, il faut faire gaffe au fait que la fenetre soit visible au pas pour fsStayOntop ou à l'ordre de creation des formes. Un truc du genre quoi.

  5. #5
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Bizarre, je viens de faire des essais en utilisant une fenêtre en fsStayOnTop et un openDialog et quand j'apelle le dialogue, celui çi se positionne bien en premier plan (ce qui est normal pour une fenêtre en Modal ), mais essaye en appelant la fonction LockSetForegroundWindow() pour bloquer les appels vers setForegroundWindow():

    Dans l'évenement qui va appeler ton dialogue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    begin
      ...
      LockSetForegroundWindow(LSFW_LOCK); // tu bloques les appels vers setForegroundWindow()
      if not openDialog1.Execute then 
        begin
          LockSetForegroundWindow(LSFW_UNLOCK); // penses à les réautoriser
          exit;
        end;
      LockSetForegroundWindow(LSFW_UNLOCK); // penses à les réautoriser
      ...
    end;

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    Désolé pour ceux qui ont pris la peine de me répondre. J'ai "été mis" sur un autre problème et je vous ai laisser tomber.

    Je vous présente mes excuses pour ce comportement.

  7. #7
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Tu es tout excusé .

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    J'ai essayer LockSetForegroundWindow et bien d'autre chose mais J'ai toujour un problême de flip lorque le remet le stayOntop.

    le resultat le plus propre que j'ai pus trouver est SetWindowPos en precissant SWP_NoActivate et QWP_NoRedraw lorsque j'enlève le stayOntop.

    Ceci dis lorsque le remet le stayOnTop je suis bien obligé de fair un redraw ou je risque d'avoir un écran partiellment non redessiner.
    Donc clignotement.

    Lil_jam63 Disait que cela ne luis arrivait pas.
    En principe cela ne devrait pas arriver car les dialogues sont censser chercher dans l'application les form en stayOntop et agir en conséquence.
    Il y a parfois des problèmes mais en générale cela fonctionne.

    Ceci dis je cumule le cas particuliers.
    Plusieurs StayOnTop ouvert simultanément (mais si, mais si de 1 à 4) dans une dll. Et la cela fait sauter les automatismes.
    Je soupsonne même Windows XP de ne pas améliorer le problème. En faite je constate que c'est le genre de problèmes que XP généralise.

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

Discussions similaires

  1. comment obtenir une date dans une storeproc?
    Par Dnx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/10/2005, 15h19
  2. Comment obtenir une couleur clignotante dans un TStringGrid ?
    Par OutOfRange dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/07/2005, 00h46
  3. comment obtenir une ligne aléatoirement
    Par titoumimi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/05/2005, 15h52
  4. Réponses: 17
    Dernier message: 04/04/2005, 17h50

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