Bonjour à tous,
voila je suis novice en création de compo.
je cherche à créer un petit compo non-visuel tout simple:
Ce composant sert à mesurer la durée d'affichage d'une form.
Je m'explique :
Dans un gros projet, j'aimerai avoir des indications sur les parties les plus utilisées, je pensais donc créer un compo non visuel que l'on poserai sur la fiche pour laquelle on veut avoir des infos.
Ce compo serait lié à un autre qui serait sur la form principale de l'appli.
Lors du create de la sous fiche, le compo dans son Create enregistre le temps de l'appel.
Lors du destroy de la sous fiche, le methode Destroy de mon compo sera également automatiquement appelé.
Je pensais donc que dans le Destroy je pouvais faire un appel au compo de la form principale pour qu'il enregistre (fichier txt, bdd, peu importe) en lui transmettant le temps calculé.
Le problème est que lorsque ma sous fiche se ferme j'ai un problème de libération de mémoire, j'ai cherché et pourtant je ne vois toujours pas.
Assez parlé, voici le code :
Même si je commente l'intégralité du code de la methode Track, le crash se produit, il doit y avoir quelque chose d'évident que je n'ai pas vu.
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 unit FormTracker; interface uses Classes, Dialogs, SysUtils, Math, MainTracker; type TFormTracker = class(Tcomponent) private FMasterTracker: TMainTracker; FCreateTime: TDateTime; FDestroyTime: TDateTIme; FTimeElapsed: Double; protected property TimeElapsed: Double read FTimeElapsed write FTimeElapsed; property CreateTime: TDateTime read FCreateTime write FCreateTime; property DestroyTime: TDateTime read FDestroyTime write FDestroyTime; public constructor Create(AOwner : TComponent); override; destructor Destroy; override; published property MasterTracker : TMainTracker read FMasterTracker write FMasterTracker; end; implementation constructor TFormTracker.Create(AOwner : TComponent); begin inherited Create(AOWner); FCreateTime := Now; end; destructor TFormTracker.Destroy; begin FDestroyTime := DestroyTime; FTimeElapsed := FDestroyTime - FCreateTime; Self.MasterTracker.Track(Self.Owner.Name, ttFormActivity, Floor(Frac(FTimeElapsed))); inherited Destroy; end; end.
Pourriez vous me donner quelques pistes pour trouvez l'origine du problème ?
Merci à vous.
Fred
Partager