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

MFC Discussion :

[MFC][VS6.0] Flexgrid


Sujet :

MFC

  1. #1
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut [MFC][VS6.0] Flexgrid
    Bonjour,
    Je cherche a remplir un flexgrid, je n'arrive pas a savoir comment déclarer le type de la variable accrochée a mon flexgrid, elle s'appelle
    m_FlexGrid j'éffectue un cast voici mon code :



    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
     
    		// Remplissange du Flexgrid
    		// Concaténation text
     
    	CMSFlexGrid* m_FlexGrid = 0;
    	m_FlexGrid = static_cast<CMSFlexGrid*>(GetDlgItem(IDC_MSFLEXGRID));
    	CString result;
    	CString txt_1;
    	CString txt_2;
     
    	m_FlexGrid->Clear();
        m_FlexGrid->SetRows(2);
        m_FlexGrid->SetFormatString("Nom|prenom|adresse");
     
    	GetDlgItem(IDC_EDIT1)->GetWindowText(txt_1);
    	GetDlgItem(IDC_EDIT2)->GetWindowText(txt_2);
     
    	result = "";
    	for (int j = 0;j<12;j++)
    	{
     
    		result = result + txt_1 + txt_2;
    		m_FlexGrid->SetCol(j);
    		m_FlexGrid->AddString(result);	
                    }

    Cdlt
    Philo

  2. #2
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Salut,

    Pour utiliser le contrôle activeX MSFlexgrid tu dois générer une classe MFC à partir d'un contrôle ActiveX. Le code généré te produit la classe CMSFlexGrid qui dérive de CWnd

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class CMSFlexGrid : public CWnd
    {
    protected:
    	DECLARE_DYNCREATE(CMSFlexGrid)
    public:
    CLSID const& GetClsid()
    	{
    		static CLSID const clsid
    			= { 0x6262D3A0, 0x531B, 0x11CF, { 0x91, 0xF6, 0xC2, 0x86, 0x3C, 0x38, 0x5E, 0x30 } };
    		return clsid;
    	}
    //...
    Ensuite tu déclares le contrôle ActiveX par exemple dans ta boîte de dialogue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CMSFlexGrid	m_FlexGrid;
    Et tu associes ce contrôle à un ID de ressource dans DoDataExchange() comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DDX_Control(pDX, IDC_MSFLEXGRID1, m_FlexGrid);
    Ensuite tu peux l'initialiser ainsi dans une de tes méthodes

    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
     
    m_FlexGrid.Clear();
    	m_FlexGrid.SetCols(6);
    	m_FlexGrid.SetRows(2);
    	m_FlexGrid.SetCol(0);m_FlexGrid.SetRow(0);
    	m_FlexGrid.SetColWidth(0,1402);	m_FlexGrid.SetText("N° CPTE");
    	//
    	m_FlexGrid.SetCol(1);m_FlexGrid.SetRow(0);
    	m_FlexGrid.SetColWidth(1,4000);	m_FlexGrid.SetText("DESIGNATION");
    	//
    	m_FlexGrid.SetCol(2);m_FlexGrid.SetRow(0);
    	m_FlexGrid.SetColWidth(2,2272);	m_FlexGrid.SetText("TOTAUX DEBITS");
    	//
    	m_FlexGrid.SetCol(3);m_FlexGrid.SetRow(0);
    	m_FlexGrid.SetColWidth(3,2272);	m_FlexGrid.SetText("TOTAUX CREDITS");
    	//
    	m_FlexGrid.SetCol(4);m_FlexGrid.SetRow(0);
    	m_FlexGrid.SetColWidth(4,2272);m_FlexGrid.SetText("SOLDES DEBITEURS");
    	//
    	m_FlexGrid.SetCol(5);m_FlexGrid.SetRow(0);
    	m_FlexGrid.SetColWidth(5,2272);m_FlexGrid.SetText("SOLDES CREDITEURS");
    Et tu peux l'utiliser comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    m_FlexGrid.SetRows(NumLigne+2);
    	       m_FlexGrid.SetRow(NumLigne);
     
    	       m_FlexGrid.SetCol(0);m_FlexGrid.SetText(REFCD1);
    	       m_FlexGrid.SetCol(1);m_FlexGrid.SetText(DESIGNATION_CD);
     
    	       m_FlexGrid.SetCol(2);m_FlexGrid.SetText(Cvtr(MONTD1));
    	       m_FlexGrid.SetCol(3);m_FlexGrid.SetText(Cvtr(MONTC1));

  3. #3
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    bonjour Gabrielly,
    merci de ton aide ,
    mon souci et de placer le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DDX_Control(pDX, IDC_MSFLEXGRID, m_FlexGrid); 	//}}AFX_DATA_MAP
    je l'ai placé ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void CIhmDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_MSFLEXGRID, m_FlexGrid); 	//}}AFX_DATA_MAP
    	//{{AFX_DATA_MAP(CIhmDlg)
    		// NOTE: the ClassWizard will add DDX and DDV calls here
     
    }


    Voici les erreurs que me renvoie le compilateur :

    :\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(75) : error C2065: 'm_FlexGrid' : undeclared identifier
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(217) : error C2628: 'CMSFlexGrid' followed by 'void' is illegal (did you forget a ';'?)
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(218) : error C2556: 'class CMSFlexGrid __thiscall CIhmDlg::OnButton2(void)' : overloaded function differs only by return type from 'void __thiscall CIhmDlg::OnButton2(void)'
    i:\dev_c++\dev_philo\ihm_mfc\ihm\ihmdlg.h(43) : see declaration of 'OnButton2'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(218) : error C2371: 'OnButton2' : redefinition; different basic types
    i:\dev_c++\dev_philo\ihm_mfc\ihm\ihmdlg.h(43) : see declaration of 'OnButton2'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(232) : error C2039: 'Clear' : is not a member of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(205) : see declaration of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(233) : error C2039: 'SetRows' : is not a member of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(205) : see declaration of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(234) : error C2039: 'SetFormatString' : is not a member of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(205) : see declaration of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(244) : error C2039: 'SetCol' : is not a member of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(205) : see declaration of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(245) : error C2039: 'AddString' : is not a member of 'CMSFlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(205) : see declaration of 'CMSFlexGrid'
    Error executing cl.exe.

    ihm.exe - 9 error(s), 0 warning(s)
    CDLT
    Philo

  4. #4
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Commence par inclure le fichier CMSFlexgrid.h dans ton fichier ihmDlg.cpp

  5. #5
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    Merci de ton aide Gabrielly, c'est mieux avec le fichier preprocesseur déclaré (.h)
    je n'ai que deux erreurs sur le code suivant :
    :\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(234) : error C2146: syntax error : missing ';' before identifier 'm_FlexGrid'
    I:\dev_c++\dev_philo\ihm_mfc\ihm\ihmDlg.cpp(235) : error C2039: 'AddString' : is not a member of 'CMSFlexGrid'
    i:\dev_c++\dev_philo\ihm_mfc\ihm\msflexgrid.h(21) : see declaration of 'CMSFlexGrid'
    Error executing cl.exe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	result = "";
    	for (int j = 1;j<4;j++)
    	{
     
    		result += txt_1 
    		m_FlexGrid->SetCol(j); //ici sa plante
    		m_FlexGrid->AddString(result);	//ici sa plante
     
     
     
     
    	}
    CDLT
    Philo

  6. #6
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Attention au point virgule après "result += txt_1"

    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
     
    result = ""; 
       for (int j = 1;j<4;j++) 
       { 
     
          result += txt_1   // Mettre un point virgule ici
          m_FlexGrid->SetCol(j); //ici sa plante 
     
          // addstring n'est effectivement pas membre du Flexgrid
          m_FlexGrid->AddString(result);   //ici sa plante 
     
     
     
     
       }

  7. #7
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    oui en effet une erreur stupide de ma part.
    // addstring n'est effectivement pas membre du Flexgrid
    m_FlexGrid->AddString(result); //ici sa plante
    Comment créer le membre AddString ou y a t'il un autre membre équivalent a AddString ?


    CDLT
    Philo

  8. #8
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Mais que veux-tu ajouter. Toutes les fonctions membres de CMSFlexgrid sont définit dans le .h

    Est-ce que tu ne confonds pas avec une combobox

  9. #9
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    oui je doit confondre avec listbox (Addstring), donc maintenant j'aimerais remplir mon flexgrid, j'ai regarder les fonction membres du msflexgrid.h ,
    j'ai trouvé AddItem ou faut t'il trouver une fonction commencant par Set...


    Cdlt
    Philo

  10. #10
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    OK, remplace les Set par des put_

  11. #11
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    J'ai trouvé SetText ca marche tres bien !!!
    J'ai une question : lorsque j'ajoute un bouton, je click dessus pour éditer la fonction membre, VC me renvoit une textbox : "cannot add a new member", comprend pas ? (j'ai deux autre bouton ca marche tres bien).


    Cdlt
    Philo

  12. #12
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    Voici un code d'initialisation
    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
    BOOL CMSFlexgridDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
     
    	m_FlexGrid.Clear();
    	m_FlexGrid.put_Cols(6);
    	m_FlexGrid.put_Rows(3);
    	m_FlexGrid.put_Col(0);
    	m_FlexGrid.put_Row(0);
    	m_FlexGrid.put_ColWidth(0,1402);
    	m_FlexGrid.put_Text("N° CPTE");
    	//
    	m_FlexGrid.put_Col(1);
    	m_FlexGrid.put_Row(0);
    	m_FlexGrid.put_ColWidth(1,4000);	
    	m_FlexGrid.put_Text("DESIGNATION");
    	//
    	m_FlexGrid.put_Col(2);
    	m_FlexGrid.put_Row(0);
    	m_FlexGrid.put_ColWidth(2,2272);	
    	m_FlexGrid.put_Text("TOTAUX DEBITS");
    	//
    	m_FlexGrid.put_Col(3);
    	m_FlexGrid.put_Row(0);
    	m_FlexGrid.put_ColWidth(3,2272);	
    	m_FlexGrid.put_Text("TOTAUX CREDITS");
    	//
    	m_FlexGrid.put_Col(4);
    	m_FlexGrid.put_Row(0);
    	m_FlexGrid.put_ColWidth(4,2272);
    	m_FlexGrid.put_Text("SOLDES DEBITEURS");
    	//
    	m_FlexGrid.put_Col(5);
    	m_FlexGrid.put_Row(0);
    	m_FlexGrid.put_ColWidth(5,2272);
    	m_FlexGrid.put_Text("SOLDES CREDITEURS");
     
    	return TRUE;  // return TRUE unless you set the focus to a control
    	// EXCEPTION: OCX Property Pages should return FALSE
    }

  13. #13
    Membre émérite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par défaut
    A la colonne d'indexe 3 et à la ligne d'indexe 2 je met la chaîne "20 %"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    m_FlexGrid.put_Col(3);
    	m_FlexGrid.put_Row(2);	
    	m_FlexGrid.put_Text("20 %");

  14. #14
    Membre éclairé Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Par défaut
    bonjour,
    1) le remplissage du flexGrid marche bien, j'aimerais pouvoir extraire le champ sur lequel ce trouve le focus de la sourie, disont le champ selctionner du flexgrid ?

    2) j'ai une erreur qui ce produit lorsque j'essaie de placer un nouveau bouton sur un form, lorsque j'éssais d'éditer le code du bouton
    le message d'erreur est : "cannot add new member". comprens pas ?




    CDLT
    Philo

Discussions similaires

  1. VS6+MFC Simuler un clic sur une icône
    Par rob24 dans le forum MFC
    Réponses: 2
    Dernier message: 14/07/2009, 19h51
  2. VS6+MFC - SendMessage
    Par rob24 dans le forum MFC
    Réponses: 4
    Dernier message: 11/07/2009, 09h05
  3. [MFC] ligne disjointe FlexGrid
    Par moulefrite dans le forum MFC
    Réponses: 3
    Dernier message: 21/04/2006, 10h04
  4. [MFC][VS6.0] char caractéres
    Par philo71 dans le forum MFC
    Réponses: 1
    Dernier message: 15/02/2006, 12h46
  5. [MFC][VS6.0] Flexgrid
    Par philo71 dans le forum MFC
    Réponses: 9
    Dernier message: 07/02/2006, 10h56

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