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

Autres IDE Pascal Discussion :

Error : TListBox.DeleteSelected [CodeTyphon]


Sujet :

Autres IDE Pascal

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Points : 158
    Points
    158
    Par défaut Error : TListBox.DeleteSelected
    Bonjour,

    Après une très longue pause, j'ai voulu reprendre mes projets sous Delphi et suis donc passé sous Code Typhon car je n'ai plus accès à des versions abordables pécunièrement pour moi.

    Après la conversion d'un projet et lors de la compilation, j'ai :

    OptionUnit.Pas(213,17):Error:identifier idents no member "DeleteSelected"

    Il s'agit d'un TListBox.DeleteSelected qui me donnait toute satisfaction sous Delphi 7 mais qui apparament n'existe plus.

    Je l'ai donc remplacé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LBSelfTest.Items.Delete(LBSelfTest.ItemIndex);
    Cela a l'air fonctionnel mais n'ai-je rien oublié? Est-ce totalement identique?

    Merci d'avance.

  2. #2
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour.

    Sous Delphi7, je n'ai jamais utilisé DeleteSelected. Et je ne connais pas son implémentation.

    Pour supprimer un item, la fonction Delete est à utiliser.
    Simplement, il serait bon de faire auparavant un contrôle de ItemIndex, car si aucun item n'est sélectionné, cela va déclencher une exception.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with LBSelfTest do
        if ItemIndex >= 0 then Items.Delete(ItemIndex);
    Cordialement
    Thierry

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne sais pas ce que faisait précisément le DeleteSelected, mais il devait probablement remettre aussi à -1 l'ItemIndex pour qu'il ne pointe pas sur l'enregistrement suivant (surtout s'il n'y en pas !)

    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with LBSelfTest do if ItemIndex>-1 then
    begin
      Items.Delete(ItemIndex);
      ItemIndex:=-1;
    end;
    Enfin, je ne sais pas si les ListBox gèrent la multisélection, à prévoir dans ce cas...
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Bonsoir bonsoir,

    je vous ai trouvé ça, dans le StdCtrls.pas de D2006 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TCustomListBox.DeleteSelected;
    var
      I: Integer;
    begin
      if MultiSelect then
      begin
        for I := Items.Count - 1 downto 0 do
          if Selected[I] then
            Items.Delete(I);
      end
      else
        if ItemIndex <> -1 then
          Items.Delete(ItemIndex);
    end;
    Enjoy,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2014
    Messages : 52
    Points : 158
    Points
    158
    Par défaut
    Merci à tous!

    Les vérifications d'existance de la ListBox ainsi que la remise à -1 de l'index étaient déjà dans le code original et cette liste n'utilise pas la multisélection mais le code est à conserver sous le coude.

    Il m'a fallu un peu de temps pour comprendre qu'il fallait tout compiler pour avoir l'IDE mais il m'a l'air très bien.

  6. #6
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour.

    Comme quoi on apprend du nouveau en répondant à une question...

    Sous Lazarus (à vérifier dans code Typhon) et Win7 (à vérifier sous Linux):

    * avec un listbox qui est MultiSelect : il n'est pas possible d'initialiser ItemIndex à -1 sauf si le ListBox est vide. S'il n'est pas vide, ItemIndex est toujours > -1 même si l'item n'est pas affiché en bleu ! (je trouve que c'est un petit bug). Conclusion: ne jamais utiliser ItemIndex pour un delete, mais bien la propriété Selected (cfr le code de JP).
    * avec un ListBox qui n'est pas MultiSelect : le delete d'un item réinitialise automatiquement ItemIndex à -1. Ceci dit, il reste préférable de le réinitialiser soi-même (pour en être certain ). Parfois, il peut être utile de repositionner l'ItemIndex à l'endroit du Delete. Dans ce cas, j'utilise ce petit 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
    procedure DeleteLBItem(AListBox: TListBox);
    var
      I: integer;
    begin
       with AListBox do
         if ItemIndex >= 0 then
         begin
            I:= ItemIndex;
            Items.Delete(I);
            if I < Count then ItemIndex:= I
               else if Count > 0 then ItemIndex:= I-1
                  else
                      ItemIndex:= -1;
        end;
    end;
    Cordialement
    Thierry

  7. #7
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour

    le code est à conserver sous le coude
    Oui, et je dirais même plus, ce qui serait bien maintenant, c'est de proposer l'ajout de la fonction dans le bug tracker de FPC.
    Il faut avoir a la dernière version trunk de FPC, ce qui n'est pas mon cas, et faire un patch.
    Je pense que cela sera accepté rapidement car cela améliorera la compatibilité avec Delphi.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

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

Discussions similaires

  1. TListBox : Chaines associées à un id caché
    Par numberwan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/04/2003, 11h27
  2. PopupMenu sur item de TListBox
    Par nmathon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/03/2003, 18h28
  3. [TEdit][TListBox]Recherche instantanée
    Par SamDaKap dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/11/2002, 22h31
  4. [CR] Print Engine error text
    Par afaraji dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/09/2002, 16h44
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 12h51

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