COMPOSANT TSWITCHLED (UNE LED)

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 27 sept. 2008 à 22:14
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 1 oct. 2008 à 14:42
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48082-composant-tswitchled-une-led

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 14:42
Oui je vois ça ... un defi ^^
C'est toujours interessant de trouver des solutions alternatives.
Mais n'etait-ce pas toi qui m'avais fait remarquer que 81 bitmaps (pour le calcul mental) en fichiers ça faisait usine à gaz ?
Je trouve que 1 image et 1 shape ça fait un peu crade comme code ^^
Mais sinon, je ne savais pas que les Shapes pouvaient se fusionner avec en dessous !
C'est cool ça ^^ je vais pouvoir m'amuser ^^

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 14:04
Bon sinon j'ai ajouté ... enfin voir description et mise à jour.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
1 oct. 2008 à 14:03
...
J'ai fait pareil de mon côté :

100 Images + 100 Shape = 4432 Ko // Mais j'ai pas fait la procédure ni ajouté les bitmaps

100 LEDs = 3762 Ko

Hmm ...

Cordialement, Bacterius !
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
30 sept. 2008 à 22:47
Je viens de poser 100 fois ton composant sur une fiche, je regarde la place en mémoire occupée : 3400k
J'ai ensuite fait 100 shape et 100 timage avec une image transparente dedans et une procedure pour les couleurs : 3200k
Qui est lourd ? ^^
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
30 sept. 2008 à 21:41
Ah oui juste un truc :
si je ne me trompe pas, le composant est juste une instance du code que j'ai écrit pour la LED ?
C'est à dire que les tableaux constante ne seront pas recréés sur chaque composant, mais appelés par chaque instance ?
Donc sur 40 LEDs sur une form, seul 1 tableau de constante sera déclaré pour tous ?
Je crois que c'est ça mais je ne suis pas sur ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
30 sept. 2008 à 21:39
Sinon c'est toujours une connaissance de plus, savoir qu'on peut fusionner une couleur avec un TShape et les pixels derrière ^^ Ca peut aider du monde ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
30 sept. 2008 à 21:39
Ouais mais bon ... ton simple code ... 1 fichier bitmap, 1 TImage, 1 TShape, un peu lourd tout ça ...
C'est sûr que ça peut aller plus vite avec un shape avec Brush fixé à blending AND, ^^
Evidemment installer un composant c'est lourd, mais avec un projet avec 20 LEDs elle devient vite lourde avec 20 shapes et 20 images :'(

Cordialement, Bacterius !
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
30 sept. 2008 à 20:15
Nan, ton composant est très bien dans la forme, dans dans le fond je ne trouve pas car il est vite rattrapé par du simple code.
Oui j'utilise une bitmap, toi aussi non ? ^^
Je donne les couleurs a des TShape sous les bitmap transparents, l'effet est le meme et le choix de couleur est plus grand.
Oui, ma ligne de code ne ferait pas long feu ici ^^ lol

Bien vu pour ton compo néanmoins !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
30 sept. 2008 à 18:57
Ouais mais tu utilises quand même un bitmap, et tu lui donnes des couleurs.
(encore une fois) tu viens de casser ma source ...

[cherche quelque chose à dire]

Ah !

Néanmoins, ta ligne de code présente moins d'intêret, du point de vue de la programmation, que mon composant.
De plus, une ligne de code est assez limite en termes de quantité, pour pouvoir être admis en tant que source.
^^

Sinon, c'est toujours plus simple, pour ceux qui n'auraient pas envie d'utiliser mon composant.
Bien vu JulioDelphi ^^

Cordialement, Bacterius !
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
30 sept. 2008 à 18:19
(encore une fois) Lis moi avant de répondre :)
Tu aurais vu mon adresse du screen
http://diabloporc.free.fr/delphi/demos/led_sans_compo.jpg
et moi, je vois les meme led que toi ...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
30 sept. 2008 à 17:58
Ben ouais mais tu n'auras jamais les beaux bitmaps, avec un reflet de lumière ...
C'est ça qui fait de mon composant plus qu'une ellipse avec des bords noirs ...
Sans le reflet de lumière c'est différent ... :'(

Cordialement, Bacterius !
cs_pascal99 Messages postés 24 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 20 janvier 2009
30 sept. 2008 à 14:45
Merci JulioDelphi,
Apres avoir ouvert ton source, tu avais effectivement tout donné dans ton message.
La simplicité a l’état pur !!!
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
30 sept. 2008 à 14:14
@Bluperfect : ce n'est pas de l'objet ? c'est a dire ?
Mon but était d'obtenir un résultat le plus proche possible de son composant SANS son composant, juste les compos de base de delphi.
Reussi ou pas ?

@pascall99 : Euh, si je l'ai même déjà donnée dans mon post au dessus ! Une seule ligne de code.
Voici en plus l'image de la diode et une propriété à modifier :
et tu mets "Transparent=true" sur les 3 TImage.
Les 3 TShape étant des cercles sans bord posés SOUS les TImages transparentes.
Puis pour finir les TShapes sont nommés "ShapeON" "ShapeOFF" et "ShapeDIS".
Ces 3 noms sont le HINT des Colorbox.
Bon ok je fais un zip (l'image est dedans) ...
http://diabloporc.free.fr/delphi/demos/led_sans_compo.zip
cs_pascal99 Messages postés 24 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 20 janvier 2009
30 sept. 2008 à 13:12
Bonjour,
JulioDelphi, tu n'aurais pas la source de ce led_sans_compo par hasard ?

a+
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
30 sept. 2008 à 12:25
C'est pas de l'objet ton truc....

DH
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
30 sept. 2008 à 09:45
Salut !
Alors moi j'avoue je n'ai pas encore lu le code ni les commentaires mais je propose ça :

Screen : http://diabloporc.free.fr/delphi/demos/led_sans_compo.jpg
Exe : http://diabloporc.free.fr/delphi/demos/led_sans_compo.exe

La même chose que toi mais sans aucun composant externe.
Juste 3 TGroupBox, 3 TShape, 3 TImage, 3 TColorBox, 3 TLabel et une seule ligne de code dans le onchange des colorbox :
(FindComponent((Sender as TColorBox).Hint) as TShape).Brush.Color:= (Sender as TColorBox).Selected;

De plus, on peut mettre toutes les couleurs et pas seulement 9.
Reste à faire 3 procédure si on veut faire des positions on, off, disa...
Des commentaires ? ^^
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
29 sept. 2008 à 22:52
Tiens, à propos de OnMuseEnter et OnMouseLeave, un truc utile :

Cacher le curseur après un délai d'inactivité, et le rétablir après un mouvement !

DH
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 sept. 2008 à 21:46
Bon, j'ai intégré les évenements OnMouseEnter et OnMouseLeave (j'ai suivi les instructions de mon bouquin Borland avec mes evenements perso, et je me suis légèrement inspiré de la TextImage de Guillemouze pour l'idée ^^).
Ces evenements peuvent être utiles pour une LED ... (quand on pointe la souris dessus on change la LED de couleur ... enfin vous voyez le truc).

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 sept. 2008 à 20:51
Bon voilà, le composant possède un petit moteur d'aide bien à lui.
GetLedElementHelp.
J'ai repris ton idée des tableaux constante Cirec, pour écrire directement la définition et le nom.
Voilà ...
Ca ne servira probablement à rien, au fond, mais c'est un entraînement supplémentaire ^^

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
29 sept. 2008 à 18:06
Voilà Cirec, j'ai ajouté ta boucle ordinale, en la commentant (pour bien montrer que j'ai compris le principe) et en modifiant juste le formattage (le 1 >> Pink) ne me plaisait pas, j'ai remplacé par des listes de cette façon :

(0) Aqua
(1) Pink
(2) Purple
(3) Red
...

C'est sûr que c'est plus pratique, plus besoin d'aller modifier la liste des 3 combos lorsqu'on ajoute une couleur.

Je n'ai pas mis à jour la capture mais je pense que vous avez compris.

Cordialement, Bacterius !
offlake Messages postés 190 Date d'inscription mercredi 3 septembre 2008 Statut Membre Dernière intervention 17 janvier 2009
29 sept. 2008 à 00:07
Merci Cirec
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 sept. 2008 à 22:37
Oui je mets tout le code en anglais, je trouve que c'est plus conventionnel, plus pratique, et plus professionnel ^^

Sinon, il est tard, je mettrai ça demain apres-midi :)

