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

 Delphi Discussion :

Array réorganiser après retrait


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut Array réorganiser après retrait
    bonjour, j'ai un array et un combobox
    avec des valeurs lié
    id0 de mon combo pour id0 de mon array

    si j'ai 3 valeurs dans mon combo et supprime le id1
    je me retrouve avec id0 et id1 sa réorganise

    je cherche une fonction qui réorganise un array si on lui donne le id à effacer afin d'avoir comme mon combox id0 et id1 si je vire id1
    et non id0 id2

    je trouve pas sur google vais devoir l'écrire alors que je l'est déjà vu mais je sais plus ou

    merci.

  2. #2
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    tu ne peux pas t'en sortir avec un tableau dynamique dont tu redéfinis la dimension à chaque suppression d'id avec setlenght et en recopiant son nouveau contenu ?

    @+

  3. #3
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    783
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 783
    Points : 505
    Points
    505
    Par défaut
    salut

    Il suffit de faire une copie de chaque champs du tableau dans son champs précédant de High jusqu'a l'ID et redimensionner le tableau a sa taille -1 , idem pour l'insertion mais dans l'autre sens.

  4. #4
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    salut

    Il suffit de faire une copie de chaque champs du tableau dans son champs précédant de High jusqu'a l'ID et redimensionner le tableau a sa taille -1 , idem pour l'insertion mais dans l'autre sens.
    Ah oui bien sa, moi j'avais sa:
    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
    function DelInArray(ArraySrc: Array of TServer; Id: Integer): array of tserver;
    var
      ArrayNew: Array of TServer;
      I, NbArraySrc, ToRem: Integer;
    begin
      setLength(Arraynew, 1);
      NbArraySrc := Length(ArraySrc);
      ToRem := 0;
      for I := 0 to NbArraySrc do
      begin
        if I <> Id then
        begin
          ArrayNew[I - ToRem] := ArraySrc[I];
          SetLength(ArrayNew, (Length(ArrayNew) + 1));
        end
        else
          ToRem := 1;    
      end;
      Result := ArrayNew;
    end;
    je modifie de suite

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    783
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 783
    Points : 505
    Points
    505
    Par défaut
    re

    par exemple , il suffit de synchroniser l'index avec le ID du combo

    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
     
    Type
      TTab = record
        Text:string[10];
    end;
    var Tab:array of TTab;
     
    //-----------------------------------------------------
    procedure InsertRecord(index:integer;value:string);
    var i:integer;
    begin
       setlength(tab,high(Tab)+1);
       for i:=index to high(Tab)-1 do
       begin
          Tab[i+1].text:=Tab[i].text;
       end;
       Tab[index].text:=value;
    end;
    //-----------------------------------------------------
    procedure SupRecord(index:integer);
    var i:integer;
    begin
       for i:=index to high(Tab)-1 do
       begin
          Tab[i].text:=Tab[i+1].text;
       end;
       setlength(tab,high(Tab)-1);
    end;
    //-----------------------------------------------------

  6. #6
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    j'ai fait sa:

    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 RemoveInArray(Id: Integer);
    var
      I, NbServer: Integer;
    begin
      NbServer := Length(Server) - 1;
      if Id < NbServer then
        for I := Id to NbServer do
        begin
          Server[I].IP := Server[(I + 1)].IP;
          Server[I].PORT := Server[(I + 1)].PORT;
          Server[I].Describe := Server[(I + 1)].Describe;
        end;
      SetLength(Server, NbServer);
    end;
    sa ressemble à ce que ta fait
    Server est un type perso un record de 3 string

    si je met :
    Server[I] := Server[(I + 1)];
    sa fonctionne pas, je comprend pas.

  7. #7
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    sa bug toujours pff et je comprend pas pourquoi.
    j'ai essayé ta fonction pareil, dès que je supprime une valeur du combo mon array n'est plus syncro et j'ai des violations...

    je ferme tout je verrai demain

  8. #8
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    pouquoi ne pas tout simplement stocker tes objets dans ta combo plutot qu'un tableau associé?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaCombo.items.AddObject('Serveur1', MonServeur1); //pour ajouter
     
    ServeurSelectionne := TServeur(MaCombo.items.objects[MaCombo.ItemIndex]);

  9. #9
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    pouquoi ne pas tout simplement stocker tes objets dans ta combo plutot qu'un tableau associé?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaCombo.items.AddObject('Serveur1', MonServeur1); //pour ajouter
     
    ServeurSelectionne := TServeur(MaCombo.items.objects[MaCombo.ItemIndex]);
    je ne connaissais pas, merci je vais essayer

  10. #10
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 876
    Points
    5 876
    Par défaut
    salut

    pour supprimer un item et décaler les suivants
    il suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     For i:= Suc(iposElemSup) to High(TabArray) do
     begin 
       TabArray[i-1] := TabArray[i];
     end ; 
     setlength(tab,Pred(high(TabArray)));
    iposElemSup etant l'index de l'élément enlevé

    @+ Phil

  11. #11
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    pour supprimer un element du tableau, je te conseille plutot de faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    type
      TMonArray = array of TMonType;
     
    procedure Remove(var LeTableau: TMonArray; const Index: integer);
    var
      L: integer;
    begin
      L := Length(LeTableau);
    //on deplace les dernieres elements du tableau de Index+1 vers Index ...
      MoveMemory(@LeTableau[Index], @LeTableau[Index+1], (L - Index - 1) * SizeOf(TMonType));
    //...et on redimensionne
    SetLength(LeTableau, L-1);
    end;

  12. #12
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    pour anapurna mon delphi veut pas de Suc(); j'ai cherché vite fait sans succès

    pour guillemouse sa fonctionne merci:
    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
    procedure TMain.Remove(var LeTableau: TArrayServer; const Index: integer);
    var
      L: integer;
    begin
      L := Length(LeTableau);
      if L = 1 then
      begin
        Server[0].IP := '';
        Server[0].PORT := '';
        Server[0].Describe := '';
        Exit;
      end;
      //on deplace les dernieres elements du tableau de Index+1 vers Index ...
      MoveMemory(@LeTableau[Index], @LeTableau[Index+1], (L - Index - 1) * SizeOf(Server));
      //...et on redimensionne
      SetLength(LeTableau, L-1);
    end;
    par contre l'idée de mettre mes objets server dans le combobox est meilleur mais je bute à la récupération:

    TServer(cbIPPORTList.items.objects[Id])
    me sort [DCC Erreur] fmMain.pas(167): E2089 Transtypage incorrect
    j'ai essayé:
    (cbIPPORTList.items.objects[Id] as TServer)
    resultat: [DCC Erreur] fmMain.pas(167): E2015 Opérateur non applicable à ce type d'opérande

    ligne complète:
    Write(ServerFile, TServer(cbIPPORTList.items.objects[Id]));

    merci en tout cas pour votre aide

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 876
    Points
    5 876
    Par défaut
    salut

    essai plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TServer(cbIPPORTList.objects[Id])
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     cbIPPORTList.objects[Id] as TServer
    TServer etant une class

    @+ Phil

    PS Succ plutot l'inverse de pred
    PS2 : ton write ne marchera pas au pire tu ecrira l'adresse memoire
    de l'objet instancie

  14. #14
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par ouiouioui Voir le message
    TServer(cbIPPORTList.items.objects[Id])
    me sort [DCC Erreur] fmMain.pas(167): E2089 Transtypage incorrect
    j'ai essayé:
    (cbIPPORTList.items.objects[Id] as TServer)
    resultat: [DCC Erreur] fmMain.pas(167): E2015 Opérateur non applicable à ce type d'opérande
    bizare. c'est quoi ton Type TServer? une classe, un record, un pointeur, ... ?

    dans object tu peux stocker des choses qui tiennent sur 4octets: Objets, integer, ...

  15. #15
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    pour anapurna

    cbIPPORTList.objects[Id]ne va pas car cbIPPORTList est un combobox j'ai le message:
    [DCC Erreur] fmMain.pas(167): E2003 Identificateur non déclaré : 'objects'

    mon write, c'est un fichier de type TServer, lorsque j'écris mon array d'objet TServer tout se pase bien.

    pour guillemouze

    TServer = record
    IP: String[15];
    PORT: String[5];
    Describe: string[45];
    end;

    donc faut que je crée un pointeur vers TServer pour stocker dans items.objects?

  16. #16
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 449
    Points : 5 876
    Points
    5 876
    Par défaut
    salut

    c'est exact tu doit passer un pointer car une class instanciée n'est rien d'autre qu'un pointer

    par contre le transcodage ne marchera pas

    @+ Phil

  17. #17
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    Merci pour votre aide. J'essaye

  18. #18
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par ouiouioui Voir le message
    donc faut que je crée un pointeur vers TServer pour stocker dans items.objects?
    Tout a fait. n'oublie pas de liberer tes pointeurs quand tu supprime un element de ta combo (ou que tu la clear).

  19. #19
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    De mon côté, je verrai plutôt une approche plus objet à ce problème, en essayant au maximum de produire un code réutilisable.

    Avant tout, remplacer ton record TServer par une classe. On ne sait jamais, tu pourrais avoir envie de destiner Tserver à effectuer des opérations, une connexion par exemple. Et pour éviter d'éparpiller le code un peu partout, cette classe TServer remplirait parfaitement le contrat.

    D'autre part, ne pas se lier avec un composant combo. Si d'aventure, il te venait à l'idée de passer par la suite cette liste à autre chose par exemple une TListBox ou tout autre composant, la tâche serait bien plus compliquée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    TServer = class
      private
        FIP: ShortString;
        FDescribe: ShortString;
        FPORT: ShortString;
        procedure SetIP(const Value: ShortString);
        procedure SetDescribe(const Value: ShortString);
        procedure SetPORT(const Value: ShortString);
      public
        property IP: ShortString read FIP write SetIP;
        property PORT: ShortString read FPORT write SetPORT;
        property Describe: ShortString read FDescribe write SetDescribe;
       //des méthodes éventuellement
      end;
    son implémentation:

    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
    { TServer }
    procedure TServer.SetDescribe(const Value: ShortString);
    begin
      FDescribe := Value;
    end;
     
    procedure TServer.SetIP(const Value: ShortString);
    begin
      FIP := Value;
    end;
     
    procedure TServer.SetPORT(const Value: ShortString);
    begin
      FPORT := Value;
    end;
    Puis comme tu dois gérer une liste de server, le candidat idéal pourrait être une TStringList et là on se rapproche un peu du TComboBox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    TMyStringList = class(TStringList)
      private
        function GetServerItems(index: integer): TServer;
        function GetIP(index: integer): ShortString;
        procedure SetIP(index: integer; const Value: ShortString);
      public
        property ServerItems[index: integer]:TServer read GetServerItems;
        property IP[index: integer]:ShortString read GetIP write SetIP;
        //décrire également PORT et Describe
        function addServer(AIP,APort,ADescribe: ShortString):integer;
        procedure deleteSever(index: integer);
        procedure ClearServer;
        //..compléter les méthodes pour gérer cette liste
      end;
    Son implémentation

    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
    { TMyStringList }
    function TMyStringList.addServer(AIP, APort, ADescribe: ShortString): integer;
    var
      AServer: TServer;
    begin
      AServer := TServer.Create;
      with AServer do
      begin
        FIP := AIP;
        FPORT := APort;
        FDescribe := ADescribe;
      end;
      Result := Self.AddObject(ADescribe,AServer);
    end;
     
    procedure TMyStringList.ClearServer;
    var
      I: integer;
    begin
      for I := Pred(Self.Count) downto 0 do
      begin
        TServer(Self.Objects[i]).Free;
        Self.Delete(I);
      end;
    end;
     
    procedure TMyStringList.deleteSever(index: integer);
    begin
      if index in [0..Self.Count-1]
      then begin
             TServer(Self.Objects[index]).Free;
             Self.Delete(index);
           end;
    end;
     
    function TMyStringList.GetIP(index: integer): ShortString;
    begin
      if index in [0..Self.Count-1]
        then Result := TServer(Self.Objects[index]).FIP;
    end;
     
    function TMyStringList.GetServerItems(index: integer): TServer;
    begin
      Result := nil;
      if index in [0..Self.Count-1]
        then Result := Tserver(Self.Objects[index]);
    end;
     
    procedure TMyStringList.SetIP(index: integer; const Value: ShortString);
    begin
      if index in [0..Self.Count-1]
        then Tserver(Self.Objects[index]).FIP := Value
    end;
    Ensuite, il te suffit de créer FList: TMyStringList où tu veux, dans la section private de TForm par exemple mais encore dans tout autre classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     TForm1 = class(TForm)
      private
        { Déclarations privées }
        FList: TMyStringList;
      public
        { Déclarations publiques }
        procedure test;
      end;
    Sans oublier de créer une instance de FList puis de la détruire respectivement dans le Create et Destroy.

    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
    procedure TForm1.FormCreate(Sender: TObject);
    var
      I: integer;
    begin
      FList := TMyStringList.Create;
      test;
      for I := 0 to Pred(FList.Count) do
        ComboBox1.Items.Assign(FList);
      ComboBox1.ItemIndex := 0;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FList.ClearServer;
      FList.Free; 
    end;
    Une procédure pour ajouter des données dans FList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.test;
    begin
      with FList do
      begin
        addServer('192.168.0.1','80','Port 80 sur 192.168.0.1');
        addServer('192.168.0.75','8080','Port 8080 sur 192.168.0.75');
      end;
    end;
    Puis un comboBox déposé sur la form.
    Tu remarqueras que dans la procédure Create j'ai ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for I := 0 to Pred(FList.Count) do
        ComboBox1.Items.Assign(FList);
    Cela ajoutera les élements de FList dans le ComboBox.

    Puis pour accéder aux éléments de FList via les items du combo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ComboBox1.ItemIndex <> -1 then
      begin
        showMessage(TMyStringList(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).IP[ComboBox1.ItemIndex]);
        // ou encore
        showMessage(TServer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]).IP);
      end;
    Bon, un transtypage assez pénible, mais on accède aux éléments désirés via le combo.
    Mais plus simplement puisque l'indice de l'élément sélectionné du combo se trouve dans sa propriété ItemIndex. tu peux passer directement par FList.

    Et enfin pour supprimer proprement un élément du combo tout en supprimant l'élément dans FList. Par exemple celui d'indice 0:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      ComboBox1.Items.Delete(0);
      FList.deleteSever(0);
      ComboBox1.ItemIndex := -1;
      ComboBox1.Text := '';

  20. #20
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    Merci Pascal Jankowski c'est très intéressant tout ceci! Je vais faire comme tu dis, par contre j'ai pas testé mais si je supprime l'item 1, l'item 2 prend la place du 1 mais FList se met à jour aussi?

    Je vais essayer tout sa pfiou sacré boulot que ton post je comprend pourquoi t'est modérateur

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Graphe] Vérifier connexité après retrait d'un sommet
    Par Nil_ct dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 17/01/2008, 17h19
  2. [MySQL] Je ne comprends pas. Il m'affiche "array" aprés un mysql_fetch
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/09/2007, 14h41
  3. Réponses: 3
    Dernier message: 29/05/2007, 16h55
  4. [Tableaux] Réorganiser un tableau apres un merge()
    Par Death83 dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2006, 02h39

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