Bonjour,
Je tente d'écrire un composant TGroupeRadio pour différencier les couleurs et police entre le fond du composant et les items... Voir discussion précédente ici
J'ai commencé à écrire le composant et en compilant en mode conception (pas installé avec Register), j'ai le code suivant dans la création de la fiche principale:
A l'exécution, l'erreur suivante apparaît:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TForm1.FormCreate(Sender: TObject); begin GrpRadio.Create(Self); GrpRadio.Parent := Form1; end;
Mon composant n'étant pas terminé, j'ai neutralisé le code des constructeur et destructeur en laissant juste les lignes inherited
toujours pareil, je réécris un composant minimal:
Partie implémentation:
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 Unité du composant: {$mode objfpc}{$H+} interface uses Classes, SysUtils, Messages, Controls, Graphics, ExtCtrls, StdCtrls; type TSampleShape = class(TGraphicControl) private FPen: TPen; FBrush: TBrush; procedure SetBrush(Value: TBrush); procedure SetPen(Value: TPen); protected procedure Paint; published property Height default 65; property Width default 65; property Brush: TBrush read FBrush write SetBrush; property Pen: TPen read FPen write SetPen; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end;
et le programme de la fiche:
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 constructor TSampleShape.Create(AOwner: TComponent); begin inherited Create(AOwner); Width := 100; Height := 100; FPen := TPen.Create; FBrush := TBrush.Create; end; destructor TSampleShape.Destroy; begin FPen.Free; FBrush.Free; inherited Destroy; end; procedure TSampleShape.Paint; begin with Canvas do begin Pen := FPen; Brush := FBrush; Rectangle(0, 0, Width, Height); end; end; procedure TSampleShape.SetBrush(Value: TBrush); begin FBrush.Assign(Value); end; procedure TSampleShape.SetPen(Value: TPen); begin FPen.Assign(Value); end;
Donc je ne pense qu'il y ait d'erreur dans le code du composant, je soupçonne encore une directive ou une option de compilation ésotérique!
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 var Form1 : TForm1; SH : TSampleShape; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin SH.Create(Self); SH.Parent := Form1; end;
si quelqu'un sait pourquoi Self plante?
merci
Partager