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:

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;
A l'exécution, l'erreur suivante apparaît:

Nom : Aide4.jpg
Affichages : 120
Taille : 25,1 Ko

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:

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;
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
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;
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
 
var
  Form1 : TForm1;
  SH      : TSampleShape;
 
implementation
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  SH.Create(Self);
  SH.Parent := Form1;
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!

si quelqu'un sait pourquoi Self plante?
merci