Bonjour

Le programme s'exécute normalement mais à la fermeture d'une fenêtre il signale une violation d'accès.

En traçant j'ai, en supprimant une ligne dans une fonction qui s'éxécute dans la fenêtre, supprimé l'erreur. Ce qui signifierait que l'erreur serait provoquée par cette ligne sans qu'elle soit pour autant signalée durant l'exécution. Voici le code d'une partie de la fonction en question :
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
  N:=0;
  for j:=0 to Seg.NbrUsedSeg- 1 do
  begin
    if not Seg.SegVec[j].Used then inc(N);
    PixPerSeg[j]:=round(100*PixPerSeg[j]/(Size-Ex));
    Graph.Brush.Color:= Seg.SegVec[j].Color;    
    X1:= (J-N)*35;
    X2:= (Succ(J)-N)*35;
    Y1:= 100-PixPerSeg[j];
    Y2:= 100;
    R:= Rect(X1,Y1,X2,Y2);
    Graph.FillRect(R);
    Graph.Brush.Color:= clWhite;
    if Seg.SegVec[j].Used then
    begin
      Graph.TextOut(X1+10,102,IntToStr(Seg.SegVec[j].SegNo));
      Graph.TextOut(X1+10,2,IntToStr(PixPerSeg[j])+'%');
    end;
  end;
J'ai volontairement édité en rouge la ligne en question.
J'ai bien entendu vérifié que la variable "Seg.SegVec[j].Color" était correctement dimensionnée. Elle l'est.

J'ajoute que cette donction s'exécute dans une DLL et que le message qui s'affiche dans l'exécutable à la fermeture de la fenêtre me fournit une adresse dans le module de l'exécutable.

Dans la pile d'appel j'ai les informations suivantes :
:76d7fbae kernel32.RaiseException + 0x58
:0040474c NotifyNonDelphiException + $1C
:774a5f4b ntdll.RtlRaiseStatus + 0x86
:774a5dd7 ntdll.KiUserExceptionDispatcher + 0xf
:00422314 TBrush.Destroy + $18

La dernière ligne signale un problème à la destruction de TBrush, ce qui correspond avec la ligne de code qui serait responsble de l'erreur.

Je n'arrive pas à supprimer cette erreur !

Quelqu'un peut-il venir à mon secours ?