Directive de compilation [Résolu]

Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
- 5 déc. 2007 à 14:05 - Dernière réponse :
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 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.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 5 déc. 2007 à 15:01
3
Merci
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="" />

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Cirec
Messages postés
97
Date d'inscription
mercredi 25 octobre 2006
Dernière intervention
26 octobre 2009
- 5 déc. 2007 à 14:18
0
Merci
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
Commenter la réponse de tilab
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
- 5 déc. 2007 à 14:26
0
Merci
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;
Commenter la réponse de zwyx
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 5 déc. 2007 à 14:35
0
Merci
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="" />
Commenter la réponse de Cirec
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
- 5 déc. 2007 à 14:58
0
Merci
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
Commenter la réponse de zwyx
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
- 5 déc. 2007 à 15:26
0
Merci
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.
Commenter la réponse de zwyx
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 5 déc. 2007 à 15:44
0
Merci
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="" />
Commenter la réponse de Cirec

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.