Directive de compilation

Résolu
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016 - 5 déc. 2007 à 14:05
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 5 déc. 2007 à 15:44
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

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
5 déc. 2007 à 15:01
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="" />
3
tilab Messages postés 95 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 26 octobre 2009 4
5 déc. 2007 à 14:18
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
0
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
5 déc. 2007 à 14:26
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;
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
5 déc. 2007 à 14:35
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="" />
0

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

Posez votre question
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
5 déc. 2007 à 14:58
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
0
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
5 déc. 2007 à 15:26
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.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
5 déc. 2007 à 15:44
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="" />
0
Rejoignez-nous