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

C++Builder Discussion :

Copier résultat Combox dans Memo [Langage/Algorithme]


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut Copier résultat Combox dans Memo
    Bonjour,

    Je suis débutant en programmation, j'en ai fais pas mal en cours, mais j'ai lâché depuis le temps et maintenant j'aimerai m'y remettre en commençant par un petit projet de caisse enregistreuse.

    En gros, j'ai plusieurs Combobox, avec plusieurs éléments comme Items.

    j'aimerai que lorsque l'utilisateur sectionne un champ, une fenêtre apparaisse pour demander une confirmation, et si l'utilisateur confirme, le texte du champ apparaisse dans un memo, et ainsi de suite.

    L'utilisateur peut faire plusieurs sélection et tout ce met a la suite dans le memo.

    Je pense que c'est possible mais je ne trouve pas la syntaxe :s

    Merci à vous pour votre aide.

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( ComboBox1->ItemIndex != -1 )
      Memo1->Lines->Add( ComboBox1->Text ) ;
    Tu peux placer ce genre de code dans l'évènement OnChange de tes Combobox.

    A noter que tu peux utiliser le même évènement OnChange pour tout tes ComboBox (pour éviter les codes répétitifs):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcall TForm1::ComboBox1Change(TObject *Sender)
    {
      TCombobox *cbox = (TCombobox*)Sender ; //Récupération du Combobox 
      if( cbox ->ItemIndex != -1 ) // test si une valeur est sélectionnée
      {
        if (MessageDlg("AJOUTER ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
         Memo1->Lines->Add( cbox ->Text ) ;  //ajout a la suite du Memo
      }
    }

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Supposons qu'on utilise le Drag & Drop (d'un listbox vers un memo) :

    En ce qui concerne les listbox :

    DragMode sur dmAutomatic
    MultiSelect sur true
    ExtendedSelect sur false

    Dans ce cas de figure, la sélection (multiple) des items se fait un par un, avec la touche MAJ enfoncée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm1::ListBox1StartDrag(TObject *Sender,
          TDragObject *&DragObject)
    {
    DragObject = NULL;
    }
    En ce qui concerne le memo :

    DragMode sur dmManual

    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
     
    void __fastcall TForm1::Memo1DragOver(TObject *Sender, TObject *Source,
          int X, int Y, TDragState State, bool &Accept)
    {
    Accept = Source->InheritsFrom(__classid(TListBox));
    }
    //--
     
    void __fastcall TForm1::Memo1DragDrop(TObject *Sender, TObject *Source,
          int X, int Y)
    {
    int j;
    TListBox *S = (TListBox*)Source;
    AnsiString N = "Enregistrer :";
    for(j=0; j < S->Items->Count; j++)
        {
        if(S->Selected[j])
            {
            N = N + "\n- " + S->Items->Strings[j];
            }
        }
    if(Application->MessageBox(N.c_str(),
                               "Confirmation",
                               MB_YESNO | MB_ICONEXCLAMATION) == ID_YES)
        {
        for(j=0; j < S->Items->Count; j++)
            {
            if(S->Selected[j])
                {
                Memo1->Lines->Add( S->Items->Strings[j]);
                S->Selected[j]=false;
                }
            }
        }
    }
    C'est un simple exemple avec BCB3 Pro donc ... à adapter selon ta version BCB au cas où ... !

    A plus !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Bonjour,

    Merci pour ces réponses, votre aide m'a été très utile !

    Par contre je crois que je n'utilise pas la bonne méthode pour effectuer ce que je veux.

    En effet, si vous voulez le Memo devra contenir après plusieurs sélection de l'utilisateur quelque chose du genre :

    Coca 33Cl 2€
    Salades 5€
    Orientale Junior 8€
    etc...

    La solution que vous m'avez donner fonctionne bien pour afficher que le nom, mais pas le prix.

    Donc je pensais plutôt créer un fichier .txt
    avec un l'intérieur des données du type :

    Coca 33Cl;2€
    Salades;5€
    Orientale Junior;8€
    etc...

    et dire si l'utilisateur clique sur l'item1 du combobox ca va lire dans le fichier la ligne 1 entièrement et l'ajouter dans le Memo.

    Si il clique sur le champ 6, ca va lire la ligne 6 et l'ajouter dans le Memo.

    etc etc...

    Est ce possible?
    J'ai essayer avec Getline mais je ne trouve pas le moyen de sélectionner la ligne désirer

    Merci beaucoup pour votre aide.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    slt
    oui bien sur

    apres çà depend de la façon dont tu nourris le combobox

    si c est predefini ( voir non ) , rien ne t emepeche de creer un second combobox invisible ( visible = false ) et utlisier une ansistring qui conacatene les items des deux combobox

    ++

  6. #6
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Plutôt que des Combobox non-visible, utilise plutôt des TStringList.
    Si les données à charger sont dans des fichiers texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Création de la liste
    TStringList *liste1 = new TStringList();
    //Chargement du fichier
    liste1->LoadFromFile( "C:\\NomDossier\\Liste1.txt" );
    //récupérer la i-ème ligne
    AnsiString str = liste1->Strings[i] ;
    //libération des ressources
    delete liste1;

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Sans doute qu'ici une solution passe par une prise en charge manuelle de l'affichage des données dans chaque ComboBox.
    En effet, il est possible de stocker les chaînes complètes (produit + ";" + prix ) mais de n'afficher qu'une partie de la chaîne dans chaque combobox.
    Ca se fait depuis leur OnDrawItem (une seule méthode partagée) à condition que :

    OnDrawItem ne se produit que si la propriété Style a la valeur csOwnerDrawFixed ou la valeur csOwnerDrawVariable.
    Par exemple (simpliste) :

    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
     
    void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index,
          TRect &Rect, TOwnerDrawState State)
    {
    if(Index != -1)
        {
        // Comme cette méthode est attribuée à toutes les combobox
        // Control désigne la ComboBox (l'une d'elles) qui se redessine
        TComboBox *CB = (TComboBox*)Control;
        AnsiString N = CB->Items->Strings[Index];
        int p = N.Pos(";");
        if(p != 0) N = N.SubString(1, p-1);
        CB->Canvas->Brush->Style = bsSolid;
        if(State.Contains(odSelected) || State.Contains(odFocused))
            {
            CB->Canvas->Brush->Color = clNavy;
            CB->Canvas->Font->Color = clWhite;
            }
        else
            {
            CB->Canvas->Brush->Color = clWhite;
            CB->Canvas->Font->Color = clBlack;
            }
        CB->Canvas->FillRect(Rect);
        CB->Canvas->Brush->Style = bsClear;
        CB->Canvas->TextOut(Rect.Left + 2, Rect.Top + 2, N);
        }
    Dans ce cas, je suppose avoir chargé les Items des ComboBox avec le contenu de leur fichier.
    Et chez moi, ça se présente sous une forme tout aussi simpliste :

    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
     
    AnsiString Filepath;
    AnsiString Filename;
    //--
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    Filepath = ExtractFilePath(Application->ExeName);
    Filename = Filepath + "Combo1.TXT";
    if(FileExists(Filename)) ComboBox1->Items->LoadFromFile(Filename);
    Filename = Filepath + "Combo2.TXT";
    if(FileExists(Filename)) ComboBox2->Items->LoadFromFile(Filename);
    Filename = Filepath + "Combo3.TXT";
    if(FileExists(Filename)) ComboBox3->Items->LoadFromFile(Filename);
    Filename = Filepath + "Combo4.TXT";
    if(FileExists(Filename)) ComboBox4->Items->LoadFromFile(Filename);
    }
    //--
    A plus !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 23
    Par défaut
    Merci pour votre aide, ça m'a été très utiles !

    A très bientôt.

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

Discussions similaires

  1. [Lazarus] Envoyer résultat console dans un memo
    Par jeanbi dans le forum Lazarus
    Réponses: 1
    Dernier message: 23/10/2010, 16h14
  2. copier le contenu de deux combox dans un richtextbox
    Par mstic dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/03/2007, 10h50
  3. Comment Copier une table dans un fichier?
    Par thx2003 dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/12/2003, 12h09
  4. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 22h59
  5. Comment copier une image dans le presse papier.
    Par cprogil dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2003, 15h54

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