Bonjour,
Je suis sous Delphi 6 PE (oui, je sais - c'est vieux...) et je développe une vaste DLL avec des fonctions de support pour un autre angage.
Actuellement, je développe un système d'impression paramétrée auquel je veux ajouter une fonction de prévisualisation.
Je crée donc dynamiquement une TForm à laquelle j'ajoute une TPaintBox (pour l'image d'une page d'impression en prévisualisation d'un des fichiers EMF par page).
Je crée aussi une série de TButton pour la navigation. J'affiche cette fenêtre en mode modal, et tout fonctionne très bien, mes boutons réagissent - pas de problème.
Maintenant, je voudrais aller plus loin. J'ai créé un colmposant TPreview dans lequel je réunis toutes les informations ayant trait à la prévisualisation.
Ces informations sont, entre autres:
- l'instanciation de ma fenêtre de présélection
- une TList contenant la liste de tous les fichiers EMF, un par page (indexes 1...n)
Dans l'élément avec indexe 0, je place un fichier EMF affichant juste un fond blanc avec un texte "NO DATA".
Ceci sera affiché dans la TPaintBox au début, lorsqu'aucune page n'est visualisée dans la fenêtre.
- une variable contenant l'indexe de la page actuellement visible dans la TPaintbox de ma fenêtre de visialisation
(et ayant donc la valeur 0 au départ).
La creation de ces composants ne pose pas de problème. Le compiler accepte mon code.
Mais à l'exécution, je reçois une erreur de violation de mémoire lors de la commande inherited dans le constructeur de la classe TPreviewForm.
J'ai créé un extrait très simplifié de mon code, juste le stricte nécessaire pour reproduire l'erreur, et j'ai tout mis dans une unite que voici:
Un appel de la fonction Test_derived_TForm provoque une violation de mémoire à l'endroit marqué par le commenteire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 unit KGF_unit_test_1; interface uses Forms, ExtCtrls, Classes, Dialogs; type TPreviewForm = class(TForm) PreviewPage: TPaintBox; private published constructor Create(AOwner: TComponent); reintroduce; destructor Destroy; override; end; type TPreview = class PreviewForm: TPreviewForm; published private constructor Create; destructor Destroy; override; end; implementation constructor TPreviewForm.Create(AOwner: TComponent); begin showmessage('TPreviewForm.Create 1'); inherited Create(AOwner); // <========== violation de mémoire ici !!!! showmessage('TPreviewForm.Create 2'); end; destructor TPreviewForm.Destroy; begin inherited; end; constructor TPreview.Create; begin inherited; showmessage('TPreview.Create 1'); PreviewForm := TPreviewForm.Create(nil); showmessage('TPreview.Create 2'); end; destructor TPreview.Destroy; begin inherited; end; function Test_derived_TForm: integer; stdcall; export; var Preview: TPreview; begin showmessage('start test'); Preview := TPreview.Create; showmessage('test ok'); end; exports Test_derived_TForm; end.
Il m'affiche aussi "ressource TPreviewForm non trouvé". Et ce message vient meme si je remplacela méthode Create par CreateNew our TPreviewForm.
Je ne comprends pas du tout pourquoi.
Est-ce que vous pourriez l'aider ? Je suis bloqué. Un grand MERCI d'avance
KlausGunther
Partager