Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMPOSANT TSWITCHLED (UNE LED)


Information sur la source

Catégorie :Composants Classé sous : composant, graphique, led, bitmap, dynamique Niveau : Débutant Date de création : 27/09/2008 Date de mise à jour : 01/10/2008 14:00:26 Vu / téléchargé: 2 759 / 288

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (38)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bonjour, voici une LED (encore une oui je sais ...).
Mais elle s'adresse principalements à OffLake (qui avait inclus dans ses projets une gigantesque bibliothèque JEDI, en n'utilisant qu'un ou deux composants (dont une LED)).
Alors voilà, j'espère qu'elle lui sera utile (et à vous aussi !).
J'ai essayé de faire simple, tout en essayant d'aborder un maximum de points sur la création des composants.

Voici les possibilités du composant :

- 9 couleurs (Aqua, Rose, Violet, Rouge, Jaune, Vert, Bleu, Orange, Noir).
- 3 positions possibles (On, Off, Disabled).
- 1 couleur pour chaque position (pour éviter d'avoir à changer à chaque fois).
- permet à l'utilisateur du composant de récupérer les bitmaps des LEDs dans des objets TBitmap, si il en a besoin (voir GetBitmap)
- moteur d'aide integré (basique, certes, mais bon ...)

Ce source aborde plusieurs points de la création des composants :

- création d'une propriété, et de ses champs objet
- définir une méthode d'accès de propriété (voir SetLedColor ...) avec des index d'accès
- surcharger des méthodes ancêtres tout en appellant cette méthode avant son code ajouté
- utilisation d'une classe TGraphicControl
- récupérer des propriétés et méthodes (comme les évenements) depuis une classe ancêtre
- initialisation de propriétés à la création du composant (sujet de nombreuses questions)

En prime, un exemple de création dynamique de composant (dans l'exemple).

Bien sûr les LEDs ne sont pas des simples ronds entourés de noir ... ce sont des images correctes (inspirées de celles des LEDs JEDI), avec néanmoins 9 couleurs ^^

Il y a evidemment pas mal de choses à améliorer dans cette LED (comme la possibilité d'obtenir une LED plus grande) mais j'ai voulu faire simple, comme dit précédemment.
Je pense que cette source aborde suffisamment de sous-domaines pour avoir sa place dans un site comme celui-ci :)

Si quelqu'un a une idée pour masquer Width et Height dans l'éditeur de composants sans avoir à réécrire une classe ancêtre ...

J'ai fourni un exemple, avec création dynamique, et une capture d'écran de ce même exemple.

Et en prime, je vous offre le fichier INC de DelphiProg, pour détecter facilement les versions de Delphi !
J'utilise ce fichier pour reconnaitre si la version de Delphi est supérieure ou égale à D5, dans quel cas on peut utiliser Constraints, sinon, on ne le compile pas !

Un truc marrant avec ces LEDs consiste à faire un feu rouge avec un timer ou un thread pour passer le temps ^^ si vous ne savez pas quoi en faire. J'ai mis un feu rouge dans l'exemple avec un timer :)
 

Conclusion

Voilà, tous critiques, commentaires, bugs, remarques, conseils, etc ...

Codé sous Delphi 6.

Cordialement, Bacterius !
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • DelphiVersion.incTélécharger ce fichier [Réservé aux membres club]542 octets
  • Leds.RESTélécharger ce fichier [Réservé aux membres club]5 440 octets
  • LedSample.dprTélécharger ce fichier [Réservé aux membres club]Voir ce fichier275 octets
  • LedSample.resTélécharger ce fichier [Réservé aux membres club]876 octets
  • Main.dfmTélécharger ce fichier [Réservé aux membres club]2 794 octets
  • Main.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier4 817 octets
  • SwitchLed.dcrTélécharger ce fichier [Réservé aux membres club]1 724 octets
  • SwitchLed.pasTélécharger ce fichier [Réservé aux membres club]Voir ce fichier12 430 octets

Télécharger le zip

Historique

27 septembre 2008 22:13:59 :
// Ajout d'un état LedDisabled + rajout de la couleur noire
28 septembre 2008 12:06:00 :
// Ajout des optimisations de Cirec + quelques optimisations perso. Ajout d'un exemple de feu rouge avec un Timer dans l'exemple.
28 septembre 2008 14:41:41 :
// Ajout de GetBitmap
28 septembre 2008 18:01:48 :
// Elimination des fonctions de transtypage Int<>LedColor // Un peu de commentaires en plus
28 septembre 2008 19:00:33 :
// Mise à jour de l'exemple suite aux modifications du composant.
29 septembre 2008 18:04:16 :
// Ajout dynamique des noms de couleur dans les combos (avec l'idée de Cirec d'utiliser le type ordinal de TLedColor)
29 septembre 2008 20:50:17 :
// Ajout du moteur d'aide
29 septembre 2008 21:45:05 :
// Ajout des evenements OnMouseEnter et OnMouseLeave ... peuvent être utiles pour une LED
01 octobre 2008 14:00:26 :
Ajout de la détection de version Delphi + Constraints

Commentaires et avis

signaler à un administrateur
Commentaire de Bacterius le 27/09/2008 22:14:45

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 !

signaler à un administrateur
Commentaire de Bacterius le 27/09/2008 22:22:28

Ah oui je n'ai pas mis à jour l'exemple suite à la modification du composant.
Je ferai ça demain.

Cordialement, Bacterius !

signaler à un administrateur
Commentaire de Bacterius le 27/09/2008 23:42:22

Bon demain je fais l'optimisation en masse (index pour modifier les couleurs), et d'autres choses :)

