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:
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.
Un appel de la fonction Test_derived_TForm provoque une violation de mémoire à l'endroit marqué par le commenteire.
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