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

  FORUM HardWare.fr
  Programmation
  C

  control d'edition ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

control d'edition ...

n°1452801
big_dadi_f​at
Posté le 05-10-2006 à 14:29:41  profilanswer
 

Salut.  
Je veux récupérer un nombre qui a été saisi dans un champ d'edit, avec la fonction GetDlgItemText(),  
donc je fais  

Code :
  1. GetDlgItemText(hwnd, IDE_EDITPORT, port, 256);


sachant que port et un nombre entier j'ai un warning, donc je cast insi

Code :
  1. GetDlgItemText(hwnd, IDE_EDITPORT, (LPSTR)port, 256);


 
je n'ai plus de warning, mais il y a un probléme:  
 
ce que j'ai récupérer dois étre un nombre entier pour que je puisse par la suite l'utiliser dans htons(port), qui dois absolument prendre un nombre entier (le port de connexion).  
Or dans ce que j'ai fais j'ai une erreur connexion a cause du port (qu'on a saisi), or si j'utilise directement htons(2000) par exemple, je n'ai plus de probléme, ce qui confirme que le probléme vien de la récupération (saisi) du port dans le champ d'édition.   :sweat:
 
Merci pour votre aide.


Message édité par big_dadi_fat le 07-10-2006 à 11:29:55
mood
Publicité
Posté le 05-10-2006 à 14:29:41  profilanswer
 

n°1452861
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-10-2006 à 16:05:02  profilanswer
 

euuh... tu peux poster le code dans lequel tu alloues la mémoire pour ta variable port ? un doute m'étreint là !


---------------
J'ai un string dans l'array (Paris Hilton)
n°1452866
bb138
La vie est belle ...
Posté le 05-10-2006 à 16:14:14  profilanswer
 

Peut-être que GetDlgItemText ne renvoie pas un entier mais une chaîne de caractères...

n°1452870
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-10-2006 à 16:21:48  profilanswer
 

bb138 a écrit :

Peut-être que GetDlgItemText ne renvoie pas un entier mais une chaîne de caractères...


non, GetDlgItemText() renvoie 0 si elle échoue. sinon, elle renvoie le texte du controle dans le buffer défini en 3eme paramètre (la variable port de dadifat)
c'est pour ça que je lui demande son code : je soupçonne fort qu'il ait tapé une atrocité de ce genre :

Code :
  1. int port;
  2. GetDlgItemText(hwnd, IDE_EDITPORT, (LPSTR)port, 256);


 
alors que port est un pointeur vers une zone de mémoire que l'on doit préalablement allouer


---------------
J'ai un string dans l'array (Paris Hilton)
n°1452871
big_dadi_f​at
Posté le 05-10-2006 à 16:23:26  profilanswer
 

j'ai fait comme ta dis  :sweat:


Message édité par big_dadi_fat le 05-10-2006 à 17:08:18
n°1452872
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-10-2006 à 16:24:56  profilanswer
 

bingo, j'avais raison [:kbchris]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1452877
big_dadi_f​at
Posté le 05-10-2006 à 16:28:16  profilanswer
 

Harkonnen a écrit :

bingo, j'avais raison [:kbchris]


 
Je n'avais pas bien compris ce que tu voullez dire par :
alors que port est un pointeur vers une zone de mémoire que l'on doit préalablement allouer  :jap:  .
 


Message édité par big_dadi_fat le 05-10-2006 à 16:28:47
n°1452893
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-10-2006 à 16:40:26  profilanswer
 

le paramètre 3 de GetDlgItemText() est un pointeur vers une zone mémoire qui recevra le texte que contient le controle. or toi, tu lui fournis une variable non initialisée, donc BOUM !
si tu veux que ça fonctionne :  
- tu dois allouer une zone mémoire de x caractères, qui recevra le texte
- tu dois indiquer en paramètre 4 de GetDlgItemText() le nombre maximum de caractères que tu veux récupérer de ton controle, lequel nombre devra obligatoirement être inférieur ou égal à la taille de ton buffer sous peine de débordement.
mais quand tu auras fait ça, tu ne seras pas au bout de tes peines, car ton buffer contiendra une suite de caractères, que tu devras ensuite convertir en numérique pour le filer à bouffer à htons().
à ce moment là, regarde du coté de strtol()
 
edit: un peu de code

Code :
  1. char port[6]; // 6 caractères maxi pour le port
  2. if (!(GetDlgItemText(hwnd, IDE_EDITPORT, port, 6)));
  3.       *port = 0; // impossible de récupére le texte pour une raison x ou y : on désalloue le pointeur
  4. else
  5.    // le texte est récupéré dans port. a toi maintenant de le convertir avec strtol()


Message édité par Harkonnen le 05-10-2006 à 16:44:00

---------------
J'ai un string dans l'array (Paris Hilton)
n°1452905
big_dadi_f​at
Posté le 05-10-2006 à 16:56:05  profilanswer
 

C'est bon j'ai reglé le probléme, merci pour ton aide Harko  :)


Message édité par big_dadi_fat le 05-10-2006 à 17:06:53
n°1452922
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 05-10-2006 à 17:13:02  profilanswer
 

