Directive de compilation [Résolu]

Signaler
Messages postés
146
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
-
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
-
Bonjour tout le monde,

Dans mon programme, je souhaite simplement afficher une TForm décrite dans une autre unité quand on est en mode de déboggage. Pour indiquer si l'on est ou non en déboggage, il suffit alors de définir DebugMode avec la directive {$Define ...}. L'exécution génère une violation d'eccès à l'adresse 00000000.
J'ai par ailleurs essayé la commande  "DebugForm.ShowModal;" à d'autres endroit du programme, et elle marche bien car c'est la même qui est utilisée pour afficher la fenêtre "A propos" définit dans AboutBox.
Le problème viendrait donc apparemment de "{$DEFINE DebugMode}", mais je pense qu'il est bien placé.

{------------ extrait du code ----------}
unit CommandUnit;


interface


uses Windows, Classes, Graphics, Forms, Controls, Menus,
  Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ImgList, StdActns,
  ActnList, ToolWin;


type
  TCommandForm = class(TForm)
  //...
  end;


var
  CommandForm: TCommandForm;


implementation


uses DebugUnit;
{$R *.dfm}
{$DEFINE DebugMode}


initialization
{$IFDEF DebugMode}
  DebugForm.ShowModal;
{$ENDIF}

end.
{------------ fin du code ----------}

Merci à vous.

7 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
Pardon
je crois que j'ai dit une grosse bétise

à la place du OnCreate essaye de le mettre dans le OnShow

 
@+
Cirec

<hr siz="" />
Messages postés
96
Date d'inscription
mercredi 25 octobre 2006
Statut
Membre
Dernière intervention
26 octobre 2009
3
Salut,
est-ce que la form est crée au départ ou est elle seulement disponible dans ce deuxième cas tu dois la créer avant de l'utiliser:

DebugForm := TForm.create(self);
DebugForm.ShowModal;

Alex
Messages postés
146
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

J'ai essayé comme tu me le conseille de créer la DebugForm, mais comme je suis au début de mon projet, je n'ai que décrit mes unités, fiches et classes, je n'ai donc pas de constructeur. Le "create" ne compile donc pas.
Par ailleurs quand j'essaye le "DebugForm.ShowModal;" ailleurs que dans ce "initialization", la TForm s'affiche correctement. C'est pour ça que je crois qu'elle est bien construite. Par exemple:

procedure TCommandForm.HelpAbout1Execute(Sender: TObject);
begin
  AboutBox.ShowModal;
  DebugForm.ShowModal;
end;
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
Salut,

initialization
{$IFDEF DebugMode}
  DebugForm.ShowModal;
{$ENDIF}

ne me semble pas correcte

Dans l'ordre le projet
  - initialise
  - Cré les Fiches (Form)
  - et Run l'application

Ton appel à "DebugForm.ShowModal" dans la partie initialisation
fait appel à DebugForm avant qu'elle ne soit crée

Il te faut donc déplacer cette appel dans le OnCreate de la Form principale (par Ex.)

 
@+
Cirec

<hr siz="" />
Messages postés
146
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

Je pensais que ça marcherait avec ta correction, mais rien n'y fait...
J'ai déclaré la procedure sur l'évènement OnCreate de ma TForm principale:

-----
procedure TCommandForm.FormCreate(Sender: TObject);
begin
{$IFDEF DebugMode}
DebugForm.ShowModal;
{$ENDIF}
end;
-----

avec biensûr {$DEFINE DebugMode} juste au début de l'implementation.

J'ai encore le même message d'erreur du déboggeur:
Violation d'acces à la lecture de l'adresse 00000000
Messages postés
146
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

Ca marche,

J'imagine que c'est parce que l'évènement OnCreate appelle la procedure correspondante avant que la TForm ne soit créée, où qqc dans ce genre.

En tout cas, merci beaucoup.
Bonne fin de journée.
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
42
Oui c'est ça
en fait si dans le DPR tu inverses l'ordre de creation
 DebugForm avant Form1 ça devrait aussi fonctionner

 
@+
Cirec

<hr siz="" />