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

Lazarus Pascal Discussion :

Remplir une ComboBox


Sujet :

Lazarus Pascal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Remplir une ComboBox
    Ehm... J'ai un peu honte de poster pour quelque chose d'aussi dérisoire, mais l'urgence me pousse à courber l'échine.
    Tout est dans le titre. Je suis en train de faire une petite interface sous Lazarus qui permet de faciliter les calculs de lancers de dés pour D&D.
    Certes, c'est pas terrible, ça existe sûrement, mais il s'agit d'un projet scolaire. Pourquoi en Pascal me direz-vous ? Parce qu'à part sur un VB craqué tout buggé, et un peu de PhP, on n'a rien vu d'autres. Sans vouloir blâmer mon prof, les cours étaient un peu light, aussi, j'ai lutté avec la création de l'interface. Bref.

    Le seul soucis restant étant qu'après avoir créé mes ComboBox, je ne sais absolument pas comment les remplir. J'ai trouvé comment les nommer, les rendre accessible, mais pas où insérer les valeurs affichées (ni les valeurs que j'associerai à ces noms). Voici à quoi ça ressemble pour le moment.

    Je viens de me rendre compte que j'ai un soucis de compilation. Je ne comprends pas très bien, pour l'instant, j'ai généré uniquement mes composants via la palette de construction, et pour remplir le code de mes boutons, simplement double-cliqué sur... les boutons associés. Le code des boutons est propre (normalement). Donc je ne vois pas très bien d'où cette erreur provient.

    Merci d'avoir lu jusque là, et de l'éventuel coup de main.

    Bah, j'pense que ça serait plus simple si je postais tout le code, des fois que je sois passé à côté d'une énormité.

    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
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
     
    unit dd2;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      ExtCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Batt: TButton;
        BD24: TButton;
        BD100: TButton;
        BD2: TButton;
        BD6: TButton;
        BD12: TButton;
        BD3: TButton;
        BD8: TButton;
        BD20: TButton;
        BD4: TButton;
        BD10: TButton;
        Bdeg: TButton;
        CkBmal1: TCheckBox;
        CkBsour: TCheckBox;
        CkBmal2: TCheckBox;
        CBarme: TComboBox;
        CBdda: TComboBox;
        CBbaa: TComboBox;
        CBsour: TComboBox;
        CBbad: TComboBox;
        Ebdf1: TEdit;
        Ebdd1: TEdit;
        Ebdf2: TEdit;
        Ebdd2: TEdit;
        GBatt: TGroupBox;
        GBdr: TGroupBox;
        GBdeg: TGroupBox;
        GBLancer: TGroupBox;
        Image1: TImage;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        MDR: TMemo;
        MR1: TMemo;
        MR2: TMemo;
        MR3: TMemo;
        RBf1: TRadioButton;
        RBd1: TRadioButton;
        RBf2: TRadioButton;
        RBd2: TRadioButton;
        procedure BattClick(Sender: TObject);
        procedure BD100Click(Sender: TObject);
        procedure BD10Click(Sender: TObject);
        procedure BD12Click(Sender: TObject);
        procedure BD20Click(Sender: TObject);
        procedure BD24Click(Sender: TObject);
        procedure BD2Click(Sender: TObject);
        procedure BD3Click(Sender: TObject);
        procedure BD4Click(Sender: TObject);
        procedure BD6Click(Sender: TObject);
        procedure BD8Click(Sender: TObject);
        procedure BdegClick(Sender: TObject);
        procedure CBarmeChange(Sender: TObject);
        procedure CBddaChange(Sender: TObject);
        procedure GBLancerClick(Sender: TObject);
        procedure Image1Click(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end; 
     
      // VARIABLES
    var
      Form1: TForm1;
      arme, bonusFor, bonusDex, bonusAtt, degArme, Result, bonusDeg, totalDeg, totalAtt, nbSour, bonusSour : Integer;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    //Fonction pour la conversion texte -> entier et vérification des données
    function verif(Chaine : String): Integer;
    var Nombre, Erreur, xError : Integer;
    begin
          Chaine := valeur;
          Val(Chaine,Nombre,Erreur);
          If Erreur = 0
             Return Nombre
          Else
             xError := -100
              Return xError;
    end;
     
    //BOUTON D'ATTAQUE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    procedure TForm1.BattClick(Sender: TObject);
    begin
     
         //Effacer la valeur du dernier lancer
         MR1.Text := '';
     
         //Vérification des données des bonus
         If verif(Ebdf1.Text) = -100 Then
            ShowMessage ('Le Bonus de Force pour l''attaque est mal rempli');
         If verif(Ebdd1.Text) = -100 Then
            ShowMessage ('Le Bonus de Dextérité pour l''attaque est mal rempli');
     
         //Bonus de force ou de dextérité
         If RBbdf1.Checked Then
            bonusFor := verif(Ebdf1.Text)
         Else
             If RBbdd1.Checked Then
                bonusDex := verif(Ebdd1.Text)
             Else
                ShowMessage ('Veuillez cocher le type de bonus d''attaque');
     
         //Bonus d'attaque
         bonusAtt := verif(CBbaa.Text);
     
         // Cas de Malus à l'attaque
         If CkBmauls1.Checked Then
            bonusAtt := -bonusAtt;
     
         //Degré de l'arme
         degArme := verif(CBdda.Text) ;
     
         //Calcul du total d'attaque  et affichage
         totalAtt := degArme + bonusAtt + bonusDex + bonusFor + rand(20);
         MR1.Text := totalAtt;
     
         //Affichage dans tous les résultats
         MDR.Text := totalAtt + ' (attaque) ';
     
    end;
     
     
     
    //BOUTON DE DEGATS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    procedure TForm1.BdegClick(Sender: TObject);
    begin
     
         //Effacer la valeur du dernier lancer
         MR2.Text := '';
     
         //Vérification des données des bonus
         If verif(Ebdf2.Text) = 'Erreur' Then
            ShowMessage ('Le Bonus de Force pour les dégâts est mal rempli');
         If verif(Ebdd2.Text) = 'Erreur' Then
            ShowMessage ('Le Bonus de Dextérité pour les dégâts est mal rempli');
     
         //Bonus de force ou de dextérité
         If RBbdf2.Checked Then
            bonusFor := verif(Ebdf2.Text)
         Else
             If RBbdd2.Checked Then
                bonusDex := verif(Ebdd2.Text)
             Else
                ShowMessage ('Veuillez cocher le type de bonus d''attaque');
     
         //Bonus de dégats
         bonusDeg := verif(CBbad.Text);
     
         // Cas de Malus au dégat
         If CkBmalus2.Checked Then
            bonusDeg := -bonusDeg;
     
         // Cas de l'attaque sournoise
         nbSour := verif(CBsour.Text);
         If CkBsour.Checked Then
            bonusSour := rand(6)* nbSour;
     
         // Calcul de l'arme
     
     
         //Calcul du total de dégats  et affichage
         totalDeg := bonusSour + bonusDeg + bonusFor + bonusDex + arme ;
         MR2.Text := totalDeg;
     
         //Affichage dans tous les résultats
         MDR.Text := totalDeg + ' (dégat) ';
    end;
     
    procedure TForm1.CBarmeChange(Sender: TObject);
    begin
     
    end;
     
    procedure TForm1.CBddaChange(Sender: TObject);
    begin
     
    end;
     
    procedure TForm1.GBLancerClick(Sender: TObject);
    begin
     
    end;
     
    procedure TForm1.Image1Click(Sender: TObject);
    begin
     
    end;
     
    //LANCER DE DES VARIABLES>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    procedure TForm1.BD2Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(2);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD3Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(3);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD4Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(4);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD6Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(6);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD8Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(8);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD10Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(10);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD12Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(12);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD20Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(20);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD24Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(24);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    procedure TForm1.BD100Click(Sender: TObject);
    begin
      MR3.Text := '';
      Result := rand(100);
      MR3.Text := Result;
      MDR.Text := Result;
    end;
     
    end.
    Je doute que je risque de me faire tailler un short ... Mais faut bien débuter

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 300
    Points
    11 300
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Tu parles d'une erreur de compilation : quel est le message précis ? Type d'erreur, ligne, etc.

    Sinon, rapidement, à propos de ton code, pour la première fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //Fonction pour la conversion texte -> entier et vérification des données
    function verif(Chaine : String): Integer;
    var Nombre, Erreur, xError : Integer;
    begin
       //   Chaine := valeur; // ??? la valeur de Chaine est passée en paramètre lors de l'appel à la fonction verif()
          Val(Chaine, Nombre, Erreur);
          If Erreur = 0 Then // moi, je préfère un Then
             Return Nombre // syntaxe en C, non acceptée par mon Lazarus : on peut écrire Result:=Nombre ou verif:=Nombre
          Else begin // ouverture d'un bloc de code par begin si plusieurs lignes
             xError := -100; // bien de mettre un ; à la fin des lignes (sauf avant un Else)
              Return xError;
        end; // et on ferme le bloc par end;
    end;
    On aurait pu écrire de manière plus concise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    const 
      DefaultValue = -100; // si tu as besoin de changer la valeur, il suffira de la modifier à 1 seul endroit...
     
    function Verif(aChaine: string): integer;
    begin
      Result := StrToIntDef(aChaine, DefaultValue);
    end;
    [EDIT = et d'autres possibilités :]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function verif(Chaine : String): Integer;
    var 
      Nombre, Erreur, xError : Integer;
    begin
      xError := -100;
      Val(Chaine, Nombre, Erreur);
      If Erreur = 0 Then
        Result := Nombre
      Else 
        Result := xError;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function verif(Chaine : String): Integer;
    var 
      Nombre, Erreur : Integer;
    begin
          Val(Chaine, Nombre, Erreur);
          If Erreur = 0 Then
             Result := Nombre 
          Else 
             Result := -100;
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria 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 !

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour les simplifications, Tourlourou.
    C'est vrai que le coup de la constante, c'est plus joli.
    Et je connaissais pas StrToInt. Merci

  4. #4
    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,

    Pour remplir une ComboBox on utilise sa propriété Items.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Combobox1.Items.Clear ;
    Combobox1.Items.Add ('Première valeur');
    Combobox1.Items.Add ('Deuxième valeur');
    Si tu veux associer un code caché à chaque Item, c'est un peu plus compliqué, du moins avec le composant standard.

    Une solution simple, mais moche, consiste à remplir en même temps que les items des listes ou tableaux de codes avec les mêmes indices.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      Codes : array of integer ;
     
    Combobox1.Items.Add ('Première valeur');
    SetLength(Codes,Length(Codes)+1);
    Codes[0] := 123 ;
     
     
    Id := Codes[Combobox1.ItemIndex];
    Il est plus propre d'utiliser les objets que tu peux associer à chaque item d'une TStringList (Le type de la propriété Items).

    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
     
     
    type TMonId = class
      FId : integer ;
      constructor Create ( Id :integer); override ;
      end ;
     
    constructor TMonId.Create ( Id :integer);
     
    begin
      inherited ;
      FId := Id ;
    end ;
     
    Combobox1.Items.AddObject ('Première valeur',  TMonId.Create(123) );
     
    Id := TMonId(Combobox1.Objects[Combobox1.ItemIndex]).Id ;
    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.

Discussions similaires

  1. [Spread designer] Remplir une combobox
    Par valoji dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/03/2006, 11h32
  2. [VBA-E] Comment remplir une ComboBox ?
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/03/2006, 09h03
  3. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 15h31
  4. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

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