c'est l'adresse d'un pointeur quelconque, initialisé ou pas qui sert à déterminer l'adresse du premier caractère non numérique dans la chaine. généralement on n'a pas à s'en servir
 
edit: il a édité le fourbe [:mlc]

Message cité 1 fois
Message édité par Harkonnen le 05-10-2006 à 17:13:32

---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 05-10-2006 à 17:13:02  profilanswer
 

n°1453204
bb138
La vie est belle ...
Posté le 06-10-2006 à 09:31:29  profilanswer
 

En fait, je pensais que tu voulais stocker directement la valeur saisie dans une variable entière :)

n°1453267
big_dadi_f​at
Posté le 06-10-2006 à 11:21:30  profilanswer
 

Harkonnen a écrit :

c'est l'adresse d'un pointeur quelconque, initialisé ou pas qui sert à déterminer l'adresse du premier caractère non numérique dans la chaine. généralement on n'a pas à s'en servir
edit: il a édité le fourbe [:mlc]


 
Ok merci Harko. Je l'avai compris, c'est pour ca que j'ai édité.
 
 

Citation :

En fait, je pensais que tu voulais stocker directement la valeur saisie dans une variable entière


C'est ce j'avais fais  :p  .
 


Message édité par big_dadi_fat le 06-10-2006 à 11:37:11
n°1453467
Angel64
Posté le 06-10-2006 à 16:16:04  profilanswer
 

A mon avis, la fonction GetDlgItemInt() est plus adaptée à ce que tu veux faire. Tu récupères directement l'entier saisi.

n°1453508
big_dadi_f​at
Posté le 06-10-2006 à 16:49:01  profilanswer
 

Angel64 a écrit :

A mon avis, la fonction GetDlgItemInt() est plus adaptée à ce que tu veux faire. Tu récupères directement l'entier saisi.


oh, je ne savais pas qu'elle existe...
Merci
 

n°1453513
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-10-2006 à 16:53:58  profilanswer
 

Angel64 a écrit :

A mon avis, la fonction GetDlgItemInt() est plus adaptée à ce que tu veux faire. Tu récupères directement l'entier saisi.


mais ça inclut quand même un test pour savoir si l'utilisateur a rentré un nombre ou pas... autant récupérer le texte et le convertir avec strtol(), la vérif est plus facile (=0 si conversion impossible, plus simple à tester)

n°1453562
Angel64
Posté le 06-10-2006 à 17:25:15  profilanswer
 

Cette fonction modifie un BOOL (passé en argument par pointeur) pour indiquer si la conversion a pu être effectuée correctement ou pas. Il suffit de tester ce booléen ensuite.

n°1453568
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-10-2006 à 17:33:06  profilanswer
 

ah ben oui tiens ! jdevrais l'utiliser plus souvent cette fonction [:tinostar]


Message édité par Harkonnen le 06-10-2006 à 17:33:17
n°1453570
big_dadi_f​at
Posté le 06-10-2006 à 17:34:08  profilanswer
 

Harkonnen a écrit :

mais ça inclut quand même un test pour savoir si l'utilisateur a rentré un nombre ou pas... autant récupérer le texte et le convertir avec strtol(), la vérif est plus facile (=0 si conversion impossible, plus simple à tester)


je peut en méme temps obligé l'utilisateur a ne saisir qu'un nombre et pas autre chose, grasse à ES_NUMBER...  mais bon.
 
 
enfait j'ai une autre question:
 
Je veut afficher au fure et à mesure les buffer recu et envoyer (de la part du clien et serveur) dans un champ d'edition.
 je veut que chaque nouvel chaine se place au desou de sa precédante, mais il y a un probléme : la chaine ecrase (efface) sa présédante (alors que je veut quel se place en dessou).


Message édité par big_dadi_fat le 06-10-2006 à 17:55:14
n°1453620
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-10-2006 à 19:36:06  profilanswer
 

ben tu stockes tes chaines dans un tableau au fur et à mesure qu'elles arrivent :spamafote:


---------------
J'ai un string dans l'array (Paris Hilton)
n°1453640
big_dadi_f​at
Posté le 06-10-2006 à 20:39:20  profilanswer
 

Harkonnen a écrit :

ben tu stockes tes chaines dans un tableau au fur et à mesure qu'elles arrivent :spamafote:


Mais je veux les afficher au fure et a mesure dans le champ d'édition...
 
 
EDIT: a moin que j'utilise une liste box au lieu d'un controle d'edition..
 


Message édité par big_dadi_fat le 06-10-2006 à 20:42:42

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

  control d'edition ...

 

Sujets relatifs
Cherche un bon logiciel d'édition HTML/CSS ?[PERL] PDF::API2 edition de fichier pdf
[résolu] ld: Missing library symbol table in[Resolu] Type de control (VBA)
[javascript] verifier présence input avant control formulaire[PHP] création et édition de fichier
Control Data, erreur de connection AccessClick to (...) ActiveX Control
pb d edition de lien staticprobleme à l'édition d'un TStringGrid
Plus de sujets relatifs à : control d'edition ...


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