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

Codes sources à télécharger Delphi Discussion :

Exemple simple de manipulation d'un TListBox [Sources]


Sujet :

Codes sources à télécharger Delphi

  1. #1
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut Exemple simple de manipulation d'un TListBox
    Bonjour,

    Je vous propose un nouvel élément à utiliser : HautPage Exemple simple de manipulation d'un TListBox

    Manipulation simple de Liste.

    Qu'en pensez-vous ?
    Hiacine

    Quand on veut, on peut...

  2. #2
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    ... mmmm
    ç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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    - Form1, ListBox1, Button1 ...
    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 :

    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
    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;
    la fonction pour valider les noms de fichiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    Bon code et bonnes corrections.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

Discussions similaires

  1. Exemple simple de manipulation d'un ComboBox
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/02/2013, 21h03
  2. Réponses: 5
    Dernier message: 21/07/2006, 08h25
  3. [RMI] Exemple simple de mise en place
    Par Marc90 dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 31/05/2006, 16h17
  4. [Framework] Recherche d'exemple simple
    Par anaon dans le forum Spring
    Réponses: 4
    Dernier message: 26/04/2006, 16h08
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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