Accueil > Forum > > > > Problème de récupération des lignes d'un Edit Multiline
Problème de récupération des lignes d'un Edit Multiline
mardi 16 novembre 2004 à 01:46:21 |
Problème de récupération des lignes d'un Edit Multiline

LaPatoshe
|
Bonjour, j'ai un petit problème car je ne parviens pas à récupérer de façon intacte chacune des lignes rentrées dans un controle Edit en Multiline. Voici ma partie de code : HWND EditTexte; ............. long LigneCourante = 0; //Compteur de position courante long MaxLine =0; //Nb de ligne de mon edit box LPSTR SLigne = (LPSTR) malloc (100); // Chaine chargée de contenir le numéro de la ligne pour inscription dans un fichier. long Taille = 0; //Taille de la ligne courante TCHAR BufferLigne [1000]; //C'est le buffer qui va contenir chaque ligne lue MaxLine = SendMessage(FREInstructionTexte, EM_GETLINECOUNT, 0, 0); for (Ligne = 0; Ligne < MaxLine; Ligne ++) { Taille = SendMessage(FREInstructionTexte, EM_LINELENGTH, (WPARAM) Ligne, 0); SendMessage(FREInstructionTexte, EM_GETLINE, (WPARAM) Ligne, (LPARAM) BufferLigne); BufferLigne[Taille+1] = '\0'; ltoa(Ligne,SLigne, 10); WritePrivateProfileString("INSTRUCTION", SLigne, BufferLigne, "Fichier.txt"); } Dans cet exemple, logiquement, on cherche le nombre maxi de lignes contenues dans l'Edit, puis, on boucle de façon à déterminer pour chacune des lignes sa taille, on lit chaque ligne et on place son contenu dans BufferLigne de type TCHAR, puis, on ajoute '\0' à la fin de chaque ligne, enfin, on écrit BufferLigne dans un fichier à la position numérotée de chaque ligne. Et bien mon prog plante,le fichier texte généré contient pour chaque ligne un nombre toujours identique de caractères. Si la première ligne fait 10 Caractères, toutes les autres sont écrites avec 10 Caractères, et si elles sont plus petites, des caractères parasite sont rajoutés. Si je m'emploie à 'nettoyer' BufferLigne' en remplissant chaque élément par le caractère NULL au moyen d'une boucle, j'ai beau réaffecter à BufferLigne les autres ligne de mon edit, rien ne s'écrit dans mon fichier. Pour avoir l'intégralité des lignes de mon edit dans mon fichier, il faut que j'enlève l'ajout de \0 à la fin de mes lignes, mais cela laisse d'inombrables caractères parasites. De plus, si mon Edit comporte des sauts de ligne, il sont remplacés entièrement par les mêmes caractères que la ligne précédente. Comment faire pour avoir une restitution exacte dans mon fichier des lignes de mon editbox ? Merci d'avance LaPatoshe
|
|
mardi 16 novembre 2004 à 01:48:23 |
Re : Problème de récupération des lignes d'un Edit Multiline

LaPatoshe
|
Rectificatif : mon edit box se nomme HWND FREInstructionTexte et non EditTexte. LaPatoshe
|
|
mardi 16 novembre 2004 à 07:00:29 |
Re : Problème de récupération des lignes d'un Edit Multiline

AlexMAN
|
Je vois pas pkoi tu t'embetes, tu fais un coup de GetDLgItemText, puis tu parses le buffer avec un pointeur pour trouver '\r\n' ki delimiteront les lignes, voila un exemple de GetDlgItemText :
#include <windows.h> #include "resource.h"
BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { char buf[520];
switch (message) { case WM_COMMAND: if (IDOK == wparam) { GetDlgItemText(hwnd, IDC_EDIT1, buf, 520); MessageBox(hwnd, buf, 0, 0); }else if (IDCANCEL == wparam) EndDialog(hwnd, 0); return 0; default: return 0; } }
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE p, LPSTR q, int r) { DialogBoxParam(hInst, (LPCTSTR)IDD_DIALOG1, 0, DlgProc, 0); return 0; }
Si tu n'as pas compris, je repasse ce soir.
++ bonne chance
|
|
mardi 16 novembre 2004 à 08:54:58 |
Re : Problème de récupération des lignes d'un Edit Multiline

