IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Composant image (feux)


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Points : 38
    Points
    38
    Par défaut Composant image (feux)
    Bonjour,

    J'aimerais créer un composant qui affiche des feux (rouge, orange, vert).

    J'ai donc 3 images mais je ne sais pas comment les intégrées au composant .

    Est-ce le chemin de chaque image qui doit être placé dans une propriété non publiée ? Si oui, les images doivent toujours suivre le package ?

  2. #2
    rbh
    rbh est déconnecté
    Membre confirmé Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Points : 473
    Points
    473
    Par défaut
    Salut
    Je serais toi je les stockerai, à la conception, dans un TImageList, pour que les Bitmaps soit vraiment stockés dans le composant et pas liés à un emplacement du disque dur (qui peut changer, disparaitre, ne pas exister si tu déplois ton appli).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Je comprends pas bien ce que tu entends par "à la conception".

    La TImageList aura les images par rapport à un chemin. Comment dois-je faire pour que ce soit fait qu'une seule fois (à la conception)?

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    A la conception: pendant que tu dessines ta Form i.e. dans Delphi
    Sinon, tu as plusieurs possibilités:
    - soit, comme le dit rbh, mettre un lien vers une TImageList dans ton composant qui ira chercher par exemple l'image 0: le vert, l'image 1: l'orange, l'image 2: le rouge
    - Soit définir 3 TBitmap dans ton composant qui te serviront à charger les 3 images soit à la conception soit à l'exécution.
    - Soit mettre les 3 images en ressource
    Bon dév

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par Pedro204
    Salut
    A la conception: pendant que tu dessines ta Form i.e. dans Delphi
    Sinon, tu as plusieurs possibilités:
    - soit, comme le dit rbh, mettre un lien vers une TImageList dans ton composant qui ira chercher par exemple l'image 0: le vert, l'image 1: l'orange, l'image 2: le rouge
    - Soit définir 3 TBitmap dans ton composant qui te serviront à charger les 3 images soit à la conception soit à l'exécution.
    - Soit mettre les 3 images en ressource
    Bon dév
    Je comprends de moins en moins...

    J'aimerais avoir un composant qui, en mode conception, soit une des images.

    Ensuite, selon une propriété, l'image changerait.

    Quand charger les images dans la TImageList vu que ça a l'air LA solution ?

    Qu'entends-tu par 3 images en ressource ?

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par maredami
    Quand charger les images dans la TImageList vu que ça a l'air LA solution ?
    Non ce n'en est qu'une parmi les 3 autre que je t'ai donné
    Citation Envoyé par maredami
    Qu'entends-tu par 3 images en ressource ?
    Chaque composant a un fichier de resource lui correspondant et il est possible d'ajouter des images (ou n'importe quoi d'autre) dans ces fichiers

    Le composant pourrait donner quelque chose comme ça:
    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
     
    interface
    ...
    const
      Couleur_Vert:integer=0;
      Couleur_Orange:integer=1;
      Couleur_Rouge:integer=2;
      //Ces trois constantes sont pour éviter de se rappeler que 0 c'est vert, 1 c'est orange et 2 c'est rouge ^^
     
    type
      TCompo=class(TPaintBox)//C'est à toi de voir si cet héritage te convient
      private
        FImageList:TImageList;
        procedure SetCouleur(Value: Integer);
      protected
        procedure Paint;override;
      published
        ImageList:TImageList read FImageList;
        Couleur:integer read FCouleur write SetCouleur;
      end;
     
    implementation
    procedure TCompo.Paint;
    var t:TBitmap;
    begin
      t:=TBitmap.Create;
      FImageList.GetBitmap(FCouleur,t);//Ici peut-être vérifier que FCouleur soit bien compris entre 0 et 2
      Canvas.Draw(0,0,t);
      t.Free;
    end;
     
    procedure TCompo.SetCouleur(Value: Integer);
    begin
      if Value<>FCouleur then
      begin
        FCouleur:=Value;
        Invalidate;
      end;
    end;
    Voila donc dans ce cas, il te faut un TImageList que tu mettras dans la propriété ImageList. Dans celui-ci, il y aura les 3 images que tu veux afficher.
    Attention: code non testé...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Merci pour ton aide.

    Chaque composant a un fichier de resource lui correspondant et il est possible d'ajouter des images (ou n'importe quoi d'autre) dans ces fichiers Wink
    Où est ce fichier et comment lui ajouter des images ? C'est le fichier .dcu ?

    Le problème est que les images de la TImageList seront toujours les mêmes. J'aimerais donc les charger une bonne fois pour toute (je sais pas comment).

    Un héritage de TCustomControl peut aussi fonctionner ?

  8. #8
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par maredami
    Où est ce fichier et comment lui ajouter des images ? C'est le fichier .dcu ?
    Non c'est un fichier .res. Tu peux créer de tels fichiers avec l'éditeur d'image de Delphi. Fais nouveau puis Fichier de resources (.res)
    Ensuite, ajoute des Bitmap (Click droit, ajouter bitmap) et édite les pour les façonner comme tu le veux. Enregistre de préférence dans le répertoire de l'unité du composant.
    Ensuite, Dans la fiche de ton contrôle (le .pas) ajoute juste en dessous de implementation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {$R MonFichierResource.res}
    Evidemment, MonFichierResource.res est à remplacer par le fichier que tu as créé avec l'éditeur d'images
    Ensuite, pour les appeler, tu fais, avec des TBitmap par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      bitmap.Handle:=loadbitmap(HInstance,Resourcename);
    Bitmap étant ton TBitmap et ResourceName représente le nom que tu as donné à ta resource. Note laisse HInstance tel quel C'est une variable globale...
    Citation Envoyé par maredami
    Le problème est que les images de la TImageList seront toujours les mêmes. J'aimerais donc les charger une bonne fois pour toute (je sais pas comment).
    OK alors il faut utiliser la méthode des resources
    Citation Envoyé par maredami
    Un héritage de TCustomControl peut aussi fonctionner ?
    Bien sûr t'as essayé de remplacer? Du moment que tu as un Canvas

  9. #9
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Bonjour,

    @Pedro204

    J'ai regardé avec intérêt ton code, et je me pose une question.
    Dans ton code tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TCompo.Paint; 
    var t:TBitmap; 
    begin 
      t:=TBitmap.Create; 
      FImageList.GetBitmap(FCouleur,t);//Ici peut-être vérifier que FCouleur soit bien compris entre 0 et 2 
      Canvas.Draw(0,0,t); 
    end;
    N'est-il pas nécessaire de faire un t.Free après le Canvas.Draw, ou bien la variable t est-elle libérée à la sortie de la procédure ?

    Merci d'éclairer ma lanterne.
    @+ Claudius.

  10. #10
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Claudius40
    N'est-il pas nécessaire de faire un t.Free après le Canvas.Draw, ou bien la variable t est-elle libérée à la sortie de la procédure ?
    Tu as parfaitement raison... Désolé pour cette erreur...
    Merci d'avoir corrigé
    Je l'ajoute au code original de ce pas

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 72
    Points : 38
    Points
    38
    Par défaut
    Ça marche nickel !

    A noter que sans le t.Free, ça fonctionne également !

    Merci

  12. #12
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par maredami
    A noter que sans le t.Free, ça fonctionne également !
    Certes mais tu laissais de la mémoire en plan
    Citation Envoyé par maredami
    Merci
    Mais avec plaisir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utilisation du composant Image
    Par samy2525 dans le forum Flex
    Réponses: 3
    Dernier message: 24/12/2009, 08h27
  2. Recherche composant image miniature
    Par thebeb dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/12/2009, 08h04
  3. Composer image + texte
    Par Papy214 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/03/2009, 14h04
  4. [WD12] recherche composant image
    Par yann_72 dans le forum WinDev
    Réponses: 3
    Dernier message: 01/08/2008, 09h08
  5. composant image: problème avec setUrl
    Par sky_perrinos dans le forum NetBeans
    Réponses: 1
    Dernier message: 13/01/2008, 01h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo