CHAINLISTS, LISTE CHAINÉE

amiga68 Messages postés 54 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 21 décembre 2009 - 3 août 2009 à 05:56
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 5 août 2009 à 04:07
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/50393-chainlists-liste-chainee

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 août 2009 à 04:07
j'y reflechis...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
5 août 2009 à 01:33
Ah ouais c'est comme des add-ons qu'on branche sur la classe originale ... pratique !
Pour l'insertion des éléments, ok, je n'y avais pas pensé. Je comprends que tu ne l'aies pas intégré totalement dans l'exemple, ça aurait fait trop de boutons.
En tout cas c'est une bonne source, et je vais la garder dans mes favoris.
Qu'en-est-il de la liste chaînée cyclique ?

Cordialement, Bacterius !
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 août 2009 à 00:44
@bacterius :

cela est faisable avec CLItemInsertBefore ou CLItemInsertAfter, en leurs donnant comme item de reference un item de la liste qui est ni a la fin, ni au debut (donc pas le root).

Effectivement, AssignToList n'est pas nettoyée correctement.

TListHelper est une classe Helper, disponible uniquement depuis D2007.
les classes helpers permettent d'ajouter des methodes dans une classes sans la dériver.
fini les TList = class(Classes.TList).

on fait directement :
TListHelper = class helper for TList ...

par exemple, si je developpe une API qui prend en charge de nouveaux formats d'image ou de texte, je peux créer des classes Helpers pour :
TStrings (sera herité par TStringList, TMemo, TRichEdit etc),
pour TPicture ou TGraphic ou encore TCanvas (pour lui ajouter des fonctionnalité GDI+ ou OpenGL par exemple).

imagine ça comme ça :

TCanvasHelper = class Helper for TCanvas
procedure OpenGL;
procedure CloseGL;
procedure OpenGDIP;
procedure CloseGDIP;
procedure GLBezier(const Pts: array of TGLPoint);
procedure GPBezier(const Pts: array of TGPPointF);
end;

et hop, tout TCanvas appelé possede ces nouvelles methodes.
celui de la fiche, ceux des composants, ceux des TBitmaps etc, bref, mieux qu'une simple derivation parfois difficile et limitée.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
4 août 2009 à 23:29
Vraiment très bien, l'utilisation dans la démo est vraiment très souple (surtout la modification des éléments, c'est fluide, pas besoin de re-cliquer pour mettre à jour).
Je propose une amélioration : pouvoir insérer un élément au milieu d'une chaîne (et pas que au début où à la fin). Et peut-être inclure une gestion des listes chaînées cycliques (?), dans lesquelles le dernier élément pointe au premier, et vice versa.
Le compilateur (D7 Perso) a juste noté deux variables inutilisées (N et C) dans AssignToList.

Cordialement, Bacterius !

PS : à quoi sert "TListHelper" ? Je crois deviner qu'il s'agit d'une classe pour les versions de Delphi next-gen, mais ... ?
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
4 août 2009 à 12:56
tu t'es levé du pieds gauche cirec :) lol

j'ai modifier le code en consequence depuis ces messages ;)

j'avais omis de poser des directives dans l'unité pour ne pas compiler la class helper sous les anciennes version de Delphi.
voila voila.

sinon j'aimerais assé avoir du commentaire sur l'unité en elle même, avoir un retour sur l'utilisation, les possible ameliorations a faire ...
haaaa Florenth, comme tu me manque!

huhuhu.
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
4 août 2009 à 12:16
vous êtes des spécialistes les gars !!

il y a un projet démo pour Delphi7
et un projet démo pour Delphi2009

il suffit de charger le bon projet et d'ignorer les propriétés inconnues
au lancement et c'est tout ... il n'y a rien à modifier ... le code compile du premier coup !!
amiga68 Messages postés 54 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 21 décembre 2009
3 août 2009 à 10:00
ça marche avec tes modifs...
Je regarde ?
papyvore Messages postés 223 Date d'inscription samedi 15 novembre 2003 Statut Membre Dernière intervention 16 décembre 2021 15
3 août 2009 à 08:50
bonjour
pour d7 dans le dpr supprimer la ligne
// Application.MainFormOnTaskbar := True;

ajouter le chemin de unit ChainLists ou copier la dans le rep d7.

dans unit ChainLists
supprimer la procédure suivante et chez moi ça marche en d7.

{procedure TListHelper.AssignFromChainList(const AItem: pCLItem);
begin
CLItemAssignToList(AItem, Self);
end;}
amiga68 Messages postés 54 Date d'inscription dimanche 23 février 2003 Statut Membre Dernière intervention 21 décembre 2009
3 août 2009 à 05:56
cela a l'air sympathique, mais ne fonctionne pas sur mon pauvre delphi7 perso ?
Rejoignez-nous