Merci encore Cirec je n'y aurais jamais pensé à Ord.

Cordialement, Bacterius !
Utilisateur anonyme
28 sept. 2008 à 21:53
Ceci:
TLedColor=(lcAqua, lcPink, lcPurple, lcRed, ...

est de type ordinal, tu peux donc faire : aInt :Ord(lcAqua); // aInt 0 aInt :Ord(lcPurple); // aInt 2
etc. etc.

et sinon regarde ce que tu peux faire avec l'exemple que je t'ai donné:
(vide tes deux ComboBox (OnCombo & OffCombo)et remplace le code du OnCreate par celui-ci)
procedure TMainForm.FormCreate(Sender: TObject);
var I: TLedColor;
begin
for I := Low(TLedColor) to High(TLedColor) do
begin
OnCombo.Items.Add(Format('%d >> %s', [Ord(I), StrLedColor[I]]));
OffCombo.Items.Add(Format('%d >> %s', [Ord(I), StrLedColor[I]]));
end;

DoubleBuffered := True;

OnLedComp := TSwitchLed.Create(Self);
OnLedComp.Left := 6; // Création dynamique du ON
OnLedComp.Top := 14;
OnLedComp.LedState := lsOn;
OnLedComp.Parent := OnBox;
OnCombo.ItemIndex := Ord(OnLedComp.OnColor);

OffLedComp := TSwitchLed.Create(Self);
OffLedComp.Left := 7; // Création dynamique du OFF
OffLedComp.Top := 14;
OffLedComp.LedState := lsOff;
OffLedComp.Parent := OffBox;
OffCombo.ItemIndex := Ord(OnLedComp.OffColor);
end;

voilà plus besoin d'écrire ça en dur ... et c'est tellement plus simple

Les couleurs ne sont plus en Français ... mais là c'est toi qui avait choisi de nommer les ressources en Anglais ^^
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 sept. 2008 à 19:01
Bon voilà, l'exemple est mis à jour.
On peut maintenant modifier les 3 valeurs (OnColor, OffColor, DisabledColor) des LEDs depuis l'exemple.
Le feu rouge est toujours là :)

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 sept. 2008 à 18:03
Voilà c'est fait.
En fait, j'avais besoin d'une de ces fonctions pour une version surchargée de GetBitmap, et j'ai pas pensé à virer l'autre.
Puis après ton message, je me suis rendu compte que la version de GetBitmap avec Index était inutile comparée à celle avec Color.
Donc voilà c'est fait.
J'ai ajouté quelques commentaires en plus ...

