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

[TListBox] Problème "Indice hors limite (-1)"


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut [TListBox] Problème "Indice hors limite (-1)"
    Bonsoir à tous!

    Toujours sur un petit soft de gestion de fichiers, le code est quasiment fini...Merci encore à OutOfRange d'ailleurs Wink !

    Cependant, comme c'est marqué, c'est quasiment fini: il m'arrive une tuile un peu...bizarre.

    Pour résumer, selon le mode choisi, l'utilisateur aura "en visuel" soit une listbox qui liste les fichiers du répertoire A, soit une autre listbox, qui elle, listera les fichiers du répertoire B.

    Tout s'est très bien passé pour les fichiers du répertoires A; voici une partie du code.

    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
     
    {---Procédure de création en Mode non-scripté ---------------------------------}
    procedure TForm1.RadioButtonNonScriptModeClick(Sender: TObject);
     
    Var
      IniPath : String;
      IniInfo   : TSearchRec;
     
    begin
      GroupBoxNonScriptedMode.Visible := True;
      GroupBoxScriptMode.Visible := False;
      GroupBoxCCSCP.Visible := False;
      ListBoxIniFiles.Items.Clear;
     
      IniPath := IncludeTrailingPathDelimiter(RepCCSLauncher+'Fichiers_ini');
     
      If FindFirst(IniPath+'*.*',faAnyFile,IniInfo)=0 Then
      Begin
        Repeat
     
        ListBoxIniFiles.Items.Add(IniInfo.FindData.cFileName)
     
         Until FindNext(IniInfo)<>0;
     
         FindClose(IniInfo);
      end;
    end;
     
    //Affiche les fichiers ini disponibles
    procedure TForm1.ListBoxIniFilesClick(Sender: TObject);
    begin
       LabelIniChoice.Caption:=listboxIniFiles.items[listboxIniFiles.itemindex];
    end;
     
    //Copie le fichier ini sélectionné, le renomme et lance soft.exe
    procedure TForm1.ButtonNonScriptRunClick(Sender: TObject);
     
    begin
      DeleteFile('ccs.ini');
      CopieFichier('Fichiers_ini\'+LabelIniChoice.Caption,'ccs.ini');
      ShellExecute(0,'OPEN','soft.exe', Nil, Nil, SW_SHOW);
    end;
    {------------------------------------------------------------------------------}
    Jusque là, aucun souci après moults tests! C'est cool!
    Mais là çà se gatte; voici le code pour les fichiers du répertoire B:

    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
     
    procedure TForm1.RadioButtonScriptModeClick(Sender: TObject);
    var
      SPath : String;
      SInfo: TSearchRec;
     
    begin
      ListBoxScriptFiles.Items.Clear;
      GroupBoxNonScriptedMode.Visible := False;
      GroupBoxScriptMode.Visible := True;
      GroupBoxCCSCP.Visible := False;
     
      SPath := IncludeTrailingPathDelimiter(RepCCSLauncher+'Fichiers_script');
      If FindFirst(SPath+'*.*',faAnyFile,SInfo)=0 Then
        Repeat
          ListBoxScriptFiles.Items.Add(SInfo.FindData.cFileName);
        Until
          FindNext(SInfo) <> 0;
          FindClose (SInfo);
      end;
     
    //Affiche les fichiers script disponibles
    procedure TForm1.ListBoxScriptFilesClick(Sender: TObject);
    begin
       LabelScriptChoice.Caption:=listboxScriptFiles.items[listboxScriptFiles.itemindex];
    end;
     
    //Copie le fichier script sélectionné, le renomme et lance soft.exe
    procedure TForm1.ButtonScriptRunClick(Sender: TObject);
     
    begin
      DeleteFile(script.dat);
      CopieFichier('Fichiers_script\'+LabelScriptChoice.Caption,'script.dat');
      ShellExecute(0,'OPEN','soft.exe', Nil, Nil, SW_SHOW);
    end;
    {------------------------------------------------------------------------------}
    J'ai voulu faire le kakou et faire un copier-coller de la 1ère partie et changer juste ce qu'il fallait...Bien évidemment çà n'a pas marché, alors j'ai retapé la 2nde partie du code...
    Après compilation (sans warning d'ailleurs), je lance le soft, la 1ère partie marche toujours, tandis que la seconde déconne un peu: au moment de sélectionner un des fichiers du répertoire B, je me mange un message d'erreur qui stipule "Indice de Liste Hors Limite (-1).

    Après recherche sur le forum, je trouve qq post qui mentionnent ce genre d'erreurs (erreurs d'énumérations si j'ai bien compris Embarassed), mais je ne vois pas vraiment où est le souci chez moi, puisque le code marche pour le 1er fichier...C'est à s'arracher les cheveux!!! Shocked

    Alors si quelqu'un aurait ZE solution, çà m'arrangerait bien vu que j'arrive quasiment au bout du tunnel! Wink

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    au moment de sélectionner un des fichiers du répertoire B,
    il est où le code correspondant ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Bonjour qi130!

    Pour la gestion du répertoire B, tout setrouve dans la 2ème balise "code". Je viens d'éditer le 1er message en complétant la partie manquante du code pour la 2nde balise...

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Salut, essaies avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.ListBoxScriptFilesClick(Sender: TObject);
    begin
      if ListboxScriptFiles.itemindex<>-1 then
    LabelScriptChoice.Caption:=listboxScriptFiles.items[listboxScriptFiles.itemindex];
    end;
    Bidouilleuse Delphi

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 206
    Points : 149
    Points
    149
    Par défaut
    et mode debug, quand tu arrives sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LabelScriptChoice.Caption:=listboxScriptFiles.items[listboxScriptFiles.itemindex];
    si tu inspectes, que donne les valeurs de listboxScriptFiles.count et de listboxScriptFiles.itemindex ?

  6. #6
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    En effet :
    Citation Envoyé par Aide Delphi
    Généralement, OnClick se produit quand l'utilisateur appuie puis relâche le bouton gauche de la souris alors que le pointeur de la souris est au-dessus du contrôle. Cet événement peut également se produire si :

    L'utilisateur sélectionne un élément dans une grille, une arborescence, une liste ou ...
    "au-dessus" ne veut pas dire sur un item de la listbox.

    D'ailleurs, cliquer sur une listbox vide est possible et déclenche l'événement correspondant.
    il est toujours bon de se protéger comme le suggère waskol

    et penses à protéger aussi la 1ère listbox
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 206
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par qi130
    "au-dessus" ne veut pas dire sur un item de la listbox.
    Quel est le sens de cette précision ? Je suis un peu confus, là. Autant que je sache, l'évènement OnCLick, s'il se déclanche bien quand la souris se relâche, a besoin des deux actions : appui au dessus d'un objet et relâchement sur le même objet. Donc aucun danger, par exemple, qu'en appuyant un bouton de souris au-dessus de la listbox et en le relâchant ailleurs, on ait un problème...

  8. #8
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Promeneur
    Citation Envoyé par qi130
    "au-dessus" ne veut pas dire sur un item de la listbox.
    Quel est le sens de cette précision ? Je suis un peu confus, là. Autant que je sache, l'évènement OnCLick, s'il se déclanche bien quand la souris se relâche, a besoin des deux actions : appui au dessus d'un objet et relâchement sur le même objet. Donc aucun danger, par exemple, qu'en appuyant un bouton de souris au-dessus de la listbox et en le relâchant ailleurs, on ait un problème...
    Aucun Danger ? hé bien si justement ! --> Ne jamais faire confiance au système d'exploitation, ni même au code Borland : tu n'as pas été décortiquer toutes les lignes de la VCL pour affirmer ça.

    Mais mis a part ça, tu peux très bien avoir une ListBox avec juste un item dedans. A partir de là et je pense que tu es d'accord, tu peux toujours cliquer sur ta listbox sans avoir cliquer sur l'item. Dans ce cas, ça sélectionne l'Item (ItemIndex mis à 0) ou ça ne le selectionne pas (ItemIndex reste à -1) ?

    Si tu réfléchis à ça, déjà tu va entrevoir la problématique : si l'action de Selectionner un élément de ta listbox est du à un clic de souris, hé bien le clic de souris n'entraine pas forcément la sélection d'un élément. Donc, en codant le OnClick, rien ne te dis que ItemIndex à pris une valeur comprise entre 0 et Count-1.

    En clair : cliquer, ne veux pas dire selectionner. L'action de cliquer entraine éventuellement celui de la sélection d'un élement de la listbox (si on a vraiment cliqué sur l'élément).
    Bidouilleuse Delphi

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 206
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par waskol
    En clair : cliquer, ne veux pas dire selectionner. L'action de cliquer entraine éventuellement celui de la sélection d'un élement de la listbox (si on a vraiment cliqué sur l'élément).
    Il faudra que je teste , mais ok, c'est intéressant.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Bonjour à tous!

    Je vais vous mettre le code en entier: ce sera plus peut-être plus simple pour vous expliquer:

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
     
    unit CCS_Launcher_Main;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, ShellCtrls, StdCtrls, ExtCtrls, ShellApi;
     
    type
      TForm1 = class(TForm)
        GroupBoxNonScriptedMode: TGroupBox;
        PanelConfigMain: TPanel;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        RadioButtonNonScriptMode: TRadioButton;
        RadioButtonScriptMode: TRadioButton;
        RadioButtonCCSCP: TRadioButton;
        ListBoxIniFiles: TListBox;
        Label4: TLabel;
        Label5: TLabel;
        LabelIniChoice: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        ButtonNonScriptRun: TButton;
        LabelPathVerif: TLabel;
        GroupBoxScriptMode: TGroupBox;
        Label10: TLabel;
        Label11: TLabel;
        LabelScriptChoice: TLabel;
        Label13: TLabel;
        Label14: TLabel;
        Label15: TLabel;
        ListBoxScriptFiles: TListBox;
        ButtonScriptRun: TButton;
        GroupBoxCCSCP: TGroupBox;
     
        procedure FormCreate(Sender: TObject);
        procedure RadioButtonNonScriptModeClick(Sender: TObject);
        procedure ListBoxIniFilesClick(Sender: TObject);
        procedure ButtonNonScriptRunClick(Sender: TObject);
        procedure RadioButtonScriptModeClick(Sender: TObject);
        procedure ListBoxScriptFilesClick(Sender: TObject);
        procedure ButtonScriptRunClick(Sender: TObject);
     
     
     
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      RepCCSLauncher : String;
     
    implementation
     
    {$R *.dfm}
     
     
     
     
     
     
     
     
     
     
     
    {---Création fonction Copie de Fichier--------------------------------------------------}
    function CopieFichier (Source, Cible: String) :boolean;
      var NomSource,NomCible:array[0..255]of Char;
     
      begin
      StrPCopy(NomSource,Source);
      StrPCopy(NomCible,Cible);
      result:=CopyFile(NomSource,NomCible,true);
      end;
    {------------------------------------------------------------------------------}
     
     
     
     
     
     
     
     
     
     
     
     
    {---Procédure d'initialisation de la page principale---------------------------}
    procedure TForm1.FormCreate(Sender: TObject);
     
    begin
      RepCCSLauncher := ExtractFilePath(Application.ExeName);
      LabelPathVerif.Caption := RepCCSLauncher;
      GroupBoxNonScriptedMode.Visible := False;
      GroupBoxScriptMode.Visible := False;
      GroupBoxCCSCP.Visible := False;
    end;
    {------------------------------------------------------------------------------}
     
     
     
     
     
     
     
     
     
     
     
     
    {---Procédure de création en Mode non-scripté ---------------------------------}
    procedure TForm1.RadioButtonNonScriptModeClick(Sender: TObject);
     
    Var
      IniPath : String;
      IniInfo   : TSearchRec;
     
    begin
      GroupBoxNonScriptedMode.Visible := True;
      GroupBoxScriptMode.Visible := False;
      GroupBoxCCSCP.Visible := False;
      ListBoxIniFiles.Items.Clear;
     
      //Pour être sur que la barre oblique finisse le nom du chemin
      IniPath := IncludeTrailingPathDelimiter(RepCCSLauncher+'Fichiers_ini');
     
      //Recherche de la première entrée du répertoire
      If FindFirst(IniPath+'*.*',faAnyFile,IniInfo)=0 Then
      Begin
        Repeat
        //Les fichiers sont affichés dans ListBoxIniFiles
        ListBoxIniFiles.Items.Add(IniInfo.FindData.cFileName)
     
        //Il faut ensuite rechercher l'entrée suivante
        Until FindNext(IniInfo)<>0;
     
        //Dans le cas ou une entrée au moins est trouvée il faut
        //appeler FindClose pour libérer les ressources de la recherche
        FindClose(IniInfo);
      end;
    end;
     
    //Affiche les fichiers ini disponibles
    procedure TForm1.ListBoxIniFilesClick(Sender: TObject);
    begin
       if ListboxIniFiles.itemindex<>-1 then
       LabelIniChoice.Caption:=listboxIniFiles.items[listboxIniFiles.itemindex];
    end;
     
    //Copie le fichier ini sélectionné, le renomme et lance CCS2004.exe
    procedure TForm1.ButtonNonScriptRunClick(Sender: TObject);
     
    begin
      DeleteFile('ccs.ini');
      CopieFichier('Fichiers_ini\'+LabelIniChoice.Caption,'ccs.ini');
      ShellExecute(0,'OPEN','ccs2004.exe', Nil, Nil, SW_SHOW);
    end;
    {------------------------------------------------------------------------------}
     
     
     
     
     
     
     
     
     
     
    {---Procédure de création en Mode scripté ---------------------------------}
    procedure TForm1.RadioButtonScriptModeClick(Sender: TObject);
    var
      SPath : String;
      SInfo: TSearchRec;
     
    begin
      ListBoxScriptFiles.Items.Clear;
      GroupBoxNonScriptedMode.Visible := False;
      GroupBoxScriptMode.Visible := True;
      GroupBoxCCSCP.Visible := False;
     
      SPath := IncludeTrailingPathDelimiter(RepCCSLauncher+'Fichiers_script');
      If FindFirst(SPath+'*.*',faAnyFile,SInfo)=0 Then
        Repeat
          ListBoxScriptFiles.Items.Add(SInfo.FindData.cFileName);
        Until
          FindNext(SInfo) <> 0;
          FindClose (SInfo);
      end;
     
     
      //Affiche les fichiers script disponibles.
    procedure TForm1.ListBoxScriptFilesClick(Sender: TObject);
    begin
      if ListboxScriptFiles.itemindex<>-1 then
      LabelScriptChoice.Caption := ListBoxScriptFiles.Items [ListBoxScriptFiles.itemindex];
    end;
     
    //Copie le fichier ini sélectionné, le renomme et lance CCS2004.exe
    procedure TForm1.ButtonScriptRunClick(Sender: TObject);
     
    begin
      DeleteFile('script.dat');
      CopieFichier('Fichiers_script\'+LabelScriptChoice.Caption,'script.dat');
      ShellExecute(0,'OPEN','ccs2004.exe', Nil, Nil, SW_SHOW);
    end;
    {------------------------------------------------------------------------------}
     
     
     
     
     
    end.
    En fait c'est en voulant répondre noatmment à Promeneur. je lance le mode debug et je m'aperçois alors que lorsque je souhaite utiliser le logiciel en "mode scripté" (dernière partie du code), le debugueur me renvoie aux lignes de code situées dans la partie "mode non scripté" du code,lorsque je sélectionne un des fichiers de ma TListBox situé dans le GroupBox du mode scripté !!!! Hallucinant!!!

    Pourquoi???

    Au niveau de l'interface, je dispose de trois radiobuttons, qui une fois activé affiche un groupbox et me permet de faire mon petit binz avec les fichiers...
    Donc le "mode non-scripté" marche très bien, alors que le mode scripté est inutilisable!

    Pourquoi? Il me semblait, que lors de l'écriture du code, chaque groupbox (affiché par le tick de son radiobutton) serait indépendant l'un de l'autre...Mais çà n'a pas l'air d'être le cas. Pourtant, les différents composants sont bien différenciés au niveau des noms, j'avoue ne plus comprendre grand chose maintenant...


    Sinon pour le promeneur, Je n'ai pas de ListBoxScriptFiles.Count??? Cependant le ListBoxScriptFiles.itemindex = -1.

    Et sinon pour waskol, je n'ai plus d'erreurs d'indice de liste, mais mon code pour copier l'item choisi dans la TListBox dans le labl ne marche plus...

    Dur dur...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Bonsoir!

    Je viens de ré-éplucher le code ci-dessous, afin de comprendre le pourquoi du comment du binz: (avec le mode debug)

    1) En "tickant" le 1er radiobutton, je me retrouve dans le mode d'utilisation n°1 du logiciel. La TlistBox correspondante affiche bien les trois fichiers xxxx.ini qui se trouvent dans le répertoire scanné au préalable lors du "tick" du radiobutton.
    En inspectant lors du debug, le "ListBoxIniFiles.ItemIndex" me renvoie bien une valeur de 3, normal puisqu'il y a 3 fichiers. Et je peut continuer sans problème l'éxécution du code.

    2) En "tickant" le 2nd radiobutton, j'utilise le soft dans son "mode d'utilisation" n°2. La TlistBox correspondante affiche également les 3 fichiers dat qui se trouve dans le répertoire idoine. Jusque là pas de souci. Avec le mode debug, je m'aperçois bien que le code s'éxécute au bon endroit, c'est-à-dire, dans la partie du code du fonctionnement du soft en mode n°2.
    Le 1er gros souci vient du fait que la petite flèche verte du mode debug retourne dans la section du code, relatif au fonctionnement n°1 du soft.
    De plus, après avoir choisi un des trois fichiers.dat qui se situe dans la TListBox. Le "ListBoxIniFiles.itemindex" (notez bien le ini... ) me renvoie une valeur de (-1), alors que trois fichiers (items) se trouvent bien dans la ListBoxScriptFiles ()...J'ai bien fait gaffe de cliquez sur un item et pas sur une "case" vide de la TListBox...

    J'espère ne pas avoir été trop brouillon. Je relis, relis et relis encore le code, au cas où il y aurait une petite erreur qui mettrait un gros binz dans l'éxécution du code, mais je m'embrouille de plus en plus.
    Du côté de l'interface, j'ai bien vérifié que chaque composant était situé sur le bon GroupBox (realtif à un des modes de fonctionnement du soft).

    Est ce que le souci viendrait de la propriété "Visible.Boolean" des groupbox, qui évolue suivant le radiobutton tické???

    Help me, pleaaaaaaaaaaaaaaaaaaase! [/b]

  12. #12
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Pourrais tu nous poster le dfm de ta fiche, STP ?

    Pour ce faire : clic-droit sur ta fiche, puis cliquer sur "Voir comme Texte".
    Comme ça, on pourra tester....
    Bidouilleuse Delphi

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Bonjour Waskol! Bonjour à tous!

    Je ne pourrais poster le dfm que ce soir, n'ayant pas le projet sous les yeux...Désolé. Mais dès que je rentre, je le poste!

  14. #14
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par renorx
    Cependant le ListBoxScriptFiles.itemindex = -1.

    Et sinon pour waskol, je n'ai plus d'erreurs d'indice de liste, mais mon code pour copier l'item choisi dans la TListBox dans le labl ne marche plus...

    Dur dur...
    Tout a fait normal que ça ne marche plus si ItemIndex=-1
    Bidouilleuse Delphi

  15. #15
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Promeneur
    Citation Envoyé par waskol
    En clair : cliquer, ne veux pas dire selectionner. L'action de cliquer entraine éventuellement celui de la sélection d'un élement de la listbox (si on a vraiment cliqué sur l'élément).
    Il faudra que je teste , mais ok, c'est intéressant.
    Bon, il faut que je te le dise quand même : Le OnClick dans une TListBox n'est déclenché que si on sélectionne un Item De plus, si tu cliques dans une zone vide d'un TListBox, le OnClick n'est pas déclenché (alors que tu as pourtant cliqué), du coup ItemIndex reste égal à -1.

    Mais tous les composants n'ont pas ce comportement : il faut donc se méfier de faire l'amalgame entre deux actions similaires déclenchées par le même évènement utilisateur.
    Bidouilleuse Delphi

  16. #16
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par renorx
    Bonsoir!

    Je viens de ré-éplucher le code ci-dessous, afin de comprendre le pourquoi du comment du binz: (avec le mode debug)

    1) En "tickant" le 1er radiobutton, je me retrouve dans le mode d'utilisation n°1 du logiciel. La TlistBox correspondante affiche bien les trois fichiers xxxx.ini qui se trouvent dans le répertoire scanné au préalable lors du "tick" du radiobutton.
    En inspectant lors du debug, le "ListBoxIniFiles.ItemIndex" me renvoie bien une valeur de 3, normal puisqu'il y a 3 fichiers. Et je peut continuer sans problème l'éxécution du code.

    2) En "tickant" le 2nd radiobutton, j'utilise le soft dans son "mode d'utilisation" n°2. La TlistBox correspondante affiche également les 3 fichiers dat qui se trouve dans le répertoire idoine. Jusque là pas de souci. Avec le mode debug, je m'aperçois bien que le code s'éxécute au bon endroit, c'est-à-dire, dans la partie du code du fonctionnement du soft en mode n°2.
    Le 1er gros souci vient du fait que la petite flèche verte du mode debug retourne dans la section du code, relatif au fonctionnement n°1 du soft.
    De plus, après avoir choisi un des trois fichiers.dat qui se situe dans la TListBox. Le "ListBoxIniFiles.itemindex" (notez bien le ini... ) me renvoie une valeur de (-1), alors que trois fichiers (items) se trouvent bien dans la ListBoxScriptFiles ()...J'ai bien fait gaffe de cliquez sur un item et pas sur une "case" vide de la TListBox...

    J'espère ne pas avoir été trop brouillon. Je relis, relis et relis encore le code, au cas où il y aurait une petite erreur qui mettrait un gros binz dans l'éxécution du code, mais je m'embrouille de plus en plus.
    Du côté de l'interface, j'ai bien vérifié que chaque composant était situé sur le bon GroupBox (realtif à un des modes de fonctionnement du soft).

    Est ce que le souci viendrait de la propriété "Visible.Boolean" des groupbox, qui évolue suivant le radiobutton tické???

    Help me, pleaaaaaaaaaaaaaaaaaaase! [/b]

    Arf, je pense avoir trouvé :
    Vérifies les propriétés de ta ListBox ListBoxScriptFiles dans l'inspecteur d'objet, c'est quasi certain, que dans son évènement OnClic, tu ais ListBoxIniFilesClick au lieu de ListBoxScriptFilesClick

    Sinon, une suggestion complètement différente, dans ta liste de fichiers, tu dois surement voir apparaître les répertoires courant et parent (Un point et et deux points), comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    .
    ..
    fichier1
    fichier2

    Il faudrait que tu modifies les deux lignes de ton code où tu as ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If FindFirst(SPath+'*.*',faAnyFile,SInfo)=0 Then
    par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If FindFirst(SPath+'*.*',faAnyFile-faDirectory,SInfo)=0 Then
    Bidouilleuse Delphi

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Bonsoir Waskol! Bonsoir à tous!

    Je viens de modifier les propriétés de la ListBoxScriptFiles comme tu me l'as suggéré...et çà marche!!!!
    Alors là je suis sur le cul; je ne doutais pas un instant que cela pouvait être çà...C'est bizarre comme "évènement"!

    Après réfléxion, cela vient peut-être de la 1ère fois où j'ai voulu copier la partie du code "mode non scripté" pour aller plus vite pour la 2nde partie...Je n'avais alors changé que les noms des composants. Voyant qu'il y avait des erreurs, j'avais tout effacé et tout retaper ensuite; cà doit être à ce moment que les propriétés des composants du second radiobutton n'ont pas été mis à jour, d'où tout ceci...

    On ne m'y reprendra plus à jouer la feignasse...J'aurais tapé le code tout de suite, tout simplement, peut-être n'auraispas eu ce souci. Enfin bref...
    Je viens de rajouter le -faDirectory, je ne savais que cette soustraction existait!! Sympathique égelement la précision pour la valeur du itemindex...
    Ce que j trouve quand même un peu bizarre, c'est que lorsque l'on a le petit tiret, ou les deux petits tirets (symboles des répetoires...), ils ne sont pas considérés comme des "item pleins" puisque l'itemindex ne prend visiblement pas en compte ces deux items là. C'est étonnant, car à la base, ils ne sont pas vides!!!

    Sinon, mille fois merci Waskol et à ceux qui ont participé à ce post! Merci encore!

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

Discussions similaires

  1. StringGrid Indice hors limite
    Par DURVILLE dans le forum Langage
    Réponses: 7
    Dernier message: 02/04/2011, 11h12
  2. erreur indice hors limites
    Par ryma87rh dans le forum C++
    Réponses: 9
    Dernier message: 19/03/2009, 08h55
  3. Indice hors limite(0)
    Par Morfus dans le forum Langage
    Réponses: 17
    Dernier message: 11/09/2008, 10h42
  4. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31
  5. Erreur "indice hors limite(0)" non comprise
    Par Bruno1905 dans le forum Bases de données
    Réponses: 9
    Dernier message: 10/06/2005, 12h02

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