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 FMX Delphi Discussion :

TListView : changer l'ordre des éléments


Sujet :

Composants FMX Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut TListView : changer l'ordre des éléments
    Il doit sûrement y avoir plus simple, mais je ne trouve pas.
    Il ne s'agit pas de trier les éléments mais de pouvoir les faire monter ou descendre d'un cran à l'aide d'un bouton.
    J'ai donc un TListView qui s'appelle lv1, je le remplis avec quelques éléments, et ensuite je souhaite réagencer les éléments comme je le souhaite.
    Voici la code que j'utilise pour remonter l'élément d'un cran (même raisonnement pour le descendre), qui ne me semble pas très performant :
    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
    procedure TForm1.bhautClick(Sender: TObject);
    var
       s: string;
       b: TBitmap;
    begin
    if lv1.ItemIndex>0 then
       begin
       b:=tbitmap.Create;
          try
          s:=lv1.Items[lv1.ItemIndex-1].text;
          b.Assign(lv1.Items[lv1.ItemIndex-1].bitmap);
          lv1.Items[lv1.ItemIndex-1].text:=lv1.items[lv1.itemindex].text;
          lv1.Items[lv1.ItemIndex-1].bitmap.assign(lv1.items[lv1.itemindex].bitmap);
          lv1.Items[lv1.ItemIndex].text:=s;
          lv1.Items[lv1.ItemIndex].bitmap.assign(b);
          lv1.ItemIndex:=lv1.ItemIndex-1;
          finally
          b.Free;
          end;
       end;
    end;
    N'y aurait-il pas une fonction qui fasse ça plus simplement ? J'ai regardé les méthodes de TlistView et de TAppearanceListView (qui représentent les items de la liste), mais je n'ai pas trouvé.

    Merci de vos réponses avisées !

    Bien cordialement

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Bon j'ai peut-être trouvé plus simple, sans création d'éléments séparés (text, bitmap) temporaires mais je butte sur l'affectation des différents éléments du TLisViewItem un par un.
    N'y aurait-il pas un moyen d'affecter tous les éléments d'un coup ?
    Comme cela par exemple itemtempo:=lv1.items[lv1.itemindex] ?
    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
    procedure TForm1.bhautClick(Sender: TObject);
    var
       itemtempo: TListViewItem;
    begin
    if lv1.ItemIndex>0 then
       begin
       itemtempo:=lv1.Items.Insert(lv1.ItemIndex-1);
       itemtempo.Text:=lv1.Items[lv1.ItemIndex].text;
       itemtempo.bitmap:=lv1.Items[lv1.ItemIndex].bitmap;
       lv1.ItemIndex:=lv1.ItemIndex-2;
       lv1.Items.Delete(lv1.ItemIndex+2);
       end;
    end;
     
    procedure TForm1.bbasClick(Sender: TObject);
    var
       itemtempo: TListViewItem;
    begin
    if lv1.ItemIndex<lv1.ItemCount-1 then
       begin
       itemtempo:=lv1.Items.Insert(lv1.ItemIndex+2);
       itemtempo.Text:=lv1.Items[lv1.ItemIndex].text;
       itemtempo.bitmap:=lv1.Items[lv1.ItemIndex].bitmap;
       lv1.Items.Delete(lv1.ItemIndex);
       lv1.ItemIndex:=lv1.ItemIndex+1;
       end;
    end;

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    As-tu essayé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lv1.items[lv1.itemindex].Index := lv1.items[lv1.itemindex].Index - 1;
    Vu que la propriété est modifiable, on peut espérer que cela soit pour cela.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    As-tu essayé ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lv1.items[lv1.itemindex].Index := lv1.items[lv1.itemindex].Index - 1;
    Vu que la propriété est modifiable, on peut espérer que cela soit pour cela.
    Ben j'avais essayé et ça ne marche pas, il ne se passe rien.
    J'ai essayé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lv1.Items[lv1.ItemIndex].Index:=lv1.itemindex-1;
    et ça ne marche pas non plus.
    En fait quelle que soit la valeur affectée à index elle n'est pas prise en compte.

    Dans le source cette propriété est commenté comme suit :
    /// <summary>Index of this item in TListView.Adapter</summary>

    Je n'ai pas compris à quoi servait cette propriété.
    C'est quoi le TListView.Adapter ?

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    On trouve rapidement cette fonction avec la recherche fmx TListView exchange item et cela ressemble assez à votre second code

    https://docwiki.embarcadero.com/Libr...ypes.TListItem et https://docwiki.embarcadero.com/Libr....TListViewItem sont respectivement l'ancêtre et le dérivé.

    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
    procedure ExchangeListViewItems(listView: TListView; const i, j: Integer);
    var
      tempLI: TListItem;
    begin
      listView.Items.BeginUpdate();
      try
        tempLI := TListItem.Create(listView.Items);
        try
          tempLI.Assign(listView.Items.Item[i]);
          listView.Items.Item[i].Assign(listView.Items.Item[j]);
          listView.Items.Item[j].Assign(tempLI);
        finally
          tempLI.Free();
        end;
      finally
        listView.Items.EndUpdate();
      end;
      listView.Items[i].Selected := False;
      listView.Items[j].Selected := True;
      listView.Items[j].MakeVisible(True);
    end;
    c'est mieux un code commun

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.bhautClick(Sender: TObject);
    begin
      if lv1.ItemIndex > 0 then
       ExchangeListViewItems(lv1,  lv1.ItemIndex,  lv1.ItemIndex - 1);
    end;
     
    procedure TForm1.bbasClick(Sender: TObject);
    begin
      if (lv1.ItemIndex >= 0) and (lv1.ItemIndex < lv1.ItemCount - 1) then
       ExchangeListViewItems(lv1,  lv1.ItemIndex,  lv1.ItemIndex + 1);
    end;
    Je ne l'ai pas testé, je bosse jamais en FMX, je n'en ai même jamais fait.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    J'avais tapé ma recherche en français et ce sujet n'était pas ressorti ... ou je ne l'avais pas vu.
    En fait ce que je n'arrivais pas à faire c'était le TlistViewItem.create car je voulais passer par Assign, mais impossible sans cette création.
    Je n'arrivais pas à trouver la bonne syntaxe car apparemment il faut passer par TListItem.create qui est l'ancêtre.
    J'ai compris maintenant, et ça me servira de méthodes pour de futures recherches.

    Merci pour cette solution que je vais mettre en oeuvre dès que possible.

    Bien cordialement.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Avec ce code je me heurte au problème que TLisItem (ou TLstViewItem) n'a pas de méthode Assign.
    Le code du site du lien ne fonctionne pas (au moins en delphi 11)
    C'est peut-être en VCL ? Oui je viens de vérifier, en VCL ça existe bien.
    C'est bizarre que FMX ne prévoit pas ce genre de chose ...

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je commence à reprendre du service après une interruption "no code".

    Ce qui me surprend dans la question, c'est l'utilisation d'un TListview (que, perso, j'utilise plutôt avec des sources de données) et pas d'un TListBox.

    Il y a peut-être là quelque chose qui m'échappe ?

    Toujours est-il qu'avec un TListbox c'est assez facile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm25.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Single);
    begin
    var litem:=Listbox1.ItemByPoint(X,Y);
    var i :=litem.Index;
    if ssShift in Shift then i:=MaxIntvalue([0,i-1])
       else if ssctrl in Shift then i:=MinIntvalue([listbox1.Count-1,i+1]);
    litem.index:=i;
    end;
    le seul truc qui m'ennuie, c'est le focus sur l'item qui ne reste pas sur l'item déplacé
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Ne connaissant quasiment ni l'un ni l'autre je pensais qu'il était préférable d'utiliser TListView pour les images mais si on peut mettre une image dans chaque élément d'un TListBox je vais voir si ce n'est pas plus simple.
    Mais en regardant le code je trouve ça assez compliqué par rapport à ma méthode, ou alors je n'ai pas compris ... il semblerait que l'opération se fasse directement en clic-drag sur l'élément souhaité alors ? Car moi je traitais avec des boutons haut/bas. Je vais étudier le plus pratique.
    Merci.

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour, pour l'option TListbox il faudra passer par un style pour y mettre tous les éléments désirés (image, texte, etc.)
    Les premiers XE n'avaient pas de Listview, c'est mon premier tutoriel que tu devrais lire
    https://delphi.developpez.com/tutori...iremonkey-xe4/

    J'avoue que, utilisant plus les listes pour des données, je laisse l'ordre en fonction de ma requête ou table, et utilise livebindings pour faire les relations. Je n'avais jamais songé à l'utilisation d'un Tlitsview pour un remplissage "à la main". Après essai, j'ai eu le déplaisir de ne pas avoir la fonction ItembyPoint pour ce composant (d'un autre côté, je n'en avais jamais eu besoin)

    Mais en regardant le code, je trouve ça assez compliqué par rapport à ma méthode
    je ne fais que changer l'index de l'élément. Je ne savais pas vraiment quelle direction tu voulais prendre donc j'ai utilisé le clic sur l'élément à déplacer en fonction du ShifState. Utiliser des boutons à l'intérieur de chaque élément (possible, mais un peu plus complexe) demandait plus de code et surtout déjà un style, ce que je voulais éviter. J'avoue ne pas avoir pensé à des boutons en dehors de la liste
    Et non, ce n'est pas du dragdrop, ce qui serait d'ailleurs un truc marrant à faire

    Le seul truc qui me gêne ce n'est pas le déplacement, mais la perte de focus sur l'élément déplacé. Je vais peut-être fouiller un peu de ce côté là.
    De même j'ai voulu mettre en place des images via un TListImage, afin de fignoler la démo, mais j'avoue que je suis rouillé et pourtant je suis sûr de l'avoir fait pour le programme qui avait déclenché le processus de la rédaction du tutoriel.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour, pour l'option TListbox il faudra passer par un style pour y mettre tous les éléments désirés (image, texte, etc.)
    Alors l'hésitation sera assez vite réglée car je ne supporte pas les styles et je me refuse à les utiliser. Je trouve ça beaucoup trop rigide, comme moi qui suis psycho-rigide sur le sujet des styles

    Mais je vais quand même y jeter un coup d'oeil ... dès qu'ON me laissera la disponibilité pour me repencher sur le sujet. (Je vous laisse deviner qui est ON)

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par navyg Voir le message
    Alors l'hésitation sera assez vite réglée car je ne supporte pas les styles (Je vous laisse deviner qui est ON)
    Sauf que tu les utilises sans le savoir, et là, je ne parle pas de feuille de style, mais d'un style pour item de liste, ce qui permet tout un tas de choses.
    Considère ce type de style comme un cadre (TFrame) qui sera utilisé au sein d'une boite déroulante (TVerticalScrollBox) et tu as alors ton TListBox. Tu peux d'ailleurs très bien passer par ce type d'objet.


    Mon père me serinait une phrase d'un de ses enseignants "on, pronom indéfini, on, pour moi, est un c.n"
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Mon père me serinait une phrase d'un de ses enseignants "on, pronom indéfini, on, pour moi, est un c.n"
    Non, pas du tout !
    D'abord c'est pas un mais une et ça fait 47 ans qu'on est marié donc je suis habitué ... Je sais très bien qui commande

    Tout vient à point ... après avoir fait ce qu'on me demande ;o)

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Sauf que tu les utilises sans le savoir, et là, je ne parle pas de feuille de style, mais d'un style pour item de liste, ce qui permet tout un tas de choses.
    Considère ce type de style comme un cadre (TFrame) qui sera utilisé au sein d'une boite déroulante (TVerticalScrollBox) et tu as alors ton TListBox. Tu peux d'ailleurs très bien passer par ce type d'objet.
    Plus sérieusement, je vois bien que lorsqu'on positionne les éléments du TListViewItem en mode conception, on fabrique une sorte de modèle ou de style.
    D'ailleurs j'ai beaucoup de mal à comprendre comment ça fonctionne exactement et je procède par tâtonnement, mais au bout de beaucoup d'efforts on arrive à quelque chose.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Sur le TListBox, il y a une procedure ItemsExchange qui fait facilement un échange entre deux items, mais ça n'existe pas dans le TListView (bizarre ...)
    Mais la mise en forme de l'item est bien plus simple sur le TListView, donc finalement, j'en reste à ma méthode que j'ai un peu "standardisé".
    J'ai essayé d'affecter les différentes propriétés dans une boucle, mais je dois mal le faire car ça ne marche pas. Ce n'est peut-être pas possible ?
    J'ai laissé cette tentative commentée.
    Donc j'ai affecté toutes les propriétés qui me semblaient utiles, mais ça ne me paraît "pas très bien".
    Cela étant, ça fonctionne et la sélection est conservée, je vais en rester là je pense.

    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
    procedure TForm1.LviExchange(lv: TListView; sens: integer);
    var
       itemtempo: TListViewItem;
     
       procedure DoExchange;
       begin
       //for var i:=0 to lv.items[lv.ItemIndex].Count-1 do
       //   begin
       //   itemtempo.Objects[i].assign(lv.Items[lv.ItemIndex].Objects[i]);
       //   end;
       itemtempo.IndexTitle:=lv.Items[lv.ItemIndex].IndexTitle;
       itemtempo.ImageIndex:=lv.Items[lv.ItemIndex].ImageIndex;
       itemtempo.Text:=lv.Items[lv.ItemIndex].text;
       itemtempo.bitmap:=lv.Items[lv.ItemIndex].bitmap;
       itemtempo.detail:=lv.Items[lv.ItemIndex].detail;
       itemtempo.Accessory:=lv.Items[lv.ItemIndex].Accessory;
       itemtempo.ButtonText:=lv.Items[lv.ItemIndex].ButtonText;
       itemtempo.Checked:=lv.Items[lv.ItemIndex].Checked;
       end;
     
    begin
       case sens of
       -1:
          begin
          if lv.ItemIndex>0 then
             begin
             itemtempo:=lv.Items.Insert(lv.ItemIndex-1);
             DoExchange;
             lv.ItemIndex:=lv.ItemIndex-2;
             lv.Items.Delete(lv.ItemIndex+2);
             end;
          end;
       1:
          begin
          if lv.ItemIndex<lv.ItemCount-1 then
             begin
             itemtempo:=lv.Items.Insert(lv.ItemIndex+2);
             DoExchange;
             lv.Items.Delete(lv.ItemIndex);
             lv.ItemIndex:=lv.ItemIndex+1;
             end;
          end;
       end;
    end;
     
    procedure TForm1.bhautClick(Sender: TObject);
    begin
    lviexchange(lv1, -1);
    end;
     
    procedure TForm1.bbasClick(Sender: TObject);
    begin
    lviexchange(lv1, 1);
    end;

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par navyg Voir le message
    Sur le TListBox, il y a une procedure ItemsExchange qui fait facilement un échange entre deux items, mais ça n'existe pas dans le TListView (bizarre ...)
    Intéressant, je ne connaissais pas cette procédure. Pas étonnant toutefois qu'elle ne soit pas présente dans le TListview plutôt orienté données selon moi. Néanmoins je me demande si l'ancêtre commun ne le permettrait pas piste à creuser

    Je me demande pourquoi tu reprends le "dessin" de l'item dans ta procédure DoExange, mais il faut que je fasse des essais pour ça.

    P.S. j'avais bien compris qui était le on, mais chaque fois que je vois un "on" je pense à cette citation de mon père.
    j'ai la même à la maison qui toutefois prend en compte mes handicaps et joue (un peu trop) les infirmières
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Néanmoins je me demande si l'ancêtre commun ne le permettrait pas

    .....

    Je me demande pourquoi tu reprends le "dessin" de l'item dans ta procédure DoExange, mais il faut que je fasse des essais pour ça.
    Concernant l'ancêtre commun, je ne pense pas. J'ai essayé de m'inspirer du code de la procédure ItemsExchange, mais il y a trop de notions propres au TListBox non implémentées dans le TListView, qui est lui orienté données, mais qui correspond bien mieux à ce que je veux faire par ailleurs.

    Si j'essaye de faire simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    itemtempo:=lv.items[lv.ItemIndex]
    ça ne fonctionne pas.

    Et il n'y a pas de procedure assign qui permettrait par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    itemtempo.assign(lv.items[lv.ItemIndex])
    J'ai bien essayé une boucle sur tous les objets mais ça provoque des erreurs (code commenté)

    J'ai donc fait une copie objet par objet sinon ça n'est pas transféré.

    Je suis preneur d'une solution plus simple, complète et élégante si elle existe.

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

Discussions similaires

  1. Changer l'ordre des Items de Menu.
    Par Ivynox dans le forum C#
    Réponses: 3
    Dernier message: 29/11/2007, 15h49
  2. Réponses: 3
    Dernier message: 06/08/2006, 10h44
  3. [Thunderbird] changer l'ordre des comptes
    Par Eusebius dans le forum Thunderbird
    Réponses: 2
    Dernier message: 26/07/2006, 09h08
  4. Rajout colonne - changer l'ordre des colonnes ?
    Par Coptere dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/09/2005, 10h56
  5. changer l'ordre des dates dans table
    Par lordyan dans le forum Requêtes
    Réponses: 11
    Dernier message: 14/01/2005, 11h12

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