Cordialement, Bacterius !

signaler à un administrateur
Commentaire de cirec le 28/09/2008 01:01:27 administrateur CS

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 ^^

signaler à un administrateur
Commentaire de blueperfect le 28/09/2008 07:50: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...

signaler à un administrateur
Commentaire de John Dogget le 28/09/2008 09:53:20

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 ...

signaler à un administrateur
Commentaire de Bacterius le 28/09/2008 11:30:04

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 !

signaler à un administrateur
Commentaire de Bacterius le 28/09/2008 12:09:26

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 !

signaler à un administrateur
Commentaire de offlake le 28/09/2008 12:45:57

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

signaler à un administrateur
Commentaire de Bacterius le 28/09/2008 13:03:12

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 !

signaler à un administrateur
Commentaire de Bacterius le 28/09/2008 14:43:48

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 !

signaler à un administrateur
Commentaire de cirec le 28/09/2008 15:30:55 administrateur CS

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 ;)

signaler à un administrateur
Commentaire de Bacterius le 28/09/2008 18:03:20

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 !

signaler à un administrateur
Commentaire de Bacterius le 28/09/2008 19:01:21

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 !

signaler à un administrateur
Commentaire de cirec le 28/09/2008 21:53:14 administrateur CS

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 ^^

signaler à un administrateur
Commentaire de Bacterius le 28/09/2008 22:37:05

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 !

signaler à un administrateur
Commentaire de offlake le 29/09/2008 00:07:02

Merci Cirec

signaler à un administrateur
Commentaire de Bacterius le 29/09/2008 18:06:19

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 !

signaler à un administrateur
Commentaire de Bacterius le 29/09/2008 20:51:21

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 !

signaler à un administrateur
Commentaire de Bacterius le 29/09/2008 21:46:53

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 !

signaler à un administrateur
Commentaire de blueperfect le 29/09/2008 22:52:56

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

signaler à un administrateur
Commentaire de JulioDelphi le 30/09/2008 09:45:46 administrateur CS

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 ? ^^

signaler à un administrateur
Commentaire de blueperfect le 30/09/2008 12:25:48

C'est pas de l'objet ton truc....

DH

signaler à un administrateur
Commentaire de pascal99 le 30/09/2008 13:12:18

Bonjour,
JulioDelphi, tu n'aurais pas la source de ce led_sans_compo par hasard ?

a+

signaler à un administrateur
Commentaire de JulioDelphi le 30/09/2008 14:14:55 administrateur CS

@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

signaler à un administrateur
Commentaire de pascal99 le 30/09/2008 14:45:22

Merci JulioDelphi,
Apres avoir ouvert ton source, tu avais effectivement tout donné dans ton message.
La simplicité a l'état pur !!!

signaler à un administrateur
Commentaire de Bacterius le 30/09/2008 17:58:47

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 !

signaler à un administrateur
Commentaire de JulioDelphi le 30/09/2008 18:19:57 administrateur CS

(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 ...

signaler à un administrateur
Commentaire de Bacterius le 30/09/2008 18:57:32

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 !

signaler à un administrateur
Commentaire de JulioDelphi le 30/09/2008 20:15:07 administrateur CS 6/10

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 !

signaler à un administrateur
Commentaire de Bacterius le 30/09/2008 21:39:09

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 !

signaler à un administrateur
Commentaire de Bacterius le 30/09/2008 21:39:57

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 !

signaler à un administrateur
Commentaire de Bacterius le 30/09/2008 21:41:15

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 !

signaler à un administrateur
Commentaire de JulioDelphi le 30/09/2008 22:47:16 administrateur CS

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 ? ^^

signaler à un administrateur
Commentaire de Bacterius le 01/10/2008 14:03:34

...
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 !

signaler à un administrateur
Commentaire de Bacterius le 01/10/2008 14:04:09

Bon sinon j'ai ajouté ... enfin voir description et mise à jour.

Cordialement, Bacterius !

signaler à un administrateur
Commentaire de JulioDelphi le 01/10/2008 14:24:48 administrateur CS

100 images de 17x17 et 100 shapes rondes de 17x17 ? ^^
Bref, ça doit se valoir. Il est plus simple de poser ton composant mais certaines personnes n'aiment pas en installer.
Je me souviens en 2005 Grandvizir avait fait un compo de progressbar : http://www.delphifr.com/codes/BARRE-PROGRESSION-RELIEF-STYLE-PRODJ_28271.aspx et j'avais fait la meme chose voir mieux dans compo externe :
http://diabloporc.free.fr/delphi/demos/demo_progressbars.jpg
http://diabloporc.free.fr/delphi/demos/demo_progressbars.exe
http://diabloporc.free.fr/delphi/demos/demo_progressbars.zip
C'est un peu des défis pour moi ^^ ça m'amuse :)

signaler à un administrateur
Commentaire de Bacterius le 01/10/2008 14:42:19

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 !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Création dynamique de composant [ par Amadeus ] Comment créer dynamique des contrôle TImage ?Je voudrais créer sur une Form autant de TImage que d'image se trouvant dans un répertoire donné. Comment composant graphique [ par calou34 ] je voudrais savoir s'il existe un composant Flèche qui aurait les même fonctionnalité que les flèche existant dans le logiciel VISIO, si possible avec effacer un graphique [ par gorneaue ] J'utilise le composant TImage pour dessiner la courbe d'une fonction.Je ne sais pas si c'est le composant adequat, mais je n'ai trouve que celui-ci :( creation dynamique de composant [ par MoveX ] comment cree t on des composants de maniere dynamique?j avais vu une source ou aucun composant netait pose sur la form mais a lexecution on creait un ajout dynamique de composant [ par jaunty ] Je souhaiterais savoir s'il est possible d'ajouter dynamiquement un contrôle : on a au départ une feuille vierge et sur OnActivate on y palce des cont Composant graphique non rectangualire [ par cedkat ] Bonjour,comment créer un composant graphique non rectangulaire, c'est-à-dire qu'il soit définit par un polygone et non pas par son rectangle de défini Type Multi-Composant d'interface graphique [ par Sylvainlefou ] Bonjour,J'aimer&#233; creer un type regroupant plusieurs composants graphique (TEdit,TButton...) &nbsp;pour pouvoir&nbsp;les g&#233;r&#233;s dynamique Impression d'un composant graphique [ par boichejc ] Bonjour, j'aimerais pouvoir imprimer un composant graphique qui est dispos&#233; dans une scrollbox. j'ai deja essayer d'imprimer le canvas du composa Scale, bordure et meilleur composant pour le graphique simple [ par plhea ] Bonjour &#224; tous,Je viens r&#233;cemment de passer &#224; Delphi apr&#232;s Visual basic.je me trouve confront&#233; &#224; un probl&#232;me.en vb, Récupérer une page dynamique ? TWebBrowser ? [ par Indelphini ] Bonjour, une 1ere constatation : j'y connais pas grd chose en r&#233;seau ! Mon pb : r&#233;cup&#233;rer ma page de stats sur geocities par programme.


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.