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 du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut Handle de fenêtre non valide
    Bonjour,
    lorsque que je quitte mon application, cette erreur apparait :
    " EOSError "Erreur système. Code 1400." Handle de fenêtre non valide "
    A quoi est elle due ?
    (si vous avez besoin de mon code pas de problème).
    Merci de votre aide

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par ired
    " EOSError "Erreur système. Code 1400." Handle de fenêtre non valide "
    A quoi est elle due ?
    A plein de choses dues à l'utilisation d'un handle qui ne correspond à aucun contrôle fenêtré Delphi (Fiche, Panel, bouton, etc : bref n'importe quel descendant de TWinControl), ou Windows (Fiche, Bouton, etc...).
    Soit tu utilises une API windows de façon incorrecte, soit tu as du, malencontreusement réaffecter une variable (de type TForm, TPanel, Tbutton, TTreeview, etc...), en oubliant quelle contenait quelque déjà chose que tu devais détruire ou je ne sais quoi
    Citation Envoyé par ired
    (si vous avez besoin de mon code pas de problème).
    ça peut être utile
    Bidouilleuse Delphi

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 517
    Points : 25 034
    Points
    25 034
    Par défaut 1400 ... ah la Belle Erreur
    Tu n'aurais pas fait un ShowMessage dans un Thread ? ou manipuler une Forme depuis un Thread ... j'ai eu ce problème dans ces situations là !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Tu n'aurais pas fait un ShowMessage dans un Thread ? ou manipuler une Forme depuis un Thread ... j'ai eu ce problème dans ces situations là !
    Merci pour vos réponses!
    Malheureusement pas de showmessage depuis un thread.
    Que veux tu dire par manipuler une form ?

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    J'ai eu cette erreur lorsque j'essayais de parenter un composant avec un autre pas encore "fini de créer"
    Si tu nous montrait du code, on pourrait mieux t'aider
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 517
    Points : 25 034
    Points
    25 034
    Par défaut
    Depuis ton Thread faire ceci par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FrmServeur.StatusBarServeur.Panels[SB_PANEL_IMPORT].Text := '[Trieuse] Import AS400-PC : Optimisation des Tables Produit \ Commandes : Sélection du Catalogue...';
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FrmServeur.ProgressBarServeur.StepIt;
    FrmServeur.ProgressBarServeur.Hint := FloatToStr(PourcentageJauge) + ' %';
    Des trucs qui ont l'air tout simple, cela fonctionne, 9999/10000 fois, et la fois où ça passe pas tu as soit l'Erreur 1400, soit un Ecran Bleu (si les options de reboot sur erreur irrémédiable sont décochées), soit une Violation d'Accès puis le 1400 à la fermeture du programme ...

    je l'ai vécu ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    alors j'ai deux threads et je fais ca :

    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
     
    procedure Ttraitementpage.Execute;
    begin
    form1.Memo.lines.Text:=form1.HTTP1.Get(form1.Edit1.text);
     
    compteur2:=1;
    repeat
    begin
    string(unit1.code):=form1.Memo.Lines.ValueFromIndex[compteur2];
    compteur2:=compteur2+1;
     
    end
    until pos(' ***********',string(unit1.code))<>0;
    form1.Edit2.Text:=unit1.code;
    termin:=true;
     
    end;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure Tdownload.Execute;
    begin
    form1.HTTP2.HandleRedirects:=true; // Permet la redirection
    Fs := TFileStream.Create('C:\wegettubetemp\temp.flv',fmCreate); //Nom du fichier local
    form1.HTTP2.Get(string(form1.Edit3.text),Fs);
    Fs.Free; //Liberer le flux
    end;
    Tu vois une mouche dans le système ?

  8. #8
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    pas seulement une
    [QUOTE=ired]
    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
    procedure Ttraitementpage.Execute;
    begin
    //là tu appel une form(vcl) tu doit passé par syncronise
    form1.Memo.lines.Text:=form1.HTTP1.Get(form1.Edit1.text);
    
    compteur2:=1;
    repeat
    //begin , pas la peine car déjà repeat c'est un bloc seul
    string(unit1.code):=form1.Memo.Lines.ValueFromIndex[compteur2];
    compteur2:=compteur2+1;
    
    //end
    until pos(' ***********',string(unit1.code))<>0;
     // là tu as suprimer le teste de terminate
    until (pos(' ***********',string(unit1.code))<>0) and (not terminate);
    form1.Edit2.Text:=unit1.code; // encore un accée à vcl, et en plus tu peut remplacé ce ligne par un evenement
    termin:=true;// bah là je sais pas à cois sert :aie: 
    
    end;
    QUOTE]
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Merci pour ta réponse Edam!
    Comme tu peu le voir je débute avec les threads
    Peux tu m'expliquer le synchronise ? Je n'ai pas vraiment compris...
    Peux tu aussi m'expliquer comment je peux exectuer du code que lorsque un thread est terminé ?
    D'avance je te remercie beaucoup de me rendre moins bête

  10. #10
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    pour syncronise voir l'aide en ligne de delphi
    pour attendre un thréad (ce qui est pas normal sauf si tu attend depuis un autre thréad ) c'est TThread.WaitFor
    pour plus de détaille voir l'aide en ligne où tt le monde passe le voir avant de posté (mois j'ai apris plus de 50% de delphi dans son help )

    [Edit]Example[/Edit]
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 517
    Points : 25 034
    Points
    25 034
    Par défaut
    Elimine le Mémo et remplace simplement par une TStringList déclaré en privé dans le Thread ...

    Ensuite, fait un procédure pour répondre à l'évènement OnTerminate du Thread (cela se produit non pas en Thread mais dans le run VCL normale) pour recopier la TStringList dans le Mémo si cela doit s'afficher ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par edam
    pour syncronise voir l'aide en ligne de delphi
    pour attendre un thréad (ce qui est pas normal sauf si tu attend depuis un autre thréad ) c'est TThread.WaitFor
    pour plus de détaille voir l'aide en ligne où tt le monde passe le voir avant de posté (mois j'ai apris plus de 50% de delphi dans son help )

    [Edit]Example[/Edit]
    Merci Edam, je mettrai en application demain
    Je vais souvent voir dans le help, mais si je connaissais pas synchronise

    ShaiLeTroll, oki je vais essayer aussi à ta manière

    Merci pour votre aide les gars

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Youhou ca marche!
    Merci les gars, vous m'avez appris un truc !!
    Passez une bonne journée, et paf un résolu en plus

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Hello,
    je me permet de remonter le topic. J'ai denouveau le même problème. Mais à la place de placer les instructions qui utilisent le thread principal dans un synchronize, j'ai utilisé des sections critiques. Et pourant, tjs cette erreur Code 1400." Handle de fenêtre non valide .... Vous avez une idée ?

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 517
    Points : 25 034
    Points
    25 034
    Par défaut
    tu n'as mis toutes tes manipulations de composants VCL dans un synchronize, ou sinon tu as des Create/Free d'objets qui doivent se mélanger entre Thread, des MessageBox ... Attention, aussi si tu as un DataModule, il vaut mieux l'instancier dans le Thread ... (pas dans le create mais dans le execute, j'ai fait l'erreur, et je pense que un de mes anciens projets pro qui tourne depuis tout de même 4 ans 12h/24 5j/7 en quasi-temps réel, n'est plus trop stable avec la DB après 24h non stop de locate/edit/post ...)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Okay merci ShaiLeTroll
    Je vais voir tout ça...

  17. #17
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut APPLICATION FIGER APRET EXCUTION DU THREAD
    Citation Envoyé par ShaiLeTroll Voir le message
    tu n'as mis toutes tes manipulations de composants VCL dans un synchronize, ou sinon tu as des Create/Free d'objets qui doivent se mélanger entre Thread, des MessageBox ... Attention, aussi si tu as un DataModule, il vaut mieux l'instancier dans le Thread ... (pas dans le create mais dans le execute, j'ai fait l'erreur, et je pense que un de mes anciens projets pro qui tourne depuis tout de même 4 ans 12h/24 5j/7 en quasi-temps réel, n'est plus trop stable avec la DB après 24h non stop de locate/edit/post ...)

    ****************************************************

    Je revient a ce fameux thread moi j'utilise tmyquery dans mon thread avant j'utilise pas synchronize j'avais le problème de handle de fenêtre non valide quand jais j'utilise synchronize le problème et disparut mais mon application et figer après l'exécution du thread
    qui ne ressoude pas mon problème vue que je voulez utilise les thread pour cela, pour que mon application n'attend le serveur mysql.


    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    unit select_pm;
     
    interface
     
    uses
      Classes,StdCtrls,SysUtils,Windows,MyAccess;
     
    type
      Tselect_pm = class(TThread)
      private
        { Déclarations privées }
        Fsociete_pm:TMyquery;
        procedure OnTerminateProcedure(Sender: TObject);
      protected
        procedure Execute; override;
        procedure UpdateCaption;
      public
      constructor Create(societe_pm : TMyquery);
      end;
     
    implementation
     
    uses Unit1;
     
    procedure Tselect_pm.Update;
      begin
       Fsociete_pm.SQL.Clear;
       Fsociete_pm.SQL.Add('select * from societe_pm');
       Fsociete_pm.Execute;
      end;
     
    constructor Tselect_pm.Create(societe_pm : TMyquery);
    begin
       FreeOnTerminate := True;
       inherited Create(false);
       Fsociete_pm:=societe_pm;
    end;
     
    procedure Tselect_pm.Execute;
    begin
     Synchronize(UpdateCaption);
    end;
     
    end.
    ****************************************************

  18. #18
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 517
    Points : 25 034
    Points
    25 034
    Par défaut
    si c'est MyQuery de Devart\MyDAC, tu peux l'utiliser en Thread, veille juste à avoir aussi un objet connexion créé uniquement pour ce thread ...

    surtout ne jamais utilisé un même query dans un thread secondaire et dans le main thread !
    comme typiquement via un passage de paramètre !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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 bernie.noel dans le forum Langage
    Réponses: 5
    Dernier message: 18/03/2008, 18h48
  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