DEPLACER LES ITEMS D'UNE LISTBOX VERS UNE AUTRE PAR DRAG AND DROP

florenth - 30 déc. 2007 à 20:45
Delphiphi Messages postés 12 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 25 novembre 2008 - 25 sept. 2008 à 11:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45225-deplacer-les-items-d-une-listbox-vers-une-autre-par-drag-and-drop

Delphiphi Messages postés 12 Date d'inscription vendredi 1 décembre 2006 Statut Membre Dernière intervention 25 novembre 2008
25 sept. 2008 à 11:39
J'ai m... pendant 2-3 heures avant de tomber sur ton code.
Bravo ! Excellent ! C'est exactement ce dont j'avais besoin ;-)
Juste une petite chose : serait-il possible une fois qu'un item a été déplacé de ListBox1 vers ListBox2 de la laisser visible dans la ListBox1 mais en grisé pour montrer qu'on ne peut plus d'envoyer vers la ListBox2
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
14 janv. 2008 à 08:29
amiga68 > lol !
J'avais même pas fait gaffe.
Comme quoi, quand on est pris par la programmation, on ne pense plus qu'à ça... ^^
amiga68 Messages postés 54 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 21 décembre 2009
14 janv. 2008 à 06:20
:) Japee

Merci pour le code !!! Me servira çui-là !

Ps Evite de mettre des phrases telles que "Ça marche très bien avec des objets, mais également si l'on ne manipule que des strings.", si mon épouse passe j'aurai l'aire con à lui expliquer que c'est de la programmation !
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
9 janv. 2008 à 00:16
Hello Delphiprog,

J'avais pourtant lancé une recherche pour être sûr de ne pas poster en double... et je n'avais pas vu ton code.
Je vais étudier tout ça tranquillement, car là (Bruni^^) j'étais passé à autre chose et il faut que je me replonge dans le sujet.
Je note au passage le "DeleteSelected". Diantre, je veux que ça allège le code, je ne sais pas comment je suis passé à côté...
Joyeuses Pâques à toi aussi ^^

A +
Ouais, et un 31 décembre siouplait !
Juste un truc, pourquoi TObject et pas TCustomListBox ??

Tiens, j'en profite pour rebondir là-dessus: "ça permet de créer des librairies perso bien plus performantes que celles fournies par Borland (je déconne)"
=> ça m'est arrivé de créer des procédures plus rapides que les APIs de Windows (avec le TOptimisedBitmap notamment).
Et, si tu veux, on se fait un VCL perso avec que des composants utiles et pratiques (pcq ya des trucs dont je ne me sers jamais) qui serait de plus thread-safe, performante et jolie. Ben quoi, on peut rêver, non ?

Joyeuses fêtes à toi aussi et à tous ceux qui passeront par ici.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
31 déc. 2007 à 18:21
Tiens, Florenth, c'est rien que pour toi :

procedure ListBoxToListBoxDragDrop(const Sender, Source: TObject; X, Y: Integer);
var
i: Integer;
CursorPos: TPoint;
Index: Integer;
List: TStringList;
begin
List := TStringList.Create;
try
with TListBox(Source) do
begin
for i := 0 to Items.Count - 1 do
if Selected[i] then
List.AddObject(Items[i], Items.Objects[i]);
for i := Items.Count - 1 downto 0 do
if Selected[i] then
Items.Delete(i);
end;
CursorPos := Point(X, Y);
with TListBox(Sender) do
begin
Index := ItemAtPos(CursorPos, True);
for i := List.Count - 1 downto 0 do
if Index > -1 then
Items.InsertObject(Index, List[i], List.Objects[i])
else
Items.AddObject(List[List.Count - 1 - i], List.Objects[List.Count - 1 - i]);
end;
finally
List.Free;
end;
end;

J'ai passé les ListBox en const bien que ça ne soit pas indispensable.
Ça marche très bien avec des objets, mais également si l'on ne manipule que des strings.

Bonnes fêtes de fin d'année à tous.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
30 déc. 2007 à 22:35
@Florenth
S'il y avait tout dans la VCL, qu'est-ce qu'on s'ennuierait... ^^
Et puis ça permet de créer des librairies perso bien plus performantes que celles fournies par Borland (je déconne).

C'est vrai, j'ai négligé les objets, mais ce n'était pas mon propos au départ. Je vais néanmoins réfléchir à ta suggestion.
Pareil pour une procedure : j'ai voulu rester concret et simple, en pensant plus particulièrement aux débutants (le drag & drop n'a plus de secrets pour les autres).
C'est vrai qu'on pourrait penser la réalisation plus complexe par rapport à l'objectif fixé.

@Caribensila
Ce qui est moderne aujourd'hui sera désuet demain. J'ai décidé que Delphi 4 Entreprise était la version la plus aboutie jamais sortie par Borland/CodeGear... à moins que quelqu'un ne m'offre une version plus récente, auquel cas j'assouplirai peut-être mon point de vue. ^^
Sérieusement, je vérifie toujours la compatibilité avec les versions ultérieures, il n'y a jamais de problème, ce n'est hélas pas toujours le cas dans l'autre sens.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
30 déc. 2007 à 21:57
« Il faudrait pouvoir les soumettre à CodeGear [] (remarque, les possesseurs de D4 ne seraient pas contents) »

Ca en déciderait peut-être au moins un à se moderniser...
Très sympa comme idée.
La réalisation est plus courte que ce que j'aurais pensé. Mais... il manque les objets ! Tu pourrais peut-être nous prévoir un petit truc pour eux, non ?
Et sinon, pourquoi ne pas en faire une procédure du genre:
procedure MoveListboxItems(Source, Destination: TListBox);

Après ça, ce sera parfait.
C'est quand même des trucs qui manquent à la VCL je trouve, il faudrait pouvoir les soumettre à CodeGear et qu'il soient intégrés dans des mises à jours (remarque, les possesseurs de D4 ne seraient pas contents !)
Rejoignez-nous