Téléchargé 25 fois
Vote des utilisateurs
0
0
Détails
Licence : Non renseignée
Mise en ligne le 2 février 2013
Plate-forme :
Windows
Langue : Anglais
Référencé dans
Navigation
Exemple simple de manipulation d'un TListBox
Exemple simple de manipulation d'un TListBox
Manipulation simple de Liste.
... mmmm
ça manque de description :
- quoi, quand, pourquoi, de quel façon
-> Description -> exemple -> possibilité d'utilisation -> conclusion.
ça manque de rigueur :
Aucun commentaires dans la source...
Hors c'est principalement le plus important, même si la démonstration est évidente à niveau > débutant, c'est justement le débutant qui est visé par ce genre de tuto/exemple/tricks.
Toujours commenter au moins la partie démonstrative.
Il y à de plus quelques erreurs et bourdes dans l’exécution du schéma fonctionnel (aucuns contrôles, manque de robustesse, appel récursif hasardeux), il faudrait corriger en ce sens :
la fonction pour valider les noms de fichiers :
Bon code et bonnes corrections.
ça manque de description :
- quoi, quand, pourquoi, de quel façon
-> Description -> exemple -> possibilité d'utilisation -> conclusion.
ça manque de rigueur :
- Project1.dpr, Unit1.Dfm, Unit1.Pas ... (.RES manquant, attention quand on utilise des ressources personnalisée)
-> DemoSynchroListbox.dpr -> Main.pas -> Main.dfm
et dans le code on retrouve la même chose :-> DemoSynchroListbox.dpr -> Main.pas -> Main.dfm
Code : | Sélectionner tout |
- Form1, ListBox1, Button1 ...
Hors c'est principalement le plus important, même si la démonstration est évidente à niveau > débutant, c'est justement le débutant qui est visé par ce genre de tuto/exemple/tricks.
Toujours commenter au moins la partie démonstrative.
Il y à de plus quelques erreurs et bourdes dans l’exécution du schéma fonctionnel (aucuns contrôles, manque de robustesse, appel récursif hasardeux), il faudrait corriger en ce sens :
Code : | Sélectionner tout |
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 | Procedure TForm1.ListBox1DblClick(Sender : TObject); Var So, Sn : String; // Chaine originale, Nouvelle chaine I : integer; // ItemIndex de ListBox1 EI: boolean; // Control de sortie InputBox LSn, ISn: integer; // Taille de Sn et Index dans ListBox2 pour les controls de validité const Extention = '.mp3'; // Extension des fichiers Begin I := ListBox1.ItemIndex; // Item sélectionné est bien valide if I = -1 then exit; // So et Sn par défaut = nom de la piste dans ListBox1 So := ListBox1.Items[I]; Sn := So; // Renommer la piste -> par défaut = nom de la piste dans ListBox1 repeat Sn := InputBox('Titre', 'Entrez le nom pour la piste : " '+So+' "', Sn); // Un nom de fichier ce n'est pas n'importe quoi, // pour éviter les erreur on doit contrôler ISn := ListBox2.Items.IndexOf(changeFileExt(Sn, Extention)); // Condition de sortie de la boucle EI := ((ISn = I) or (ISn = -1)) and // ne doit pas être présent dans ListBox2 validFileName(changeFileExt(Sn, Extention)); // doit être un nom de fichier valide until EI; // "Synchro ListBox1 -> ListBox2" --------------------- // Empêche la mise à jours immédiate de listBox2 ListBox2.Items.BeginUpdate; try // on met à jours les lignes manquantes while (ListBox2.Count-1) < I do ListBox2.Items.Add(''); // on oublie pas de mettre à jours l'item que l'on à renommer. ListBox2.Items[I] := changeFileExt(Sn, extention); finally // on rafraichis ListBox2 ListBox2.Items.EndUpdate; end; // fin de la synchro ----------------------------------- // si on est sur le dernier élément on sort. If I = ListBox1.Items.Count - 1 Then exit; // on sélectionne le prochain ListBox1.ItemIndex := I + 1; {//--> Dans d'un traitement automatisé de lots on passera par une boucle (For/While) et donc pas un appel récursif à une fonction/méthode donc on ne rappel rien du tout pour pas tuer la Stack avec une liste trop longue comme une banque de samples ou la mpthèques complète de l'OSP. Bon c'est sur qu'avec les mp3 se Sena ou One direction y'aurait pas de quoi péter la stack avec du récursif. Idéalement, externaliser le code de cette méthode et placer la boucle de cette façon while ListBox1.ItemsIndex < ListBox1.Items.Count-1 do begin // procedure traiterElement(aListSrc, aListDest: TStrings; aSrcIndex: integer; const aExtention: string); traiterElement(ListBox1.Items, ListBox2.Items, ListBox1.ItemIndex, '.mp3'); end; Et surtout sans avoir la possibilité de sortir de cet appel récursif ou boucle, inputbox ne fournissant pas de moyen d'indiquer que l'utilisateur veux arrêter le traitement. Il nous faudrait ici une InputBox personnalisée qui fournirais cette possibilité. <--//} End; |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function validFileName(const aFileName: string): boolean; var X,L: integer; begin L := Length(aFileName); result := (L > 1) and (L < 128)); if result then for X := 1 to L do begin result := result and not (aFileName[X] in ['\','/','<','>','*',':','?','"']); if not result then break; end; end; |
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.