roger Le 26/03/2002 à 14:17 Bon voila, je suis en train de faire un programme, (pour faire des ptit calculs sur al mole...c plus un jeu k'une néssaisité !).
En faite, sur ma boite, j'ai un menu, et 5 DialogAddRequest........
Comment je fais pour récuperer les résultats des 5 DialogAddRequest ???
Arf.....c plus compliké !
Ceu ke je veu récupérer des dialogrequest, c des chiffres...
Thx !
[edit]Edité par roger le 26-03-2002 à 14:37:15[/edit]
roger Le 26/03/2002 à 17:00 arf, dsl, je ne comprend pas ca:
char *buffer="Hello "; // fill with 20 spaces
keski séprare les résultats de chakes boxes ?
PpHd Le 26/03/2002 à 17:14 Si tu regardes la definition de DialogDo, tu verras ceci :
short DialogDo (HANDLE Handle, short x, short y, char* RequestBuffer, short *PulldownBuffer);
Le parametre ReqestBuffer est un tampon de sortie. C'est dans ce tampon que les resultats vont etre stockes.
Le parametre offset rentre en jeu ici :
La sortie de AddRequest avec un offset de X va etre stocke a partir de l'element x du tableau reqest buffer.
En pratique, le premier AddRequest a un offset de 0
Le second a l'offset de la taille maximale de la chaine du premier +1(pour le 0).
Le troisieme est la somme de l'offset precedent et de la taille de la chaine du second +1.
Evidememnt, tu n' es pas obblige de faire comme cela.
Tu lis la chaine a l'adresse RequestBuffer+X
PS: C'est Kevin qui a augmente la qualite des reponses a donner.
PpHd Le 26/03/2002 à 17:52 Plus simple : 3 boxes, max_len 2
buffer ={'1',0,0,'2',0,0,'3','1',0}
Les chaines sont buffer+0, buffer +3, buffer +6
PpHd Le 27/03/2002 à 10:18 Va bosser l'assembleur un peu, et surtout le representation memoire des chaines en C.
C'est ca qi te manque.
PpHd Le 27/03/2002 à 10:23 Bon ecoutes.
Le premier DialogAddRequest, tu lui mets un offset de 0
Le second, un offset de 100
Le troisieme, un offset de 200,
Le quatrieme, un offset de 300
Le 5iem, un offset de 400
Tu rajoutes:
char RequestBuffer[500];
machin = DialogDo(....RequestBuffer...);
x = atol(RequestBuffer);
y = atol(RequestBuffer+100);
z = atol(RequestBuffer+200);
t = atol(RequestBuffer+300);
l = atol(RequestBuffer+400);
>roger:
>si, par exemple, ya des num dans les 5 boxes(disons 1,2,3,4,5), et ke la longeur max de caracteres est 5, le buffer va se présenter comme ca nan?:
>*buffer= "1 2 3 4 5 ";
>alors si on le lis a partir de buffer+6 (par exemple pour la case 2...) ben, ca va donner
"2 3 4 5" !!!!!!
Non, parce que ce qu'entre les 1 2 3 4 5, il n'y aura pas que des espaces, à la fin de chaque chaîne de caractères (donc ici de chaque nombre sous forme de chaîne de caractères), DialogDo aura bien soin de mettre un '\0', qui est le caractère signalant la fin d'une chaîne de caractères. Donc il y aura bien "2\0...3\0...4\0...5\0...", mais les fonctions C qui traîtent les chaînes de caractères, comme par exemple atol, ne liront que "2".
D'ailleurs, tu devrais initialiser ton buffer avec des '\0' plutôt que des espaces entre les nombres. Par exemple:
char *buffer="1\0\0\0\02\0\0\0\03\0\0\0\04\0\0\0\05\0\0\0";
(J'ai mis un '\0' de moins à la fin vu que le C en rajoute un automatiquement après toute chaîne de caractères entre guillemets "".)
[edit]Edité par Kevin Kofler le 28-03-2002 à 02:01:49[/edit]