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
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
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
Mais dès que je pose mon composant sur une fiche et que je clique sur Choix, j'ai cette erreur
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 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.
Si quelqu'un a une idée pour réaliser ça relativement simplement je suis preneur
Partager