Utilisation des Fiches (TForm) avec message d'erreur violation d'accès [Résolu]

allmight 3 Messages postés lundi 1 septembre 2003Date d'inscription 3 juillet 2010 Dernière intervention - 28 avril 2010 à 10:57 - Dernière réponse : ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention
- 30 avril 2010 à 09:02
Salut tout le monde,
J'ai conçu une application (MainMenuForm)
Pour imprimer un état, je fais appel impression.Show (impression est une forme). Avec cette forme l'utilisateur a le choix d'imprimer directement (Report1.Print) ou de prévisualiser l'état. La prévisualisation personnalisée est appelée dans la forme avec prévisu.Show(previsu est une forme) et Report1.Preview (QuickReport). Quand je ferme , avec il n'y a pas d'erreur et reprend la main. Quand je ferme , il n'y a pas d'erreur. Mais quand je quitte l'application <MainMenuForm,Application.Terminate> je reçois un message "violation d'accès à l'adresse 00522CDD".


Voici à peu près l'ossature des codes
// forme principale contenant le menu qui appelle forme impression
unit MainMenuForm
uses impression;

procedure MainFormMenu.Imprimer(Sender:TObject);
begin
Impression.Show;
end;
end.

//Forme pour choix imprimer ou prévisuliser
unit Impression
uses MainMenuForm,Previsu,Report1;

procedure Impression.Previsiualiser(Sender:TObject)
begin
Previsu.Show;
Report1.Preview;
end;
end.

//Forme pour prévisualiser personalisé
unit previsu
uses Report1;

procedure previsu.Fermer(Sender:TObject);
begin
close;
end;
end.

Pouvez-vous m'indiquer l'endroit où se trouve l'erreur quand après prévisualisation je quitte l'appication ?
Merci de vos promptes réactions.
Merci
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 28 avril 2010 à 12:34
3
Merci
Salut.
Quelques recommandations :
- les forms impression et previsu devraient être ouvertes en ShowModal et non en Show simple.
- Ne pas déclarer les unités de Forms (ou incluant une référence à une Form) dans le uses général de l'unité, mais juste après implementation.

unit MainMenuForm;
//...
implementation
uses impression;

- Ne pas utiliser Application.Terminate pour une application visuelle. Il suffit de fermer la form principale du programme(Close).

A +
Thierry

Merci ThWilliam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de ThWilliam
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 28 avril 2010 à 13:43
3
Merci
Salut,

déjà il faudrait savoir ou se déclenche cette erreur "00522CDD" .. pour ce faire:

tu charges le DPR dans l'IDE si ce n'est pas encore fait. Tu mets un point d'arrêt sur la première ligne:
Application.Initialize;

et tu lances le projet "F9" ... le prog démarre et s'arrête aussitôt ---> dans l'IDE
Menu "Chercher" ---> "Erreur d'exécution..."
et dans la zone de saisie tu rentres l'adresse de l'erreur "00522CDD" --->"Ok" et te voilà sur la ligne correspondante à l'adresse.

[hr]@+Cirec
[hr]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 29 avril 2010 à 18:57
3
Merci
Salut,

En utilisant Application.Terminate, les événements OnCloseQuery et OnClose de la form principale ne sont pas appelés. Ce n'est donc pas une manière très clean de fermer l'application.

Regarde ici :

http://mc-computing.com/Languages/ProgramExit.htm
http://www.delphifr.com/forum/sujet-QUITTER-APPLICATION-DELPHI_832257.aspx

A +
Thierry

Merci ThWilliam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de ThWilliam
Meilleure réponse
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 30 avril 2010 à 09:02
3
Merci
@Cirec : quel smiley rageur !
@yannba: tu peux faire confiance à Cirec, j'ai d'ailleurs fait le même test avant de poster mon message. Pour les fenêtres ouvertes par Show simple, elles se fermeront automatiquement au Close de la fenêtre principale (même si elles sont "hide").

Je rappelle à notre ami allmight qu'il serait bon de nous dire si son problème est résolu ou non !

A +
Thierry

Merci ThWilliam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de ThWilliam
yannba 139 Messages postés mercredi 4 janvier 2006Date d'inscription 7 septembre 2010 Dernière intervention - 29 avril 2010 à 18:07
0
Merci
Salut,

- Ne pas utiliser Application.Terminate pour une application visuelle. Il suffit de fermer la form principale du programme(Close).

Vu que j'utilise toujours cette instruction, Pourquoi ??

Merci
Commenter la réponse de yannba
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 29 avril 2010 à 18:59
0
Merci
tout simplement parce que "Application.Terminate" est, ce qu'on pourrait appeler, un arrêt brutal de l'application.

Un simple teste te le démontrera.
sur un nouveau projet tu places deux boutons et tu complètes comme suit:
[hr]procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

[b]begin
  /bShowMessage('Close Event');
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
[b]begin
  /bShowMessage('Close Query Event');
end;

procedure TForm1.btn_CloseClick(Sender: TObject);
[b]begin
  /bClose;
end;

procedure TForm1.btn_TerminateClick(Sender: TObject);
[b]begin
  /bApplication.Terminate;
end;



[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 29 avril 2010 à 19:00
0
Merci
arf ... trop lent


[hr]@+Cirec
[hr]
Commenter la réponse de Cirec
yannba 139 Messages postés mercredi 4 janvier 2006Date d'inscription 7 septembre 2010 Dernière intervention - 30 avril 2010 à 08:45
0
Merci
Ok je vais voir de ce pas vos lies et tester le prog de cirec.

Je pensais que Application.terminate permettait de forcer la fermeture de toutes les Form meme si elles sont ouvertes ou cachées (instruction hide) ou si elles ont été apellées par un show au lieu de showmodal (et qu'on aurait oublié de fermer).
Commenter la réponse de yannba

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.