Bonjour à tous,
je me suis fais un petit programme avec des composants crées dynamiquement et gerés dynamiquement. J'ai des exceptions assez étranges. C'est surtout les erreurs lors du "moins" qui m'intriguent. Est ce parce que mes objets ne se liberent pas ?
Voici le code. Je précise que je travaille en Delphi 7.
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private sb : TScrollBox ; gb : TgroupBox ; btPlus : TBitBtn ; btMoins : TBitBtn ; ICompteur : integer ; itop : integer ; Procedure CreeGroupBox ; Procedure OnclickPlusGB(Sender: TObject) ; Procedure OnclickMoinsGB(Sender: TObject) ; public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} Procedure TForm1.CreeGroupBox ; var i : integer ; begin if sb <> nil then freeandnil(sb) ; sb := TScrollBox.Create(Form1) ; sb.Parent := Self ; sb.Align := alClient ; for i:=0 to Icompteur-1 do begin gb := TgroupBox.Create(sb) ; gb.Parent := sb ; gb.Left := 200; gb.Width := 500 ; gb.Top := gb.Top + (200*i) ; gb.Height := 150 ; btPlus := TBitBtn.Create(gb) ; btPlus.Parent := gb ; btPlus.Top := 20 ; btPlus.Left := 100 ; btPlus.OnClick := OnclickPlusGB ; btPlus.Caption := 'Plus' ; btMoins := TBitBtn.Create(gb) ; btMoins.Parent := gb ; btMoins.Top := 80 ; btMoins.Left := 100 ; btMoins.OnClick := OnclickMoinsGB ; btMoins.Caption := 'Moins' ; end ; end ; Procedure TForm1.OnclickPlusGB(Sender: TObject) ; begin Inc(ICompteur); CreeGroupBox ; end ; Procedure TForm1.OnclickMoinsGB(Sender: TObject) ; begin if ICompteur > 1 then ICompteur := ICompteur -1 ; CreeGroupBox ; end ; procedure TForm1.FormCreate(Sender: TObject); begin ICompteur := 1 ; itop := 50 ; CreeGroupBox ; end; end.
Partager