Création d'un tableau modulable dans une boite de dialogue
milhandril
Messages postés55Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention11 décembre 2008
-
17 juil. 2003 à 10:32
milhandril
Messages postés55Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention11 décembre 2008
-
18 juil. 2003 à 14:29
Je souhaite ouvrir une boite de dialogue dans laquelle il y aurait un tableau d'une vingtaine de colonne. Le problème c que le nombre de ligne (et donc le nombre de variable associé au tableau) dépendra du nombre d'enregistrement fait dans un fichier texte (sachant qu'un enregistrement prend une ligne dans le fichier texte). Il faudrait donc qu'après avoir fait un tri dans ses données je puisse afficher dans le tableau les enregistrements que j'aurais selectionné et (accessoirement pouvoir récupérer les données de l'une des lignes du tableau lorsque cela s'avèrerait utile).
A voir également:
Création d'un tableau modulable dans une boite de dialogue
milhandril
Messages postés55Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention11 décembre 2008 17 juil. 2003 à 11:49
Je ne me suis pas encore atteler à cette tache donc je suis encore libre de choisir l'objet graphique mais si tu as une solution avec une list view alors ce sera mon objet...
milhandril
Messages postés55Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention11 décembre 2008 17 juil. 2003 à 16:54
effectivement ca correspond tout à fait à ce que je recherchais mais g un pb d'init. je définis:
static HPWND hwnd;
mais la manière dont on pointe la list view dans le source (cad hwnd=GetDlgItem(hDlg, IDC_LISTVIEW) avec hDlg de type HWND) ne passe pas à la compilation. g donc essayé de passer par un pointeur comme je le ferai pour une combo ou uns list box mais rien à faire. La seule chose qui passe à la compilation c:
hwndListView=(HWND)GetDlgItem(IDC_LIST);
et c donc sans grande surprise que je me retrouve avec un list view vide à l'execution.
Vous n’avez pas trouvé la réponse que vous recherchez ?
milhandril
Messages postés55Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention11 décembre 2008 17 juil. 2003 à 17:54
non pas exactement, d'abord parceque ma boite de dialogue est deja ouverte quand je la rempli et ensuite parceque j'avais des erreurs de compilation avec ce qui avais été fait (remarque si c du .net c peu etre normal!!)
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 17 juil. 2003 à 17:56
C'est pas du tout du .NET, simplement du pur Win32. Tu as bien mis les headers ainsi que la librairie pour le link ?
Bizarre ton problème, tu vois au moins les colonnes dans ta listview ?
milhandril
Messages postés55Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention11 décembre 2008 17 juil. 2003 à 17:59
tu vois ce que c blanc? ben encore plus... et oui g bien mis les bibliothèque (g vérifié au moins 10 fois) et puis si ct un pb comme ca je pourrais pas executer...
milhandril
Messages postés55Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention11 décembre 2008 17 juil. 2003 à 18:44
voila le code sachant que cette boite de dilaogue est ouverte à partir d'une autre et que le programme ressemble plus à une base de données qu'à autre chose.
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void carte_sorties::Init_list()
{
CString Sortie;
CString Sortie2;
int j=0;
int n=carte_sorties::Nbr_enr(chemin_OF);
//CListBox* m_carte_sortie= (CListBox*) GetDlgItem(IDC_carte_sortie);
/*//Effacer les valeurs déjà inscrite dans la listbox
m_carte_sortie->ResetContent();
ASSERT(m_carte_sortie->GetCount() == 0);*/
UpdateData(false);
MessageBox("");
for(int i=0;i<n;i++)
{
essai_sortie=carte_sorties::Extrait(i, chemin_OF, 26);//extraction du champs réparation
//ajouter les valeurs dans la listbox
if ((atoi(essai_sortie))==1)
{
Sortie="";
Sortie2="";
hwndListView = (HWND)GetDlgItem(IDC_LIST_Rep);//Selon moi la ligne qui est fausse (pb d'initialisation)
strcpy(buflect_sortie,Sortie);
carte_sorties::InitListView(hwndListView,buflect_sortie);
//Les parties avec Sigle, Sigle,Num_OF et Indice sont aussi à inserer dans la list box
/*
for(j=strlen(Sortie); j<TAILLE;j++)
{
Sortie+=" ";
}
Sortie2+=Sortie;
Sortie="";
if(!strcmp(essai_sortie,"\n"))//Si on trouve le caractère de séparation d'enregistrement
{
nbr++;
esp=j+1;
}
else
{
if(nbr==i)
{
if(!strcmp(essai_sortie,";"))//Si on trouve le caractère de séparation d'enregistrement
{
nbr2++;
if(nbr2==champ)
{
esp=j+1;//garder l'emplacement du début du champs à extraire
}
else
{
if(nbr2==(champ+1))
{
essai_sortie="";
empl=f_sortie2.Seek(esp, CFile::begin);//se caler sur le début du champs à extraire
esp=j-esp;//Calcule de la longueur du champs
f_sortie2.Read(buflect_sortie,esp);
for (int buf=0;buf<esp;buf++)
{
essai_sortie+=buflect_sortie[buf];
}
j=fin;
}
}
}
}
}
}
f_sortie2.Close();
}
return essai_sortie;
}
// ajoute un item a un ListView
void carte_sorties::InitListView(HWND hwnd,char *text)
{
LV_ITEM lvi;
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 17 juil. 2003 à 18:54
La ligne suivante est fausse, c'est évident
hwndListView = (HWND)GetDlgItem(IDC_LIST_Rep):
Tu utilises une méthode de la classe CDialog alors que tu n'est pas dans une classe dérivée de CDialog. De plus, elle renvoit un pointeur vers un objet CWnd et non un HWND (MFC obligent).
En général, on n'essaye de séparer un programme comme suit:
- Les classes qui gérent l'applicatif,
- Les classes qui s'occupent de l'affichage.
Tous les traitements qui ne sont pas graphiques devraient être fait dans les classes applicatives, ces dernières ne se préoccupant pas du tout de l'affichage, ne savent même pas si c'est un programme graphique MFC, Win32 ou en mode console. Evidémment si tu dois recommencer ton projet au début, tu ne voudras certainement pas mettre en place cette solution.
milhandril
Messages postés55Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention11 décembre 2008 17 juil. 2003 à 19:16
Techniquement je suis bien dans une classe dérivée de Cdialogue, le code que j'ai envoyé correspond au méthode d'une classe directement dérivée de Cdialogue (puisque la base de cette classe est une boite de dialogue). C d'ailleurs pour ca que je gère l'affichage dans le code mais je retiens tes conseils si je vois que g le temps je mettrais les fonstion de tri (qui sont souvent les meme dans les différant s fichier .cpp) dans un fichier commun. Et koi qu'il en soit je te remercie de m'avoir accorder du temps meme si en definitive ca ne regle pas mon pb.