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

Résolu
bartmaul3000 Messages postés 7 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 9 avril 2010 - 14 avril 2009 à 16:39
bartmaul3000 Messages postés 7 Date d'inscription lundi 22 septembre 2008 Statut Membre 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 =/

5 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
14 avril 2009 à 19:07
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
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
14 avril 2009 à 16:54
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%" />
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
14 avril 2009 à 16:56
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%" />
0
bartmaul3000 Messages postés 7 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 9 avril 2010
14 avril 2009 à 18:48
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bartmaul3000 Messages postés 7 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 9 avril 2010
14 avril 2009 à 19:33
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 !!
0
Rejoignez-nous