Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1258 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Edit Control

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Edit Control

n°1053956
AsTro
Posté le 20-04-2005 à 17:21:42  profilanswer
 

Bonjour,
Je suis enmerdé avec un Edit Control qui fait planté mon appli car il est plein. Je l'utilise en multi-lignes.
J'ai beau changé la taille limite mais rien y fait, ca plante toujours.
A l'initialisation de la fenetre je fais ca :

Code :
  1. UINT maxLimit = 600000000;
  2. editControl.SetLimitText(maxLimit);


 
et apres j'ajoute mon texte avec

Code :
  1. editControl.SetWindowText("mon_texte" )


Il s'étend sur des centaines de ligne au final.
 
Que faire? Merci


Message édité par AsTro le 20-04-2005 à 17:25:19
mood
Publicité
Posté le 20-04-2005 à 17:21:42  profilanswer
 

n°1053973
AsTro
Posté le 20-04-2005 à 17:32:55  profilanswer
 

En fait, j'utilise une CString intermédiaire. Je pense que c'est elle qui est trop courte. Existe-t-il un type plus grand que CString?
 
Comment je pourrais faire ca proprement? Je vais pas faire un tableau de CString :(

n°1054052
HelloWorld
Salut tout le monde!
Posté le 20-04-2005 à 18:41:18  profilanswer
 

Comment utilises-tu ton CString ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1054087
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-04-2005 à 18:58:24  profilanswer
 

CString::GetLength() retourne un int, on peut donc supposer que la taille maximale d'une CString tient sur 32 bits !
Donc bon, je veux bien te croire quand tu dis que tes chaines sont longues, mais de là à atteindre 4 294 967 296 caractères, je pense plutot que tu dois te louper en utilisant ta CString


---------------
J'ai un string dans l'array (Paris Hilton)
n°1054135
SquiZZ
Posté le 20-04-2005 à 19:30:31  profilanswer
 

me semble que la classe CEdit a une limitation pour la taille maximale de donnée, genre 32k pour win98 et 64k pour win NT/XP/2K.
 
Pour dépasser ca, tu peux remplacer ton CEdit par un CRichEditCtrl qui n'a pas cette limite (ou beaucoup plus loin).
sinon il me semble que CEdit remonte un evenement lorsqu'il est plein.

n°1054178
HelloWorld
Salut tout le monde!
Posté le 20-04-2005 à 20:03:36  profilanswer
 

Je crois qu'il s'agit de taille par défaut, qui sont modifiables même avec l'Edit de base. De plus, si je me souviens bien cette taille limite n'affecte que le texte tapé / entré par l'utilisateur et non le texte envoyé par WM_SETTEXT.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1054233
antp
Super Administrateur
Champion des excuses bidons
Posté le 20-04-2005 à 20:31:45  profilanswer
 

SquiZZ a écrit :

me semble que la classe CEdit a une limitation pour la taille maximale de donnée, genre 32k pour win98 et 64k pour win NT/XP/2K.
 
Pour dépasser ca, tu peux remplacer ton CEdit par un CRichEditCtrl qui n'a pas cette limite (ou beaucoup plus loin).


 
Un Edit multiligne de windows ne peut contenir que 64k en Win9x, mais 2 Go en NT/2K/XP. Je ne sais par contre pas si le CEdit suit les mêmes limites que l'Edit de l'API Win32. Je me base sur les limites du "TMemo" en Delphi :D


Message édité par antp le 20-04-2005 à 20:32:50

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1054280
AsTro
Posté le 20-04-2005 à 20:57:08  profilanswer
 

En fait j'ai une appli qui recupere par WMI les logiciels installés sur la machine. Donc en gros j'ai une boucle et pour chaque logiciel je recupere une 20aine d'infos. Donc au fur et a mesure je rempli ma CString:
 
En gros je fais ca : (j'ai pas le code sous les yeux)
 

Code :
  1. CString edit_text = "Début";
  2. while(...)
  3. {
  4.     edit_text += "\r\n";
  5.     edit_text += resultat_wmi;
  6.     editControl.SetWindowText(edit_text);
  7. }


 
Et au bout d'un moment ca plante. Si j'arrete aux bout de 10 boucles ca marche donc je suppose que c'est un probleme de taille de CString ou CEdit.
 
J'ai aussi passé ma variable CEdit en Value plutot que Control et ca fait la meme chose.


Message édité par AsTro le 20-04-2005 à 20:59:18
n°1054283
AsTro
Posté le 20-04-2005 à 21:01:06  profilanswer
 

antp a écrit :

Un Edit multiligne de windows ne peut contenir que 64k en Win9x, mais 2 Go en NT/2K/XP. Je ne sais par contre pas si le CEdit suit les mêmes limites que l'Edit de l'API Win32. Je me base sur les limites du "TMemo" en Delphi :D


 
 
Si je récupère la taille du CEdit (GetLimitText) il me renvoi 300000 je crois me souvenir.
 
Le CRichEditCtrl c'est en C# ca je crois.


Message édité par AsTro le 20-04-2005 à 21:01:32
n°1054293
SquiZZ
Posté le 20-04-2005 à 21:05:45  profilanswer
 

AsTro a écrit :


Et au bout d'un moment ca plante.


 
Ca plante comment ?

mood
Publicité
Posté le 20-04-2005 à 21:05:45  profilanswer
 

n°1054363
AsTro
Posté le 20-04-2005 à 21:37:35  profilanswer
 

Je te dis ca demain, mais de tete, le debug m'envoi dans une fonction de CString.h ou un fichier du genre, je confirme demain.

n°1054448
HelloWorld
Salut tout le monde!
Posté le 20-04-2005 à 22:46:15  profilanswer
 

resultat_wmi c'est quoi exactement ?
Le Rich Edit c'est Win32 de base.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1054823
AsTro
Posté le 21-04-2005 à 09:19:29  profilanswer
 

Mon resultat_wmi c'est :

Code :
  1. BSTR HUGEP *pbstr;


 
et je l'utilise comme ca :

Code :
  1. CString tmpName;
  2. ...
  3. while(...)
  4. {
  5.    ...
  6.    tmpName = pbstr[i];
  7.    edit_result += "\r\n";
  8.    edit_result += tmpName;
  9.    edit_result += " : ";
  10.    editControl.SetWindowText(edit_result);
  11.    ...
  12. }


 
 
Et le debug m'envoi dans le fichier "cstringt.h" sur la ligne:

Code :
  1. static int __cdecl GetBaseTypeLength( LPCWSTR pszSource ) throw()
  2. {
  3. // Returns required buffer length in XCHARs
  4. return ::WideCharToMultiByte( _AtlGetConversionACP(), 0, pszSource, -1, NULL, 0, NULL, NULL )-1; // <------  sur cette ligne
  5. }


Message édité par AsTro le 21-04-2005 à 09:53:58
n°1054872
HelloWorld
Salut tout le monde!
Posté le 21-04-2005 à 10:37:09  profilanswer
 

et je suppose que ton pointeur n'est jamais nul...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1054947
AsTro
Posté le 21-04-2005 à 11:17:46  profilanswer
 

Je ne pense pas que ce soit ca car je teste si la fonction qui assigne le pointeur échoue.  
De plus, Il y a 20 resultats à afficher. Si j'affiche tout ca plante au 11eme. Si j'affiche les 10 premiers ca passe et si j'affiche le reste, les 10 derniers, ca passe aussi, donc y'a pas de pointeur NULL qui traine :(


Message édité par AsTro le 21-04-2005 à 11:31:01
n°1055136
AsTro
Posté le 21-04-2005 à 14:00:49  profilanswer
 

Oui c'est un bad pointer mon probleme, mais comment je peux tester quand j'ai un bad pointer pour ne pas effectuer d'opération dessus? (j'ai testé avec NULL et 0 mais ca ne marche pas)
Pour info ma variable est un VARIANT et je recupere la valeur qu'il m'interrese comme ca :
mon_variant.bstrVal;
Et le debuggage me met pour mon_variant.bstrVal : 0x000000a8 <Bad Ptr>.
 
Ce qui est zarb c'est que y'a souvent <Bad Ptr> mais ca passe sans probleme.

n°1055411
HelloWorld
Salut tout le monde!
Posté le 21-04-2005 à 17:01:37  profilanswer
 

Test si mon_variant.vt == VT_BSTR.
Tu récupères ça comment exactement ? Tu fais gaffe aux fuites de mémoire ?
Tu devrais jeter un oeil à _bstr_t et _variant_t.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Edit Control

 

Sujets relatifs
Winform - User Control[c#] reflexivité et control
[EDIT] Question license : code multi architecture vectorielleUtilisation de control progress
Win32, listview control : Changer la font d'une seule colonne ?[C/Linux] Gestion des interruptions [edit : exploiter le driver série]
[PHP & Flash] Formulaire en Flash > Pb de Control données ! :'(Prendre un élèments d'édit et le mettre dans un mémo
Problem en Visual C++ pour changer la couleur d'un Edit Control CEdit[MFC] Edit control + informations par ligne
Plus de sujets relatifs à : Edit Control


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR