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 :

Tableau et Combobox


Sujet :

Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Tableau et Combobox
    Bjr à tous
    Débutant en delphi je souhaite écrire une micro application pour gérer des temps de fabrication.
    Pour faire simple je prends l'exemple suivant :
    sur une ligne j'ai 2 combobox, 1 edit et un bouton. L'evenement onclick fait la somme des 2 combobox.
    Si je repete sur ma fiche 5 fois la meme structure que précédemment et que chaque ligne est calculée indépendemment des autres mais avec la meme procédure de calcul, comment passer les parametres (combobox et edit concernés) suivant le bouton actionné.
    J'avais pensé utiliser des tableaux comme terme1 : array[1..5] of tcombobox. L'indice etant récuperer par la propriété tag des boutons.
    Mais apparemment la propriété name des combos n'accepte pas les indices.
    Qu'elle serait la solution la + simple?
    Je n'ai pas trouvé de pistes sur le forum ni dans la faq.
    Merci d'avance

  2. #2
    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
    Une solution consiterait à utiliser comme tu l'as signifié dans ta question le tag de chaque composant:

    Par exemple sur ta première ligne :

    Combo_1 (tag = 1) ...... Combo_2 (tag = 2) ...... Button_1 (tag = 102)

    sur ta deuxième ligne :

    Combo_3 (tag = 3) ...... Combo_4 (tag = 4) ...... Button_2 (tag = 304)
    Combo_5 (tag = 5) ...... Combo_6 (tag = 6) ...... Button_3 (tag = 506)
    Combo_7 (tag = 7) ...... Combo_8 (tag = 8) ...... Button_4 (tag = 708)
    Combo_9 (tag = 9) ...... Combo_10 (tag = 10) ...... Button_5 (tag = 910)
    Le tag de chaque TButton est obtenu en multipliant pas 100 la valeur du tag du premier combo placé sur la même ligne et en lui ajoutant la valeur du tag du second combo se trouvant également sur la même ligne.

    exemple: 304 = 3*100 + 4
    A partir de là il te suffit de décomposer la valeur du tag du Tbutton afin de retrouver les deux combo concernés.
    En effet, le premier tag s'obtient simplement en effectuant une division entière pas 100 et le second s'obtient en prenant la partie modulo de cette division entière par 100.

    Voilà la partie de code qui peut gérer cela :

    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
    ...
    TForm1 = class(TForm)
        ComboBox1: TComboBox;
        ComboBox2: TComboBox;
        Button1: TButton;
        Edit1: TEdit;
        ComboBox3: TComboBox;
        ComboBox4: TComboBox;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        function getComboBox(ntag: word):TCombobox;
        function calculate(Sender: TObject; var z: integer):boolean;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    function somme(x,y: Tcombobox; var z: integer):boolean;
    begin
      Result := true;
      if (x = nil) or (y = nil)
        then begin
                 Result := false;
                 exit;
             end;
      z := strToInt(x.Text) + strToInt(y.Text);
    end;
     
    { TForm1 }
     
    function TForm1.calculate(Sender: TObject; var z: integer): boolean;
    var x,y: integer;
    begin
      x := TButton(Sender).Tag div 100;
       y := TButton(Sender).Tag mod 100;
      Result := somme(getComboBox(x),getComboBox(y),z);
    end;
     
    function TForm1.getComboBox(ntag: word): TCombobox;
    var I:integer;
    begin
      Result := nil;
      for I := 0 to Pred(ComponentCount) do
        if (Components[i] is TComboBox) and (Components.Tag = ntag)
          then begin
                   Result := TComboBox(Components);
                   break;
                end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var z:integer;
    begin
      if calculate(TButton(Sender),z)
        then edit1.Text := intToStr(z);
    end;
    ...
    Pour chaque les TButton 2,3..5, tu vas dans l'inpecteur d'objet et tu affectes à chaque événement OnCLick la valeur Button1Click.

    C'est une piste parmi tant d'autres. Je ne sais pas si dans ton cas de figure j'aurais appliqué une telle solution.

    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  3. #3
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    question: tu va enregistré tes résulta???
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Personnellement je ferai plus simple...

    Cré une fonction qui prend trois paramètres : 2 TComboBox et 1 Edit. Cette fonction fera le calcul et l'affectation au TEdit.

    De le code de chacun des 5 boutons appel simplement ta fonction en passant les paramètres des TComboBox et Tedit correspondant.
    Ca fait certe 5 évènements qui ne font qu'appeler une fonction, mais en tout cas ces le genre de code ou on aura pas besoin de réfléchir pour le comprendre...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci pour ces pistes que je vais adapter à mon pb.
    Mais je suis curieux de nature, pouvez vous m'expliquer comment, delphi acceptant "tableau : array[1..5] of tcombobox", utiliser un tel tableau.
    Merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Comme n'importe quel tableau.
    Le seul truc c qu'il faudra initialiser le tableau.

    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
     
    var
       i : integer;
       tab : array[1..5] of tcombobox;
       cb : tcombobox;
    begin
       for i := 1 to 5 do 
       begin
          cb := TComboBox.Create(Self); // Self est le Owner, quand ce owner
          // sera détruit la combo sera détruite aussi
          cb.Parent := Self; // Le parent est le conteneur (panel, fiche, ...) qui
          // se charge d'afficher le composant
          cb.top := 100*i;
          cb.left := 100*i;
          tab[i] := cb;
       end;
    puis t'y accède normalement par tab[i].text ou autre chose...

  7. #7
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    tu peux aussi utiliser les combobox déjà présentes sur ta fiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    tableau : Array[1..5} of TComboBox;
     
    tableau[1] := ComboBox1;
    tableau[2] := ComboBox2;
    tableau[3] := ComboBox3;
    tableau[4] := ComboBox4;
    tableau[5] := ComboBox5;
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    pas bête ca
    pourquoi faire simple quand on peut faire compliqué

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci à tous, j'ai suffisamment d'infos pour régler mon pb.

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

Discussions similaires

  1. [XL-2013] VBA Copie ligne précédente tableau avec combobox date
    Par joel50 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/10/2014, 21h59
  2. Tableau de combobox
    Par micka11 dans le forum C#
    Réponses: 2
    Dernier message: 05/08/2014, 14h09
  3. tableau de combobox et textbox dans une classe
    Par hamedi1 dans le forum C#
    Réponses: 1
    Dernier message: 08/02/2010, 17h22
  4. Erreur avec un Tableau de combobox
    Par dederfred dans le forum Delphi
    Réponses: 1
    Dernier message: 26/10/2006, 07h21
  5. [VBA-E]variable en tableau - controle combobox
    Par gojaru dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 06/04/2006, 17h07

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