Prendre le text d'une sélection

Signaler
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
Messages postés
21
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
28 mai 2008
-
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

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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).
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
Oui mais je veux juste récupérer la sélection, pas la ligne.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
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.
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
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]
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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().
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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é.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
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]
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est écrit dans MSDN : LocalLock

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
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().
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
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]
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
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]
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
21
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
28 mai 2008

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