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 :

Naviguer dans un TimageList avec un TUpDown


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Par défaut Naviguer dans un TimageList avec un TUpDown
    Voici le code qui me prend la tête depuis un non moment.
    J'ai associé un composant TUpDown à un TImage pour afficher les icones d'un TImageList et pouvoir sélectionner l'icone désirée en naviguant dans le ImageList avec les flêches.
    Le principe de base fonctionne (les icones s'affichent bien) mais les bornes minimum et maximum ne sont pas respectés, cela bloque avant la fin de la liste d'icones, et selon l'icone cliquée, pas au même endroit ! bref, la navigation dans le Timagelist est très aléatoire et dépend de la première l'icone sélectionnée... Je n'y comprend plus rien.

    Voici 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
    21
    22
    23
    24
    25
    26
    27
    28
     
    procedure TForm2.FormShow(Sender: TObject);
      UpDown1.Min := 0;
      UpDown1.Max := Form1.ImageList2.Count - 1;
      UpDown1.Increment := 1;
     
      Index := Infos^.FIcon;
        //UpDown1.Position := Index;   //Valeur en cours (???)
      DisplayIcon(Index);          //Call
    end;
     
    procedure TForm2.UpDown1ChangingEx(Sender: TObject; var AllowChange: Boolean;
      NewValue: SmallInt; Direction: TUpDownDirection);
    begin
      if Direction=updUp then inc(Index,UpDown1.increment);
      if Direction=updDown then dec(Index,UpDown1.increment);
      if Direction=updNone then exit; 
      DisplayIcon(Index)                       
    end;
     
    Procedure TForm2.DisplayIcon(Index:Integer);
    var Infos  : Pinfos;
    begin
     {Vider l'image}
      Image1.Picture.Bitmap := nil;
     {Associer l'icone de la liste d'images dans TImage1 }
      Form1.ImageList2.GetBitmap(Index, Image1.Picture.Bitmap);
    end;
    D'avance merci,

    Denis

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    Salut,
    je dirais que le problème se situe probablement dans FormShow...
    soit à la ligne "Index := Infos^.FIcon;" , vérifie que l'index correspond à la réalité ...
    soit à la ligne "UpDown1.Position := Index;", actuellement elle est en commentaire donc index et position différent !!!???
    @+

  3. #3
    Expert confirmé
    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 : 63
    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
    Par défaut
    Salut

    Ta variable Index me semble inutile puisqu'elle représente la valeur de UpDown1.Position.

    Pour simplifier j'utiliserais l'événement OnClick du TUpDown, ce qui réduit le code à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.DisplayIcon(AIndex: Integer);
    begin
     {Vider l'image}
      Image1.Picture.Bitmap := nil;
     {Associer l'icone de la liste d'images dans TImage1 }
      Form1.ImageList2.GetBitmap(AIndex, Image1.Picture.Bitmap);
    //  Label1.Caption := Format('Image n°: %d', [AIndex]);
    end;
     
    procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
    begin
      DisplayIcon(UpDown1.Position);
    end;
    Quant à Infos, je te laisse le soin de gérer ça, puisqu'on ne sait pas trop ce que c'est.

    @+ Claudius

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    Salut,
    Cl@udius je suis tout à fait d'accord avec ta remarque,
    mais le problème pour moi, c'est qu'il utilise un "multi-fenêtre" et qu'il veut lier son index à son composant TUpDown.
    En plus je dirais qu'il modifie certainement son TImageList, qui est dans une autre fenêtre où il fait une sélection grâce à ...
    Donc le problème ce situe certainement dans la gestion entre les fenêtres et composants...
    ddubois exprimera certainement mieux son problème par rapport à nos remarques et nous dira à quoi correspond Infos...
    @+

  5. #5
    Expert confirmé
    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 : 63
    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
    Par défaut
    Salut
    Citation Envoyé par nuxtay Voir le message
    mais le problème pour moi, c'est qu'il utilise un "multi-fenêtre"...
    Ah ouais tiens, je n'avais pas remarqué qu'il y avait plusieurs Forms.

    Citation Envoyé par nuxtay Voir le message
    ddubois exprimera certainement mieux son problème par rapport à nos remarques ...
    Wait and see.

    @+

  6. #6
    Membre confirmé Avatar de ddubois
    Profil pro
    Inscrit en
    Février 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 111
    Par défaut
    Marche pas mieux mais pas moins bien !
    Je vais répondre a vos questions :
    1/ Oui "Infos^.FIcon" correspond bien a la réalité puisque la première icone sur chaque TListItem cliqué est bien la bonne.

    On se dit qu'il suffirait d'incrementer/décrementer l'index du TImagelList pour que ca fonctionne ! et bien non !

    2/ Effectivement, mon composant TUpDown ainsi que mon TImage est sur un TGroupBox (GroupBox2). Est ce que ca joue ?

    J"ai intégré vos suggestions :

    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
     
    procedure TForm2.FormShow(Sender: TObject);
    var
      ListItem : TListItem;
      Infos    : Pinfos;
    begin
      ListItem := Form1.ListView1.Selected;
      Infos := Pinfos(ListItem.Data);
     
      UpDown1.Min := 0;
      UpDown1.Max := Form1.ImageList2.Count - 1;
      UpDown1.Increment := 1;
     
      DisplayIcon(Infos^.FIcon);    //Call
    end;
     
    procedure TForm2.UpDown1Click(Sender: TObject; Button: TUDBtnType);
    begin
      DisplayIcon(UpDown1.Position);
    end;
     
    Procedure TForm2.DisplayIcon(AIndex:Integer);
    var Infos  : Pinfos;
    begin
     {Vider l'image}
      Image1.Picture.Bitmap := nil;
     {Associer l'icone de la liste d'images dans TImage1 }
      Form1.ImageList2.GetBitmap(AIndex, Image1.Picture.Bitmap);
    end;
    Merci,

    Denis

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut
    Ok je comprend un peu mieux
    Par contre je ne sais pas comment est structuré ton ListView Nombre d'éléments, groupes, colonnes...
    Si tu n'as que des éléments sans groupe...et que tes numéros d'icônes correspondent au numéros d'éléments alors ceci suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm2.FormShow(Sender: TObject);
    begin
      UpDown1.Min := 0;
      UpDown1.Max := Form1.ImageList2.Count - 1;
      UpDown1.Increment := 1;
      UpDown1.Position := Form1.ListView1.Selected.ImageIndex;
      DisplayIcon(Form1.ListView1.Selected.ImageIndex);    //Call
    end;
    Mais s'ils sont dans le désordre ou que le ListView a une structure plus complexe,
    alors va falloir faire un peu plus...
    @+

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

Discussions similaires

  1. [XL-2007] Formulaire avec liste des feuilles permettant de naviguer dans le classeur
    Par blackstrange dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2012, 17h54
  2. naviguation dans une table avec bindingscontext
    Par asmar dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/03/2010, 02h02
  3. Naviguer dans Datagrid avec Suivant et precedent
    Par Namson dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/06/2009, 10h10
  4. Réponses: 2
    Dernier message: 21/08/2006, 22h27
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 16h17

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