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

Langage Delphi Discussion :

TimageList et Timage, problème à l'execution


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut TimageList et Timage, problème à l'execution
    Bonjour, j'essais d'afficher une image sur un Panel.

    Cela fonctionne très bien à la compilation que ce soit avec nimporte laquelle des images de mon imageList mais à l'execution, l'image n'apparait pas.

    Voici un morceau de mon code :

    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
         ImgList: TImageList 
         Img: TImage;
         (...)
         procedure ImgOnChange(valIndex:integer);
        (...)
       property ImgIndex : integer read ImgDessin  write ImgOnChange;
       (...)
    procedure TMonPanel94.ImgOnChange (ValIndex:integer);
    begin
      ImgDessin:=ValIndex;
      ImgNb:=ImgList.count;
      if ImgNB<=ImgList.count then
      begin
        if ValIndex>-1 then
        begin
          Img.Picture.Bitmap := nil;
          ImgList.GetBitmap(valIndex, Img.Picture.Bitmap);
        end;
      end;
    end;
    Puis le constructor

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Img:=TImage.create(self);
      Img.parent:=self;
      Img.setbounds(4,4,16,16);
      Img.Visible:=true;
     
      Imglist:=TImageList.create(self);

    Voila si vous trouvez ce qu'il manque ou ce qui ne fonctionne pas merci de m'aider
    Si il manque des informations demandez
    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Img et ImgList sont créés à l'exécution. Où charges-tu les images dans ImgList ?
    J'ai l'impression que tu t'emmèles et écrases le composants posés sur la fiche à la conception

    Attention aussi comme tu nommes tes propriétés, getter/setter. Lorsque tu en auras beaucoup, tu vas vite en perdre ton latin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private
      FImgIndex :integer;
    published
      property ImgIndex :integer read FImgIndex write SetImgIndex;

  3. #3
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    salut,

    J'utilise une image liste externe au composant qui comporte une image d'indice 0, un de 1 et un de 2.

    Pour Mes noms de variable j'ai essayé de toutes les commencés par l'objets avec lequels elles sont en rapport (img pour tout ce qui est image)

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Citation Envoyé par rotab Voir le message
    J'utilise une image liste externe au composant qui comporte une image d'indice 0, un de 1 et un de 2.
    Pas compris
    Tu as dans ton code Imglist:=TImageList.create(self); et c'est bien ImgList que tu utilises pour charger ton image. Tu dois donc remplir ImgList quelque part...

    Citation Envoyé par rotab Voir le message
    Pour Mes noms de variable j'ai essayé de toutes les commencés par l'objets avec lequels elles sont en rapport (img pour tout ce qui est image)
    Si tu veux mais utiliser ImgIndex, ImgDessin, ImgOnChange, bien malin celui qui y comprendra quelque chose plus tard
    Par convention, on se base sur la propriété (même si tu lui donnes un nom en rapport avec un autre élément). On aura ainsi :

    Propriété : ImgIndex
    Getter : GetImgIndex
    Setter : SetImgIndex
    variable privé : FImgIndex

    Cette écriture est la plus universelle et immédiatement compréhensible par le plus grand nombre. Après, ça ne regarde que toi

  5. #5
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    J'utilise une image liste externe au composant qui comporte une image d'indice 0, un de 1 et un de 2.
    Pas compris
    Tu as dans ton code Imglist:=TImageList.create(self); et c'est bien ImgList que tu utilises pour charger ton image. Tu dois donc remplir ImgList quelque part...

    Oui c'est ce que je voulais dire. J'ai une bibliothèque d'image externe. Dans mes propriétés je met "icones" dans images pour que ma TimageList et ma bibliothèque d'images soient liées puis je choisi quel image je veux afficher (0, 1 ou 2) avec ImgIndex


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure ImgSetList (ImgNewList: TImageList);
    (...)
    property images: TImageList read ImgList write ImgSetList;
    (...)
    procedure TMonPanel4.ImgSetList (ImgNewList : TImageList);
    begin
      if ImgList <>ImgNewList then  ImgList :=ImgNewList;
    end;


    d'ac pour le nom des variables je ferais plus gaffe

  6. #6
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Bonjour, je continue de rechercher une solution à ce problème.

    En cherchant j'ai demandé a mon programme d'envoyer un message qui me donnerait le nombre d'image dans l'imageList. (showmessage (inttostr(ImgNb))
    Avant de compiler, quand je change l'index d'image que je veux afficher il me renvoit 3.

    A l'exécution par contre le programme me renvoit 0 et ne me renvoi rien du tout quand je lui demande le nom de l'imagelist

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Citation Envoyé par rotab Voir le message
    A l'exécution par contre le programme me renvoit 0 et ne me renvoi rien du tout quand je lui demande le nom de l'imagelist
    Parce que ton code n'est pas bon !

    Tu crées une Liste d'images Imglist:=TImageList.create(self); mais ne lui donne pas de nom ni ne la rempli. Ajoute ceci pour essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Imglist := TImageList.create(self);
    Imglist.Name := 'MonImageList';
    Mais ce n'est pas ce que tu veux ! Il faut supprimer cette création et assigner le TImageList externe à la propriété ImgList, après création du TMonPanel si créé dynamiquement ou a travers l'inspecteur d'objet (pour autant que ton composant soit installé dans la palette et que la propriété ImgList soit published).

    En dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      MonPanel := TMonPanel.Create(Self);
      MonPanel.ImgList := ImageList1;
      ...
    end;

  8. #8
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Imglist := TImageList.create(self);
    Imglist.Name := 'MonImageList';
    En effet avec ce code je garde le nom mais pas les images dont j'ai besoin.



    Merci de ton aide, Je travaille sur un composant (TCustomPanel) qui est affiché dans la palette , ma propriété image est bien publiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      property Images: TImageList read ImgList write ImgSetList;
    J'ai essayé d'adapter le code que tu m'as proposé de cette façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    constructor TMonPanel94.Create(Aowner:Tcomponent);
    begin
      //on crée le panel
      inherited create(Aowner);
      setbounds(100,80,125,50);
      Images := ImgList;
    Cela entraine un message d'erreur et fait planter delphi.


    Pour résumer mon but est de créer le composant, d'ajouter ensuite dans une application l'imageList qui comporte des images et afficher ces images sur mon composant en ayant juste a changer l'index de l'image de la façon suivante.

    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
    procedure ImgOnChange(valIndex:integer);
    (...)
     property ImgIndex : integer read ImgDessin  write ImgOnChange;
    (...)
    procedure TMonPanel94.ImgOnChange (ValIndex:integer);
    begin
      if ValIndex<>ImgDessin then
      begin
            ImgDessin:=ValIndex;
        ImgNb:=ImgList.count;
         Img.Picture.Bitmap := nil;
        if ImgNB>=ImgDessin then
        begin
          if ValIndex>-1 then
          begin
            ImgList.GetBitmap(valIndex, Img.Picture.Bitmap);
                 end;
        end;
      end;
     end;

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut


    C'est dans l'événement OnCreate de la fiche qu'il faut assigner Images et pas dans le constructeur de TMonPanel.

    Citation Envoyé par rotab Voir le message
    Je travaille sur un composant (TCustomPanel) qui est affiché dans la palette , ma propriété image est bien publiée
    Alors tu devrais pouvoir remplir Images à la conception dans l'inspecteur d'objet.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Il faut rajouter une propriété du coup ??
    J'ai du mal a comprendre ça fais pas longtemps que je fais du delphi désolé.

    Oui a la conception je lie bien mon imageList et ma propriété image, c'est comme ça que je peux afficher l'icone, malheureusement il s'en va quand j'execute le programme
    En utilisant un bouton et mon composant et le petit bout de code suivant l'image apparait quand on appuis sur le bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    MonPanel941.ImgIndex:=2;
    end;
    Edit : désolé pour le double message.

  11. #11
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    As-tu supprimé cette ligne Imglist:=TImageList.create(self) ?

    Sinon, mais ton code complet ou on ne va pas s'en sortir...

  12. #12
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    J'ai essayé de la supprimer, oui mais mon programme ne tourne plus si je l'enlève.

    Voici mon code en entier,

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    unit MyPanel94;
    interface
    uses
      SysUtils, Classes,Windows, Controls, Graphics,Messages,
      ExtCtrls,StdCtrls,QGraphics,JvComponent, JvTransLED,ImgList,Dialogs,JvEdit;
    type
      TMonPanel94 = class(TCustomPanel)
      private
         {Déclarations privées}
     
         //mon edit
         Label1: Tlabel;
         //titre
         LabelTitre: string;
         //EditTextLargeur:boolean;
         LabelCouleur:Tcolor;
     
         //ma combobox
         ComboBox1: TComboBox;
       //  ComboBoxItem : Tstrings;
         ComboBoxItem : Tstrings;
     
         //fond gris
         Shape1: TShape;
     
         //ma led
         LED1: TJvTransLED;
         //led visible ou non
         LEDBoolVisible:boolean;
         //indice pour changer la couleur de la led
         LedCoul: integer;
     
         //Ma liste d'image
         ImgList: TImageList;
         //Mon emplacement d'image
         Img: TImage;
         ImgDessin:integer;///test
         ImgNb : integer;
         ImgExist : boolean;
         ImgListNom : string;
     
     
      protected
        { Déclarations protégées }
     
        procedure RedimLabel();
     
      public
        { Déclarations publiques }
     
        //On construit le composant
         constructor Create(AOwner: TComponent); override;
         //on détruit le composant
         Destructor  Destroy; override;
         //défini la couleur de la led
     
         //changement d'indice pour l'image
         procedure ImgOnChange(valIndex:integer);
         //permet de récupérer une liste d'image
         procedure ImgSetList(ImgNewList: TImageList);
     
         //On met le titre de notre composant en changeant le caption du label
         procedure LabelSetTitre(value : string);
     
         //On défini si la led doit être visible ou non
         procedure LedSetVisible (LEDvisu : Boolean);
         //défini la couleur de la led
         procedure LedSetCouleur (Coul : integer);
     
         procedure LabelSetCouleur (TitreCouleur :Tcolor);
     
         procedure ComboBoxAddItem  (item : Tstrings);
     
     
     
     
      published
     ////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////
        property Align           ; //
        property Alignment       ; //
        property Anchors         ; //
        property Autosize        ; //
        property BevelWidth      ; //
        property BiDiMode        ; //
        property BorderStyle     ; //
        property BorderWidth     ; //
        property Caption         ; //
        property Color           ; //
        property Constraints     ; //
        property Ctl3D           ; //
        property Cursor          ; //
        property DockSite        ; //
        property DragCursor      ; //
        property DragKind        ; //
        property DragMode        ; //     Propriétés d'un panel classique
        property Enabled         ; //
        property Font            ; //
        property FullRepaint     ; //
        property Height          ; //
        property HelpContext     ; //
        property HelpType        ; //
        property Left            ; //
        property Locked          ; //
        property Name            ; //
        property ParentBackground; //
        property ParentColor     ; //
        property ParentCtl3D     ; //
        property ParentFont      ; //
        property ParentShowHint  ; //
        property Showhint        ; //
        property TabOrder        ; //
        property Visible         ; //
     /////////////////////////////////////////////////////////////
     /////////////////////////////////////////////////////////////
     
        //change l'édit
        property Titre : string read LabelTitre write LabelSetTitre;
     
        //change la couleur de la led (-1 gris, 0rouge et 1bleu)
        property LedCouLeur : integer read LedCoul write LedSetCouleur;
        //led visible ou non
        property LedVisible : boolean read LEDBoolVisible write LedSetVisible;
     
        //crée la liste d'images
        property Images: TImageList read ImgList write ImgSetList;
     
        //on dessine
        property ImgIndex : integer read ImgDessin  write ImgOnChange;
        //couleur sharp
        property TitreFondCouleur : Tcolor read LabelCouleur write LabelSetCouleur;
     
        //combobox
        property ComboBItem : Tstrings read ComboBoxItem write ComboBoxAddItem;
     
      end;
     
    procedure Register;
     
    implementation
     
    procedure TMonPanel94.ComboBoxAddItem  (item : Tstrings);
    begin
      if ComboBoxItem<>item then
      begin
        ComboBoxItem:=item;
        ComboBox1.Items:=ComboBoxItem;
      end;
    end;
     
    procedure TMonPanel94.LabelSetCouleur(TitreCouleur : Tcolor);
    begin
      if LabelCouleur<>TitreCouleur then
      begin
        LabelCouleur:=TitreCouleur;
      //  Label1.Color:=TitreCouleur;    /////ca marche pas
        shape1.Brush.Color:=LabelCouleur;
        Shape1.Pen.Color:=ClBtnFace;
      end;
    end;
     
    //On prend en compte la nouvelle liste d'images
    procedure TMonPanel94.ImgSetList(ImgNewList: TImageList);
    begin
      if ImgList <> ImgNewList then
      begin
        ImgList:=ImgNewList;
        ImgListNom := ImgNewList.Name;
        ImgList.name:=ImgListNom;
      end;
    end;
     
     
    //On dessine l'image comprise dans la l'image liste, à l'intérieur du cadre délimité par l'image
    procedure TMonPanel94.ImgOnChange (ValIndex:integer);
    begin
      if ValIndex<>ImgDessin then
      begin
        ImgExist:=false;
        ImgDessin:=ValIndex;
        ImgNb:=ImgList.count;
         Img.Picture.Bitmap := nil;
        if ImgNB>=ImgDessin then
        begin
          if ValIndex>-1 then
          begin
            ImgList.GetBitmap(valIndex, Img.Picture.Bitmap);
            ImgExist:=true;
          end;
        end;
      end;
      RedimLabel;
    end;
     
     
    //On prend en compte un changement visible ou non
    procedure TMonPanel94.LedSetVisible (LEDvisu : boolean);
    begin
      if (LEDvisu<>LEDBoolVisible) then
      begin
        LEDBoolVisible:=LEDvisu;
        LED1.Visible:=LEDBoolVisible;
      end;
      RedimLabel();
    end;
     
    procedure TMonPanel94.RedimLabel();
    begin
      label1.Width:=80;
      Label1.Left:=22;
      if ImgExist=true then
      begin
        label1.Left:=Label1.left+24;
        Label1.Width:=Label1.width-24 ;
      end;
      if LED1.Visible=true then
      begin
        Label1.Width:=label1.width-25;
      end;
    end;
     
     
    //On défini la couleur de la diode
    procedure TMonPanel94.LedSetCouleur (Coul : integer);
    begin
      LedCoul := coul;
      if Ledcoul<2 then
      begin
        if ledcoul>-2 then
        begin
         case coul of
         -1 : LED1.color:= clSilver;
          0 : LED1.color:= clRed;
          1 : LED1.color := clLime;
          end;
        end;
       end;
    end;
     
    procedure Register;
    begin
      RegisterComponents('Standard', [TMonPanel94]);
    end;
     
    //on défini le teste du edit  et donc le titre de notre composant
    procedure TMonPanel94.LabelSetTitre(value : string);
    begin
      if (LabelTitre <> value) then
      begin
        LabelTitre:=value;
        Label1.Caption:=LabelTitre;
        Label1.Alignment:=taCenter;
      end;
    end;
     
     
    constructor TMonPanel94.Create(Aowner:Tcomponent);
    begin
      //on crée le panel
      inherited create(Aowner);
      setbounds(100,80,125,50);
      //Images := ImgList;
     
     
      //on initialise et on place la combobox
      ComboBox1:=TComboBox.create(self);
      ComboBox1.parent:=self;
      ComboBox1.setbounds(4,27,117,21);
     
      //On initialise l'imageliste
       Imglist:=TImageList.create(self);
       ImgList.name:=ImgListNom;
     // Imglist.Name := 'MonImageList';
     
     
      //fond gris
      Shape1:=TShape.create(self);
      Shape1.parent:=self;
      Shape1.setBounds(0,0,125,24);
      TitreFondCouleur:=$BABABA;
     
        //On initialise et on place le label
      Label1:=TLabel.create(self);
      Label1.parent:=self;
      Label1.setbounds(22,4,80,16);
      Label1.AutoSize:=false;
      Label1.alignment:=taCenter;
      Label1.Caption:='titre';
      Label1.Color:=$BABABA;
      Label1.font.Size:=9;
      Label1.Font.Style:=[Graphics.fsBold];
     
      //On itnitialise et on place le cadre de l'image
      Img:=TImage.create(self);
      Img.parent:=self;
      Img.setbounds(4,4,16,16);
      Img.Visible:=true;
     
     
      //On initialise la Led
      LED1:=TJvTransLED.create(self);
      LED1.parent :=self;
      LED1.setbounds (110,7,10,10);
      LED1.visible:=false; // sinon elle est tjr allumée
      Shape1.Pen.Color:=$BABABA;
     
     
      //On ne veut pas que le panel ait de caption
      Caption:=' ';
    end;
     
       //on détruit
      destructor TMonPanel94.Destroy;
        begin
          inherited destroy;
        end;
    end.

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    En vert, à ajouter. En rouge, à supprimer.
    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
    constructor TMonPanel94.Create(Aowner:Tcomponent);
    begin
      //on crée le panel
      inherited create(Aowner);
    
      //Avec SetBounds, le composant ne pourra pas être déplacé (position fixe en runtime)
      setbounds(100,80,125,50);
      Width  := 125;
      Height := 50;
    
      //Images := ImgList;
    
      //on initialise et on place la combobox
      ComboBox1:=TComboBox.create(self);
      ComboBox1.parent:=self;
      ComboBox1.setbounds(4,27,117,21);
    
      //On initialise l'imageliste
      Imglist:=TImageList.create(self);
      ImgList.name:=ImgListNom;
    // Imglist.Name := 'MonImageList';
    
      //Initialisé à -1 sinon assigner 0 ne fonctionnera
      //pas d'après ton test "ValIndex <> ImgDessin"
      ImgDessin := -1;
    
      //fond gris
      Shape1:=TShape.create(self);
      Shape1.parent:=self;
      Shape1.setBounds(0,0,125,24);
      TitreFondCouleur:=$BABABA;
    
      //On initialise et on place le label
      Label1:=TLabel.create(self);
      Label1.parent:=self;
      Label1.setbounds(22,4,80,16);
      Label1.AutoSize:=false;
      Label1.alignment:=taCenter;
      Label1.Caption:='titre';
      Label1.Color:=$BABABA;
      Label1.font.Size:=9;
      Label1.Font.Style:=[Graphics.fsBold];
    
      //On itnitialise et on place le cadre de l'image
      Img:=TImage.create(self);
      Img.parent:=self;
      Img.setbounds(4,4,16,16);
      Img.Visible:=true;
    
      //On initialise la Led
      LED1:=TJvTransLED.create(self);
      LED1.parent :=self;
      LED1.setbounds (110,7,10,10);
      LED1.visible:=false; // sinon elle est tjr allumée
      Shape1.Pen.Color:=$BABABA;
    
      //On ne veut pas que le panel ait de caption
      Caption:=' ';
    end;

  14. #14
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    merci c'est vrai pour le setbound j'avais pas pensé à ça.

    Par contre quand j'enlève mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Imglist:=TImageList.create(self);
    Je reçois le message suivant à l'execution :/

    Le project1.exe a provoqué une classe d'exception EAccesViolation avec le message 'violation d'accès à l'adresse 004457E8 dans le module 'Project1.exe'. Lecture de l'adresse 00000003C'. Processus stoppé. utilisez pas-à-pas ou executer pour continuer

  15. #15
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    L'erreur se produit certainement dans ImgOnChange. Il faudrait au moins tester que ImgList est valide avant de travailler dessus:

    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
    procedure TMonPanel94.ImgOnChange(ValIndex:integer);
    begin
      if ValIndex <> ImgDessin then
      begin
        ImgExist := Assigned(ImgList) and
                    (ValIndex in [0..ImgList.count -1]);
     
        if ImgExist then
        begin
          ImgDessin := ValIndex;
          Img.Picture.Bitmap := nil;
          ImgList.GetBitmap(valIndex, Img.Picture.Bitmap);
        end;
     
        RedimLabel;
      end;
    end;
    Et bien entendu (pour la Nième fois) lier l'ImageList externe avec Images depuis OnCreate de la fiche ou à travers l'inspecteur l'inspecteur d'objet

  16. #16
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Je vien d'essayer avec le code que tu m'as proposé, le résultat est le même donc je pense que l'imageListe est bien valide.


    Citation Envoyé par Andnotor Voir le message
    Et bien entendu (pour la Nième fois) lier l'ImageList externe avec Images depuis OnCreate de la fiche ou à travers l'inspecteur l'inspecteur d'objet
    Une fois que j'ai mon composant et mon imageList Je change la propriété 'image' pour y mettre mon ImageList 'icones'. Si c'est pas ça dont tu parles je n'ai pas compris.

  17. #17
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Tu as une violation d'accès, comment ça pourrait être valide (à moins que tu aies remis la ligne Imglist:=TImageList.create(self))

    Je crois pas que je puisse t'aider plus...

  18. #18
    Futur Membre du Club
    Homme Profil pro
    stagiaire développement informatique
    Inscrit en
    Juillet 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : stagiaire développement informatique

    Informations forums :
    Inscription : Juillet 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Ah oui j'avais remis cette ligne vu que j'ai une violation d'accès a chaque fois que j'exécute sans l'avoir mis


    Edit : j'ai essayé aussi avec ce bout de code si c'est ça que tu voulais dire, le résultat est le même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    MonPanel941.images:=icones;
    end;

Discussions similaires

  1. Problème d'execution URW2543
    Par itahiry dans le forum EDI
    Réponses: 3
    Dernier message: 02/12/2005, 14h46
  2. Problème d'execution de module bases de données
    Par mekdar dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/10/2005, 17h29
  3. [Tomcat][plugin]Problème d'execution de Tomcat 5
    Par Carlito_superheros dans le forum Eclipse Java
    Réponses: 14
    Dernier message: 11/03/2005, 13h56
  4. problème d'execution de JSP avec eclipse - TOMCAT
    Par Staron dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/12/2004, 21h48
  5. problème lancement executable avec winexec()
    Par semenzato dans le forum MFC
    Réponses: 5
    Dernier message: 19/01/2004, 11h48

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