Cordialement, Bacterius !
Utilisateur anonyme
28 sept. 2008 à 15:30
Mais non !!!
qu'est ce que tu fais ^^

vires moi ces deux procedures "IntToLedColor & LedColorToInt" ... je les ai pas virés pour que tu les remettes à la première occase. Ö

regarde comment j'ai fait dans la procedure "SetLedBmp"
c'est exactement le même principe ;)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 sept. 2008 à 14:43
Ah j'ai ajouté GetBitmap (pour récupérer dans un objet TBitmap le bitmap LED demandé).

Et OffLake tu peux remercier Cirec, qui a fait pas mal d'optimisation (notamment dans le dessin et le stockage des bitmaps LEDs), et te remercier aussi (je n'aurais jamais eu l'idée de faire ce composant sans ta source ^^).

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 sept. 2008 à 13:03
De rien, mais dans un gros projet qui contient genre 15 leds, ne te fatigue pas à les créer dynamiquement.
Place les directement sur ta fiche, car créer 15 composants dynamiquement c'est très pénible et source d'erreurs.

Cordialement, Bacterius !
offlake Messages postés 190 Date d'inscription mercredi 3 septembre 2008 Statut Membre Dernière intervention 17 janvier 2009
28 sept. 2008 à 12:45
Ohh Bacterius c bien comme composants franchement jte felicite !!
La prochaine fois nimporte qu'elle LED je vai le créer dynamiquement en suivant te code
merci
Offlake
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 sept. 2008 à 12:09
Bon voilà, tout ça a été arrangé, j'ai ajouté des petites optimisations perso en passant.

John Dogget j'ai pensé à toi, je n'ai pas mis le thème WindowsXP dans l'exemple (tu as toujours un écran noir après ...) ^^

"tu as la folie des composants en ce moment ...." oui c'est vrai ... mais je découvre juste, j'ai envie d'approfondir.

Sinon, pour la création des 9 bitmaps à chaque Paint, c'était car j'avais peur que les bitmaps ne soient pas libérés à la destruction du composant, si je les mettait en propriété globale (si jamais on kill une application avec une LED dedans ...), mais je crois que Destroy est appellé de toute façon non ? Même avec un Kill ?

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
28 sept. 2008 à 11:30
Oui, sauf que quand on poste une source, qui est sans nul doute très interessante (voir sources OffLake) et qu'on utilise une JVCL complète pour en utiliser qu'une LED et 1 bouton XP, je pense qu'il est plus préférable de coder ces 2 compos :)
Surtout pour ceux qui ont des difficultés à installer la JVCL.

Je vais appliquer les idées de Cirec.

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
28 sept. 2008 à 09:53
Tu mets un TBevel entre les deux, et tu lui mets une hauteur de 2 ;)

Bon sinon, c'est effectivement très bien de créer ses propres composants pour ses propres besoins.
Mais pour ceux qui comme moi n'ont pas envie de réinventer la roue à chaque fois, les packs e composants sont vraiment très utiles.

La JVCL en particulier est un outils (open-source) extraordinaire qui offre des compos qu'on ne trouve pas ailleurs.
Je comprends très bien qu'il soit preferable de se servir des compos de base Delphi pour poster ici, mais pour d'autres projets il n'y as pas de raisons de s'en priver ...
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
28 sept. 2008 à 07:50
A propos de composants :

Comment tirer un trait entre deux TComponents sur un TForm dans l'EDI ?

Si quelqu'un sait...ça m'interresse...
Utilisateur anonyme
28 sept. 2008 à 01:01
tu as la folie des composants en ce moment ....

avant que tu fasses une mise à jour je tiens à te dire que la voie utilisée n'est pas la bonne ...
tu recharges continuellement toutes les images pour libérer de suite après (dans la procedure Paint) et il y a pas mal de code inutile.

Je te propose donc une autre version plus efficace dans la gestion des bitmaps et leurs index :

**********************************************************************************
unit SwitchLed;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, Graphics, Menus;

type
TLedColor=(lcAqua, lcPink, lcPurple, lcRed, lcYellow, lcGreen,
lcBlue, lcOrange, lcBlack); // Type couleur de la LED
TLedState=(lsOn, lsOff, lsDisabled); // Type état de la LED

TLedBmp = array[TLedState] of TBitmap;
const
StrLedColor : array[TLedColor] of String = ('Aqua', 'Pink', 'Purple', 'Red',
'Yellow', 'Green', 'Blue', 'Orange', 'Black');//
type
TSwitchLed = class(TGraphicControl)
private
{ Déclarations privées }
FOnColor: TLedColor; // Champ objet OnColor
FOffColor: TLedColor; // Champ objet OffColor
FDisabledColor: TLedColor; // Champ objet DisabledColor
FLedState: TLedState; // Champ objet LedState
FAllowChanges: Boolean; // Champ objet AllowChanges
FLedBmp: TLedBmp;
FVersion, FAuthor: String; // Champs objet de la version et de l'auteur
procedure SetOnLedColor(Value: TLedColor); // Procédure définition OnColor
procedure SetOffLedColor(Value: TLedColor); // Procédure définition OffColor
procedure SetDisabledLedColor(Value: TLedColor); // Procédure définition DisabledColor
procedure SetLedState(Value: TLedState); // Procédure définition LedState
procedure SetLedBmp(const Idx: TLedState; Value: TLedColor);
protected
{ Déclarations protégées }
public
{ Déclarations publiques }
constructor Create(AOwner: TComponent); override; // Constucteur hérité
destructor Destroy; override;
procedure Paint; override; // Dessin du composant hérité

property Version: String read FVersion; // Propriétés cachées version et auteur
property Author: String read FAuthor;
published
{ Déclarations publiées }
property OnColor: TLedColor read FOnColor write SetOnLedColor; // Propriété OnColor
property OffColor: TLedColor read FOffColor write SetOffLedColor; // Propriété OffColor
property DisabledColor: TLedColor read FDisabledColor write SetDisabledLedColor; // Propriété DisabledColor
property LedState: TLedState read FLedState write SetLedState; // Propriété LedState
property AllowChanges: Boolean read FAllowChanges write FAllowChanges; // Propriété AllowChanges

property OnClick;
property OnContextPopup;
property OnDblClick;
property OnStartDrag;
property OnDragOver;
property OnEndDrag; // On remet tous les évenements hérités
property OnDragDrop;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock; // Je ne suis pas sûr pour les docks ...
property OnEndDock;
property PopupMenu; // On remet le popupmenu
property ShowHint; // On remet ShowHint
property Visible; // On remet Visible
end;

procedure Register;

implementation

{$R Leds.res}

procedure Register;
begin
RegisterComponents('Bacterius', [TSwitchLed]); // Recensement du composant
end;

constructor TSwitchLed.Create(AOwner: TComponent);
begin
inherited Create(AOwner); // Constructeur hérité
// Parent := TWinControl(AOwner); // Le parent sera un transtypage de AOwner
FOnColor := lcGreen; // Couleur ON par défaut
FOffColor := lcRed; // Couleur OFF par défaut
FDisabledColor := lcBlack; // Couleur DISABLED par défaut
FLedState := lsOff; // Etat de la LED par défaut
FAllowChanges := True; // On autorise la modification des valeurs
FVersion := '1.3'; // On fixe la version
FAuthor := 'Bacterius'; // On fixe l'auteur
Width := 13;
Height := 13; // C'est la taille des bitmaps LEDs

