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

Langage Delphi Discussion :

Structure conditionnelle et repétitive


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Points : 123
    Points
    123
    Par défaut Structure conditionnelle et repétitive
    Allo les amis,
    J'ai essayé de mettre en place ce code mais j'ai une erreur me disant que ce type n'est pas appliqué à cet opérande. Ce sera super d'utiliser CASE OF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     If ComboBox1.Text='Mensuel' then
              CurrencyEdit1.Value:=CurrencyEdit2/12
           else if ComboBox1.Text:='Trimestriel' then
              CurrencyEdit1.Value:=CurrencyEdit2/4
           else if ComboBox1.Text:='Semestriel' then
              CurrencyEdit1.Value:=CurrencyEdit2/2
           else if ComboBox1.Text:='Annuel' then
              CurrencyEdit1.Value:=CurrencyEdit2.Value
           end;
    Aidez moi à corriger cela s'il vous plaît
    L'important n'est pas de tout savoir mais de savoir où tout se trouve !

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    tu peux le faire avec un tableau et AnsiMatchStr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const
      TYPE_PERIODE: array[0..3] of string = ('Mensuel' , 'Trimestriel' , 'Semestriel' , 'Annuel' );
      TYPE_PERIODE_RATIO: array[0..3] of Integer = (12, 4, 2, 1);
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrencyEdit1.Value:= CurrencyEdit2.Value /  TYPE_PERIODE_RATIO[AnsiMatchStr(ComboBox1.Text, TYPE_PERIODE)];
    tu peux aussi faire un Case ... cela évite la division par 1 ou un type non prévu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case AnsiMatchStr(ComboBox1.Text, TYPE_PERIODE) of
      0: CurrencyEdit1.Value:=CurrencyEdit2.Value / 12;
      1: CurrencyEdit1.Value:=CurrencyEdit2.Value / 4;
      2: CurrencyEdit1.Value:=CurrencyEdit2.Value / 2;
      3: CurrencyEdit1.Value:=CurrencyEdit2.Value;
    else
      Merdoum !
    end;
    Tu peux encore tricher, en mettant le ComboBox1 en Style à csDropDownList, et en utilsant l'ItemIndex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    case ComboBox1.ItemIndex of
      0: CurrencyEdit1.Value:=CurrencyEdit2.Value / 12;
      1: CurrencyEdit1.Value:=CurrencyEdit2.Value / 4;
      2: CurrencyEdit1.Value:=CurrencyEdit2.Value / 2;
      3: CurrencyEdit1.Value:=CurrencyEdit2.Value;
    else
      Merdoum !
    end;
    Faut juste faire attention, que l'ordre ne change pas, en général, j'utilise un remplissage manuel (pas dans la DFM, en code) et une énumération
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    avec du texte ... non pas de case of...

    par contre on vois mieux les erreurs quand on indente correctement :

    attention au ":=" dans les conditions -> invalide
    attention de bien précisé la propriété Value pour la division!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      if ComboBox1.Text = 'Mensuel' then
        CurrencyEdit1.Value := CurrencyEdit2.Value / 12
      else 
      if ComboBox1.Text = 'Trimestriel' then
        CurrencyEdit1.Value := CurrencyEdit2.Value / 4
      else 
      if ComboBox1.Text = 'Semestriel' then
        CurrencyEdit1.Value := CurrencyEdit2.Value / 2
      else 
      if ComboBox1.Text = 'Annuel' then
        CurrencyEdit1.Value := CurrencyEdit2.Value;
    on peut passer au case of comme ceci :


    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
     
    { gestionnaire d'evenement commun à :
      ComboBox1 -> onChange
      CurrencyEdit2 -> onChange
    }
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      case ComboBox1.ItemIndex of
        0 : // Mensuel
          CurrencyEdit1.Value := CurrencyEdit2.Value / 12;
        1 : // Trimestriel
          CurrencyEdit1.Value := CurrencyEdit2.Value / 4;
        2 : // Semestriel
          CurrencyEdit1.Value := CurrencyEdit2.Value / 2;
        else // autre
          CurrencyEdit1.Value := CurrencyEdit2.Value;
      end;
    end;
    ou encore :

    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
     
    { gestionnaire d'evenement commun à :
      ComboBox1 -> onChange
      CurrencyEdit2 -> onChange
    }
    procedure TForm1.ComboBox1Change(Sender: TObject);
    var 
      I : integer;
    const
      Divs :array[0..2] of integer = (12, 4, 2);
    begin
      I := ComboBox1.ItemIndex;
      if (I >= low(divs)) and (I <= high(divs)) then
        CurrencyEdit1.Value := CurrencyEdit2.Value / Divs[I]
      else
        CurrencyEdit1.Value := CurrencyEdit2.Value;
    end;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  4. #4
    Membre régulier Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Points : 123
    Points
    123
    Par défaut
    Vous êtes vraiment formidables les amis,
    Thanks a lot
    L'important n'est pas de tout savoir mais de savoir où tout se trouve !

Discussions similaires

  1. IF ( Structure conditionnelle ) MYSQL
    Par Eric45 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 26/08/2013, 18h59
  2. [VBA-E]Structure conditionnelle sur plusieurs variables
    Par rodrigue62 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/07/2007, 14h30
  3. structure conditionnelle dans la clause where
    Par liberty74 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/05/2007, 23h18
  4. [XSLT]la structure conditionnelle.
    Par Extra-Nitro dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 22/08/2006, 13h46
  5. [Language][Compilateur]Objets et structures conditionnelles
    Par goran kajfes dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2005, 22h55

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