3 pièce(s) jointe(s)
Ajout d'une liste items à un composant
Bonjour à tous
J'ai créer quelques composant d'affichage FMX (voir ce billet dans mon blog) et je suis en train de créer des composants de choix (boutons, interrupteur...). Parmi eux il y en a un que j'ai baptisé TSelecteur et qui agit comme une TListbox sauf qu'il aura un aspect de ce genre
Pièce jointe 594996
Naïvement j'ai fait descendre mon composant Selecteur d'un TListBox et surcharger la méthode Paint pour dessiner comme je le veux mon composant. Sauf que ça ne marche pas je passe bien dans ma méthode Paint mais il doit y avoir un appel à une autre car j’obtiens toujours à l'écran le dessin classique d'une TListbox.
Donc je suis reparti d'un ancêtre TRectangle auquel je pensais ajouter une propriété items comme elle existe pour les listbox
Pièce jointe 594997
Pour cela j'ai fouillé dans les sources de TListBox et je suis malheureusement tombé sur une suite d'héritage très complexe et j'avoue être perdu.
Au départ j'avais fait ça
Code:
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
|
unit Selecteur;
interface
uses
System.SysUtils, Couleurs, System.Classes, System.Types, System.UIConsts, FMX.Types, FMX.Controls, FMX.Objects,
FMX.Graphics, FMX.ListBox;
type
TGenre = (Circulaire, Horizontal, Vertical);
TSelecteur = class(TRectangle)
private
FGenre: TGenre;
FChoix:TStrings;
procedure setChoix(valeur:TStrings);
protected
{ Déclarations protégées }
public
constructor Create(AOwner: TComponent); override;
procedure Paint; override;
published
property Genre: TGenre read FGenre write FGenre;
property Choix: TStrings read FChoix write setChoix;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('VisuLabo', [TSelecteur]);
end;
constructor TSelecteur.Create(AOwner: TComponent);
begin
inherited;
FGenre := Horizontal;
FChoix:=TStrings.Create;
end;
procedure TSelecteur.Paint;
var
rect: TRectF;
begin
Canvas.BeginScene;
if FGenre = Horizontal then
begin
Canvas.DrawLine(TPointF.Create(0, Height / 2), TPointF.Create(Width, Height / 2), 1);
end;
Canvas.EndScene;
end;
procedure TSelecteur.setChoix(valeur: TStrings);
begin
FChoix.Assign(valeur);
end;
end. |
Mais dès que je pose mon composant sur une fiche et que je clique sur Choix, j'ai cette erreur
Pièce jointe 595001
Si quelqu'un a une idée pour réaliser ça relativement simplement je suis preneur