Prendre le text d'une sélection

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 5 août 2007 à 17:39
schap25 Messages postés 21 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 28 mai 2008 - 27 mai 2008 à 15:01
Yop à tous,

Voila , ceci est p-e une question stupide mais j'ai chercher après un message qui me permet de récupérer le text d'une selection faite avec EM_SETSEL, j'ai pensé naïvement EM_GETSEL, mais cela n'a rien a voir, cela renvoie les positions de départ et de fin de la sélection. Quelqu'un a une idée ?

Merci d'avance.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]

16 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
5 août 2007 à 18:10
Ben tu pourrais utiliser EM_GETLINE puis EM_GETSEL pour savoir quel endroit  est sélectionné (il te renvoie les index des premier et dernier+1 caractères).
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
5 août 2007 à 18:49
Oui mais je veux juste récupérer la sélection, pas la ligne.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
5 août 2007 à 19:02
C'est ce que je dis : tu récupère toute la ligne dans un buffer et ensuite tu te places au bon endroit avec les index fournis par EM_GETSEL. Du genre :

char* pBuffer=new char*[256];
SendMessage(hWnd,EM_GETLINE,0,(LPARAM)pBuffer);
int pStart,pEnd;
SendMessage(hWnd,EM_GETSEL,(WPARAM)&pStart,(LPARAM)&pEnd)
char* pSelText=new char*[(pEnd-pStart)];
pBuffer[pEnd]=0;
StrCpy(pSelText,pBuffer+pStart);
delete [] pBuffer;

avec quelques retouches...

au fait si t'es dans un RichEdit y a EM_GETSELTEXT qui le fait directement.
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
5 août 2007 à 19:44
Oui mais alors cela ne sert a rien d'utilisé EM_SETSEL, il doit y avoir un message fait pour , sinon cela ne sert rien :D

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
5 août 2007 à 19:59
Salut,
Tu peux utiliser GetWindowText() pour récupérer tout le texte dans un buffer. Le texte sélectionné commence à buffer+debut  et finit à buffer+fin. Tu mets un 0 final dans buffer+fin pour terminer la chaine. Il y'a aussi le message EM_GETHANDLE qui permet de retrouver la zone mémoire occupée par le texte. Tu peux l'utiliser pour ne pas allouer un buffer obligatoire pour GetWindowText().
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
5 août 2007 à 20:04
Tu peux ausi copier le texte sélectionné dans le clipboard avec WM_COPY. Le buffer du clipboard ne contiendra donc que ce texte sélectionné.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
5 août 2007 à 20:13
Salut,

racpp> pour le coup du WM_COPY, je pense que c'est une mauvaise idée
de modifier le contenu du clipboard sans que ca soit en réponse a un
evenement de l'utilisateur. Le clipboard perd tout son interet si un
prog modifie aleatoirement son contenu.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 août 2007 à 20:45
Je pense que c'est dommage d'utiliser GetWindowText car le texte total est peut être très long.
Utiliser EM_GETHANDLE est sans doute plus efficace

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
6 août 2007 à 20:10
Merci,

Je vien d'aller voir pour EM_GETHANDLE, l'utilisation est fort simple, mais ce que je ne comprend pas, c'est ce que renvoie ce message, oui ok c'est un handle, mais pas un pointeur, donc comment je fait pour retrouver l'adresse de la zone en mémoire. Pour moi les handles on tjrs été associé a un identifiant :s

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 août 2007 à 20:18
C'est écrit dans MSDN : LocalLock

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
6 août 2007 à 20:43
EM_GETHANDLE permet de retrouver le handle de la mémoire occupée par le texte du controle. C'est un handle car cette zone mémoire n'est pas toujours la même. Elle peut être déplacée dans certains cas. Le handle reste le même mais la zone mémoire pointée change donc. C'est justement le role de LocalLock() qui permet d'interdire tout déplacement de cette zone et retourne un pointeur que tu pourras utiliser. Pour permettre de nouveau le déplacement de cette zone utilise LocalUnlock().
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
6 août 2007 à 21:03
Hey c'est géniale ça :D exemple pour une recherche , plus besoins de ce cassé la tête ,on peut charger 1Mo par 1Mo le contenut dans une editbox et on fait la recherche directement dans ce buffer en mémoire :D Daccord cela implique de charger tout le contenut d'un fichier dans une édit box, mais je pense que cela peut simplifier pas mal les choses .

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 août 2007 à 21:10
Tu veux mettre un fichier dans un edit juste pour faire une recherche? Ca n'a aucun intérêt : autant le charger en mémoire et chercher directement

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
6 août 2007 à 21:17
Pas vraiment pour une recherche. Mais exemple tu veux chercher dans un fichier avec une syntaxe, mettons tous les liens. Tu pourrai faire la recherche en chargant ton fichier de succesivement dans un buffer de 1 Mo et faire ta recherche dedans (un peux comme la source de brunews findinfile), mais ici le hic c'est que tu sais par exemple recherche une balise (exemple : <link>) mais l'ennui c'est que tu ne sais pas le nombre de caractère que compose le lien ce qui est une inconnue majeur (exemple : <link>youplaboum</link> ou <link>yop</link>). Cela peut compliquer bcp les choses. La deuxième serait d'allouer une variable de la taille du fichier et de faire la recherche dans ce buffer, mais si la taille du fichier est assez conséquente cela n'est pas une bonne idée. Je ne sais pas si tu m'as vraiment compris lol.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 août 2007 à 21:54
De toutes facons si le fichier est gros tu as le même problème si tu utilises un edit, et le texte qui est dans l'edit est bien stocké quelque part. Même si toi tu n'alloue que 1Mo, le système va lui allouer au moins la taille du fichier. Donc c'est toujours plus efficace d'allouer directement la taille du fichier.

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
schap25 Messages postés 21 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 28 mai 2008
27 mai 2008 à 15:01
Bonjour, je cherche moi aussi a prendre le texte d'une selection, afin
de la mettre dans un tableau pour ensuite changé certain caractère (par
exemple: on clique sur un icone nommer "répertoire", on clique sur
renommer, on selectionne le nom, on lance le programme et on obtient
"repertoire").

Et je suis allé sur msdn, et je ne comprend ni l'utilisation de getwindowtext(), ni celle de EM_GETHANDLE..

Un camarade codeur aurait-il les connaissance me permettant de comprendre ?

Merci d'avance
0
Rejoignez-nous