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 :

Handle de fenêtre non valide


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Handle de fenêtre non valide
    Bonjour,

    j'ai un souci survenant assez alléatoirement. J'ai un message d'erreur qui apparait lorsque je ferme une fenêtre se trouvant en arrière plan. Le message est : "Erreur Win32. Code : 1400.. Handle de fenêtre non valide".

    Le problème est que l'environnement d'exécution est Citrix. Cette erreur ne survient pas sur un poste "standard". En fait l'application tourne sous Citrix et est affichée en mode fenêtre transparente (cela permet de donner l'impression que l'appli tourne en local).

    Je voudrais essayer de contrer ce problème en essayant de forcer le focus à ma fenêtre que je ferme (donc une fenêtre en arrière plan). J'ai l'impression qu'il ne détecte pas bien la fenêtre sur laquelle je clique. JE voudrais lui forcer l'activation au clic sur la fenêtre (même si de premier abord ça paraît inutile, mais pour mon cas je crois que le problème vient de là).

    J'ai essayé avec les procédure WMSysCommand et WMMouseActivate mais j'ai l'impression que je m'y prend mal.

    J'ai trouvé un code pour attraper la fermeture d'une fenêtre et j'ai essayé de l'adapter à mon cas pour savoir l'activation de fenêtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure Tfrm_DetReclam.WMMouseActivate(var Message: TWMSysCommand);
    begin
      	// C'est ici que ce situe mon problème : Que mettre à la place de SC_CLOSE pour connaître la valeur d'une activation de fenêtre
      	if (Message.CmdType and $FFF0 = SC_CLOSE) then
      		DefWindowProc(frm_DetReclam.Handle, WM_MOUSEACTIVATE, SC_CLOSE, 0)
      	else
      		inherited;
     
    end;
    Donc que mettre à la place du SC_CLOSE ? et est-ce bien comme cela que je dois m'y prendre?

    Merci d'avance pour votre aide.

  2. #2
    Membre actif Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Points : 251
    Points
    251
    Par défaut
    Bonjour,

    Si tu crées un nouveau projet delphi avec simplement une fenêtre vide, tu as la même erreur ?

    Et sur une machine virtuelle distante, tu as la même erreur ? (j'en doute).

    Bon courage.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    bonjour,

    non c'est une erreur qui survient assez aléatoirement. Elle est, de plus, assez difficilement reproductible mais je voudrais être sûr qu'elle ne se reproduise pas.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Je pense avoir résolu mon problème. Si ça intéresse quelqu'un.

    déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure WMMouseActivate(var Message: TWMMouseActivate); message WM_MOUSEACTIVATE;
    implémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure maForm.WMMouseActivate(var Message: TWMMouseActivate);
    begin
    		Message.Result := MA_ACTIVATE;
    		if (maForm.Handle <> GetForegroundWindow) and (maForm.Handle <> Handle) and (maForm.Handle <> 0) then
    		begin
    			SetForegroundWindow(maForm.Handle);
    			Windows.SetFocus(maForm.Handle);
    		end;
    end;
    J'attrape l'événement clic dans ma fenêtre et si le handle courant ne correspond pas à celui de ma fenêtre, je le lui donne de force.

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bernie.noel
    Si ça intéresse quelqu'un.
    Oui madame la FAQ Delphi


  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Salut!

    Et bien moi j'ai un problème similaire.
    Je développe sous C++ Builder V6.

    Mon programme était en train de tourner quand y'a eu une coupure de courant.
    Depuis, mon programme tourne normalement 1 fois sur 10 et les 9 autres fois ça tourne bien jusqu'à la fermeture de l'application où j'ai lemessage "Erreur system code 1400: handle de fenêtre invalide".

    Je ne sais pas trop si c'est dû à l'arrêt inopiné du PC à cause dela coupure de courant et encore moins comment me sortir de là.

    Merci d'avance pour vos conseils!

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

Discussions similaires

  1. [WD12] handle de fenêtre non valide
    Par gbzmt dans le forum WinDev
    Réponses: 4
    Dernier message: 05/11/2013, 11h02
  2. Handle de fenêtre non valide
    Par ired dans le forum Langage
    Réponses: 17
    Dernier message: 26/04/2010, 11h40
  3. Réponses: 11
    Dernier message: 02/11/2006, 13h36
  4. Réponses: 17
    Dernier message: 22/09/2006, 08h37
  5. Handle de fenètre non valide
    Par minnit_s dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/01/2006, 19h26

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