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

Signaler
Messages postés
7
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
9 avril 2010
-
Messages postés
7
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
9 avril 2010
-
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 =/

5 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
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
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
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%" />
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
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%" />
Messages postés
7
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
9 avril 2010

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.
Messages postés
7
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
9 avril 2010

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 !!