ymca2003
|
astuce pour EM_LINELENGTH :
EM_LINELENGTH An application sends an EM_LINELENGTH message to retrieve the length of a line, in characters, in an edit control.
EM_LINELENGTH wParam = (WPARAM) ich; // character index lParam = 0; // not used; must be zero
!!!! wParam n'est pas le numéro de ligne mais l'indice du premier caractère de la ligne depuis le début du texte !!!
cet indice peut être obtenu à partir du numéro de ligne par EM_LINEINDEX wParam = (WPARAM) line; // line number lParam = 0; // not used; must be zero
ensuite, pour EM_GETLINE, li faut cette fois donner le numéro de ligne et un buffer. Ce buffer doit faire au moins 2 octets (1 WORD) car lors de l'appel, il faut mettre sa taille dans le premier WORD
|
|
mardi 16 novembre 2004 à 09:31:00 |
Re : Problème de récupération des lignes d'un Edit Multiline

Arnotic
|
Bonjour,
Une source de mon ami Brunews : http://www.cppfrance.com/code.aspx?id=21272
@+ Arnotic, Admin CS, MVP Visual C++
|
|
mardi 16 novembre 2004 à 18:59:00 |
Re : Problème de récupération des lignes d'un Edit Multiline

AlexMAN
|
Ok, il ne faut donc pas utiliser GetDlgItemText ? Mais pourquoi alors ? parce que ca marche, nan ?
Merci
|
|
mardi 16 novembre 2004 à 23:24:44 |
Re : Problème de récupération des lignes d'un Edit Multiline

LaPatoshe
|
Salut AlexMan, j'ai essayé ta méthode, mais elle ne fonctionne pas. Pour info, mon prog est constitué de feuilles et de contrôles (pas de DialogBox). J'ai quand même tenté l'opération GetDlgItemText(hEdit, 0, Buffer, 2000), mais lors de l'écriture de Buffer dans mon fichier, rien n'apparait. Vu la définition des paramètres demandés dans cette fonction, j'ai usé de SetWindowLong (hEdit, GWL_ID, 1234); pour donner l'identifieur de mon contrôle comme étant 1234, et ensuite j'ai inscrit GetDlgItemText(hFeuille, 1234, Buffer, 2000); Dans mon fichier on retrouve d'enregistrer tout ce que je tape dans l'edit Box. cependant voilà, lorsque je lis ce même fichier, et que je code StDlgItemText(hFeuille, 1234, buffer), il n'apparait dans ma zone de texte que la première ligne, les autres ne s'affichent pas. Cela donne le même résultat que lorsque j'utilisait WM_GETTEXT et WM_SETTEXT. LaPatoshe
|
|
mardi 16 novembre 2004 à 23:55:37 |
Re : Problème de récupération des lignes d'un Edit Multiline

LaPatoshe
|
Je viens de tenter de comprendre l'exemple cité par Arnotic, mais je le trouve un peu complexe, et utilise beaucoup les dialogBox (Y en a pas dans mon prog), quelqu'un aurait il un exemple le plus simple soit il montrant comment récupérer un edit box ligne par ligne ? Merci LaPatoshe
|
|
mercredi 17 novembre 2004 à 01:09:02 |
Re : Problème de récupération des lignes d'un Edit Multiline

