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 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    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 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    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