SetLedBmp(lsOn, FOnColor);
SetLedBmp(lsOff, FOffColor);
SetLedBmp(lsDisabled, FDisabledColor);
end;

procedure TSwitchLed.SetOnLedColor(Value: TLedColor);
begin
if not AllowChanges then Exit; // Si on peut modifier
if Value <> FOnColor then
begin
FOnColor := Value; // On définit
SetLedBmp(lsOn, FOnColor);
Invalidate; // On redessine le tout
end;
end;

procedure TSwitchLed.SetOffLedColor(Value: TLedColor);
begin
if not AllowChanges then Exit; // Si on peut modifier
if Value <> FOffColor then
begin
FOffColor := Value; // On définit
SetLedBmp(lsOff, FOffColor);
Invalidate; // On redessine le tout
end;
end;

procedure TSwitchLed.SetDisabledLedColor(Value: TLedColor);
begin
if not AllowChanges then Exit; // Si on peut modifier
if Value <> FDisabledColor then
begin
FDisabledColor := Value; // On définit
SetLedBmp(lsDisabled, FDisabledColor);
Invalidate; // On redessine le tout
end;
end;

procedure TSwitchLed.SetLedBmp(const Idx: TLedState; Value: TLedColor);
begin
if not Assigned(FLedBmp[Idx]) then
begin
FLedBmp[Idx] := TBitmap.Create;
FLedBmp[Idx].TransparentColor := clGreen;
FLedBmp[Idx].Transparent := True; // On fixe la transparence :)
end;

FLedBmp[Idx].LoadFromResourceName(hInstance, StrLedColor[Value]);
end;

procedure TSwitchLed.SetLedState(Value: TLedState);
begin
if not AllowChanges then Exit; // Si on peut modifier
if Value <> FLedState then
begin
FLedState := Value; // On définit
Invalidate; // On redessine le tout
end;
end;

procedure TSwitchLed.Paint;
begin
if Width <> 13 then Width := 13; // On empeche de redimensionner
if Height <> 13 then Height := 13;
// On dessine
Canvas.Draw(0, 0, FLedBmp[LedState]);
end;

destructor TSwitchLed.Destroy;
var I: TLedState;
begin
for I:= Low(TLedState) to High(TLedState) do
FLedBmp[I].Free;
inherited Destroy;
end;
end.
**********************************************************************************

dans l'unité Main il y a aussi des changements
la procedure FormClose est inutile, l'affectation correcte du parent des Leds et la selection des couleurs:
**********************************************************************************
procedure TMainForm.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;

OnLedComp := TSwitchLed.Create(Self);
OnLedComp.Left := 6; // Création dynamique du ON
OnLedComp.Top := 14;
OnLedComp.LedState := lsOn;
OnLedComp.Parent := OnBox;

OffLedComp := TSwitchLed.Create(Self);
OffLedComp.Left := 7; // Création dynamique du OFF
OffLedComp.Top := 14;
OffLedComp.LedState := lsOff;
OffLedComp.Parent := OffBox;
end;

procedure TMainForm.ModifyColors(Sender: TObject);
Var
TmpColor: TLedColor;
begin
if Sender is TComboBox then // Si c'est bien un combobox alors ...
begin
if not (TComboBox(Sender).ItemIndex in [0..7]) then Exit;
// Si l'itemindex est incorrect on s'en va

TmpColor := TLedColor(TComboBox(Sender).ItemIndex);
// On définit la couleur selon l'itemindex du combobox sender

case TComboBox(Sender).Tag of
1: OnLedComp.OnColor := TmpColor; // Selon le tag du combobox on modifie le led correspondant
2: OffLedComp.OffColor := TmpColor;
end;
end;
end;
**********************************************************************************

il y a encore d'autres possibilités mais je t'en laisse un peut ^^
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 sept. 2008 à 23:42
Bon demain je fais l'optimisation en masse (index pour modifier les couleurs), et d'autres choses :)

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 sept. 2008 à 22:22
Ah oui je n'ai pas mis à jour l'exemple suite à la modification du composant.
Je ferai ça demain.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
27 sept. 2008 à 22:14
Bon, en regardant la LED de Mauricio (dans les sources en rapport), j'ai remarqué qu'il manquait un truc à ma LED : un état éteint, soit Disabled. Et une couleur noire aussi.
C'est réparé :)

Cordialement, Bacterius !
Rejoignez-nous