Impossible d'intégrer un UNIT dans mon projet, problème d'exécution [Résolu]

Messages postés
7
Date d'inscription
lundi 22 septembre 2008
Dernière intervention
9 avril 2010
- - Dernière réponse : bartmaul3000
Messages postés
7
Date d'inscription
lundi 22 septembre 2008
Dernière intervention
9 avril 2010
- 14 avril 2009 à 19:33
Bonjour,

Je suis étudiant en informatique et je développe en delphi une application formulaire avec de la POO.

Je dispose d'un unit : 'U_joueur.pas' dans lequel j'ai ma classe joueur.

'P_demarrage.dpr' mon formulaire

'U_demarrage.pas' le unit de mon formulaire dans lequel je fais appel à U_joueur.pas :

unit U_demarrage;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, U_joueur, StdCtrls;

...

j'ai également modifié P_demarrage pour y inclure U_joueur.pas :

program P_demarrage;

uses

Forms,

U_demarrage in 'U_demarrage.pas' {EC},

U_joueur in 'U_joueur.pas';

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TEC, EC);

Application.Run;

end.

Problème, lorsque je lance mon application j'obtiens le message d'erreur :

Le projet P_demarrage.exe a provoqué une classe d'exception
EInvalidOperation avec le message 'Impossible de focaliser une fenêtre
désactivée ou invisible'.Processus stoppé. Utilisez Pas-à-pas ou
Exécuter pour continuer.

Bref là je bloque, j'ai passé 2heures sur le problème et je commence à lâcher le bout =/
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
3
Merci
delphi crée les fiches dans l'odre qui se trouve dans le .dpr
si ta fiche de démarrage est la première créee tu essaies de focaliser une fenêtre qui n'est pas encore créer ---plantage.
il vaut meiux faire le setfocus dans le onshow de la fenêtre en effet cet évenement n'est appelé qu'après que toutes les fenêtres aient été créée

Jlen

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de jlen100
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
non, non et non.

1) ne mets pas d'underscore "_" dans les noms d'unité ou de projet!
2) n'ajoute pas manuellement d'unité dans le projet! on peu le faire dans la clause Uses de l'interface ou implementation d'une unité, mais pas dans le DPR! ajoute l'unité via le menu "projet > ajouter au projet"
3) le message d'erreur indique un probleme de creation d'objet alors que la fenetre n'est pas encore visible, verifie les declaration de creation qui precede le constructeur de la fiche principale.

<hr size="2" width="100%" />
Commenter la réponse de f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
4) l'erreur peut aussi signifier que tu crée un objet soit dans le mauvais conteneur, soit avec un owner a nil :

TButton.Create(nil);

par exemple, ou TButton.Create(TTimer) (ttimer n'etant pas un composant visuel)

<hr size="2" width="100%" />
Commenter la réponse de f0xi
Messages postés
7
Date d'inscription
lundi 22 septembre 2008
Dernière intervention
9 avril 2010
0
Merci
J'ai respecté tes les deux premiers points, mais je ne vois pas quoi modifier pour le 3e :

" le message d'erreur indique un problème de création d'objet alors
que la fenêtre n'est pas encore visible, vérifie les déclaration de création qui précède le constructeur de la fiche principale."

Je ne sais pas comment rendre ma fiche "visible".

voici le code de ma fiche principale :

unit Udemarrage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Ujoueur, StdCtrls;                 

type
  TEC = class(TForm)
    B_commencer: TButton;
    L_JEU: TLabel;
    e1: TEdit;
    e2: TEdit;
    e3: TEdit;
    e4: TEdit;
    B_quitter: TButton;
    E_C4: TEdit;
    E_C3: TEdit;
    E_C2: TEdit;
    E_C1: TEdit;
    L_C1: TLabel;
    L_C2: TLabel;
    L_C3: TLabel;
    L_C4: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure B_quitterClick(Sender: TObject);
    procedure B_commencerClick(Sender: TObject);
    procedure E_C1Change(Sender: TObject);
    procedure E_C2Change(Sender: TObject);
    procedure E_C3Change(Sender: TObject);
    procedure E_C4Change(Sender: TObject);
    procedure continuer();
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  EC: TEC;
  C1 , C2 , C3 , C4 : T_joueur;

implementation

{$R *.dfm}

procedure TEC.FormCreate(Sender: TObject);
begin

        e1.Text := '';
        e2.Text := '';
        e3.Text := '';
        e4.Text := '';

        E_C1.SetFocus;

end;
...
end.
Commenter la réponse de bartmaul3000
Messages postés
7
Date d'inscription
lundi 22 septembre 2008
Dernière intervention
9 avril 2010
0
Merci
Merci, j'ai retiré mon SetFocus et appelé ma fiche joueur en premier dans mon .dpr

Maintenant ça fonctionne merci pour la rapidité des réponses !!
Commenter la réponse de bartmaul3000

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.