LaPatoshe
|
LE crois que je viens de trouver un début de solution à mon problème.
LPSTR Ligne =(LPSTR) malloc (10); long Pl=0; long nbLigne = SendMessage(FREInstructionTexte,EM_GETLINECOUNT,0, 0); for (Pl = 0; Pl < nbLigne; Pl ++) { char LigneTexte[2000]; *((WORD*) LigneTexte) = 2000; ltoa(Pl,Ligne,10); long cpt=0; for (cpt=0; cpt<2000; cpt++) { szbuff[cpt]= ' '; }
SendMessage(FREInstructionTexte, EM_GETLINE, (WPARAM) Pl, (LPARAM) LigneTexte); WritePrivateProfileString("INSTRUCTION", Ligne, szbuff, DCh); }
*((WORD*) LigneTexte d'après ce que j'ai compris en regardant certaines sources permettrait d'écrire la taille de LigneTexte dans la partie basse de cette variable (comme si LigneTexte pouvait contenir deux choses telle une structure). Grace à cela, mon prog marche, mes lignes s'inscrivent entièrement dans mon fichier, et les caractères parasites sont remplacés par le caractère d'espacement. C'est un bon début, maintenant, je cherche comment calculer à peu près la place à réserver pour chacune des lignes pour ne pas à avoir à écrire les caractères d'espacement qui sont de beaucoup trop. Encore Merci pour votre aide. LaPatoshe
|
|
mercredi 17 novembre 2004 à 06:48:08 |
Re : Problème de récupération des lignes d'un Edit Multiline

AlexMAN
|
Ok dsl si ca marche po, j'avais testé chez moi et ca fonctionnait, dsl encore. Je viens de regarder la source de Brunews, pour connaitre la 'taille d'une ligne', il te faut envoyer un msg EM_LINELENGTH ki te renverra la taille (size = SendMessage(h, EM_LINELENGHT, ..)). Voila, encore dsl pour le truc ke je t'avais proposé, et pis bonne chance.
ymca & Arnotic > J'aimerais que vous me disiez pourkoi ca ne fonctionne pas GetDlgItemText ? Merci d'avance a vous deux.
++
|
|
Cette discussion est classée dans : fichier, ligne, lignes, edit, bufferligne
Répondre à ce message
Sujets en rapport avec ce message
[C] lignes d'un fichier dans un tableau : Segmentation fault [ par Michel76 ]
Bonjour,Pardonnez-moi de cette question de débutant.Soit un fichier contenant :-----001002-----Je souhaiterais mettre chacune des lignes de ce fichier
se deplacer a la ligne dans un fichier [ par dletozeun ]
est ce que quelqu'un connait une commande,une fonction qui permet de se de placer de lignes en lignes plutot que de caracteres en caracteres?Par ex: p
lire fichier ligne par ligne [ par mat74 ]
salut a ts je voudrai savoir comment je pourrai lire un fichier lignes par lignes . par exemple une fonction qui me permerttrai de recuperer la ligne
pb recuperer nombre de lignes [ par sergio18 ]
Bonjourje fais une classe ou je recupere le contenu d'un fichier texte lignes par lignes. Pour cela,j'utilise la fonction fgets et vu qu'elle ne retou
lecture d'un fichier ligne par ligne [ par oudkaramla ]
salut à tous,j'ai un problème: j'ai un fichier texte contenant quatre lignes.moi je veux lire ces quatre lignes et les stocker chacun dans une variabl
lire un ligne non defini... [ par jojomillenium ]
Hello! J'ai un souci, je sais pas comment faire! Je dois lire un fichier qui est généré par un autre programme, donc je ne peux pas le modifier. Dans
lecture fichier et test des lignes... [ par jojomillenium ]
Bonjour, J'aimerai lire un fichier qui ressemble a ca: KJ 1 3 5; I OPL; B 12 34 78, 90; I PPL; et ainsi de suite des lignes qui ne sont pas du meme
récupérer des lignes d'un fichier txt [ par the_neo_81 ]
Bonjour à tous, voila donc ma question.Cela fait un bon moment que je cherche à: -lire un fichier txt préformater (je sais que tel ligne = tel inf
aide traitement du fichier [ par boualiasma ]
J'ai un fichier qui se compose de deux champs : - numero présenté par un entier - attribut présenté par une chaine caractère. On a la même taille po
moyennage besoin d'aide [ par cedm237 ]
Bonjour, je connais pas grand chose en C, mais j'ai besoin d'un petit code, qui me fasse ceci: -j'ai un fichier contenant 1millions de ligne de coordo
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|