| Sélection dans un Memo | |
|
|
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Sélection dans un Memo Jeu 4 Sep 2014 - 19:10 | |
| J'ai un trou de mémoire ou bien ce n'est pas prévu ? - Je sélectionne une zone de texte dans un MEMO - Je peux récupérer le texte sélectionné: SELECT_READ$(N) - Mais je voudrais savoir où se trouve cette sélection dans le Memo N: numéro de ligne et indice dans la ligne Y a-t'il un moyen ? | |
|
| |
Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re Jeu 4 Sep 2014 - 22:48 | |
| En trichant un peu, voici ce que j'ai trouvé pour la ligne : - Code:
-
combo 10:button 20:left 20,200:label affiche item_add 10,"youpi":item_add 10,"zut" on_click 20, affiche end affiche: message item_index(10) select_text 10,1,999 message select_read$(10) return | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Sélection dans un Memo Jeu 4 Sep 2014 - 23:11 | |
| Merci Froggy One, c'est évidemment une solution qui peut être satisfaisante pour un Combo, mais malheureusement la fonction Item_Index() n'est pas admise pour un Memo, ce qui est bien dommage... On peut cliquer et sélectionner n'importe où dans le Memo, mais on ne peut pas savoir (par programme) où on a cliqué | |
|
| |
Invité Invité
| Sujet: Re: Sélection dans un Memo Jeu 4 Sep 2014 - 23:42 | |
| Bonsoir, Avec mes excuses, je peux lire le forum, mais je ne code pas en ce moment. J'ai plusieurs fois apporté la solution pour retrouver l'emplacement du curseur, ou trouver la sélection d'une chaîne dans un memo. En premier lieu si c'est une sélection qu'on veut conserver le contenu, il faut évidemment la récupérer dans une variable. Ensuite on copie dans le presse papier un caractère dont on est sur qu'il sera seul (qu'il n'y aura pas ede doublon), et on le colle avec CLIPBOARD_PASTE dans le memo. Dans le contenu du memo, on cherche ligne par ligne ce caractère, et on a ainsi la ligne. Il faut évidemment en lisant ligne par ligne le memo jusqu'au caractère, avoir un compteur qui ajoute le nombre de lettres (avec LEN() ) et ajouter 2 pour chaque ligne qui précède la dernière qui sont les retour-chariot. On ajoute la position de la ligne du caractère pour pouvoir avec CARET_POSITION retirer le caractère de repérage, et remettre à la place le texte qui convient. Si on est sur que la sélection est unique, il est évidemment plus simple de lire ligne par ligne pour retrouver celle-ci. Edit: je croyais répondre à froggy-One, je n'avais pas vu que la question était de JL35. Alors JL35, on vieilli? Je crois que la première fois que c'était proposé, ce fût pour un éditeur que tu avais fait avec une sortie sur un RichtEdit, et que tu voulais mettre des attribus sur la partie sélectionnée. |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 0:05 | |
| Bonsoir cosmos, Au moins pour ça tu as raison, on vieillit ! - Pour la sélection, aucun problème pour la récupérer avec Select_Read$ - Quant à retrouver l'endroit par programme, je vais étudier ta solution qui a l'air intéressante... Et maintenant que tu le dis, ça me rappelle quelque chose cet éditeur au format rtf, il faut que je regarde ça de plus près. En tout cas, merci à toi de réveiller mes vieux neurones ! qui ne vont d'ailleurs pas tarder à se rendormir... PS j'ai retrouvé, c'était là: https://panoramic.1fr1.net/t1705-editeur-de-textes?highlight=%E9diteur | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 0:16 | |
| La fonction CARET_POSITION(N) donne la position du curseur dans un mémo. La fonction SELECT_READ$(N) retourne le texte sélectionné. La commande SELECT_TEXT N,P,C sélectionne C caractères dans le mémo N, à partir de la position N.
Voilà ce qu'on peut faire en Panoramic. | |
|
| |
Invité Invité
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 3:40 | |
| Effectivement Klaus, mais la question posée est: - Citation :
- Mais je voudrais savoir où se trouve cette sélection dans le Memo N: numéro de ligne et indice dans la ligne
Celà ne donne pas le numéro de ligne, et la ligne entière. Mais si cela a pour but seulement de mettre des attributs, il suffit comme tu le dis, se servir de select_read$ dans une variable, d'y ajouter les attributs de part et d'autre, mettre dans le presse papier cette variable modifiée avec CLIPBOARD_STRING_COPY , et de coller, ce qui remplacera la sélection précédente, et là il n'est plus nécessaire de savoir de quelle ligne il est question. Çà dépend ce que l'on veut faire. |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 14:21 | |
| Effectivement, il s'agit d'ajouter des attributs de part et d'autre d'une portion sélectionnée, éventuellement sur plusieurs lignes, et avec vos tuyaux je vais pouvoir le faire (je l'avais déjà fait dans l'éditeur, mais je ne m'en souvenais plus, merci cosmos).
@Klaus, Sauf que... sauf erreur de ma part, le CARET_POSITION(n) ne marche pas pour un MEMO, ce serait trop facile, seulement pour un LIST, donc il faut trouver une astuce. C'est un peu curieux d'ailleurs, et gênant, pour un Memo on peut positionner: Caret_Position n,p mais pas lire la position: Caret_Position(n) | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 5 Sep 2014 - 15:23 | |
| - Code:
-
label clic,cpt memo 1 on_click 1,clic timer 2 timer_off 2 On_timer 2,cpt end
clic: if count(1)>0 timer_interval 2,10 timer_on 2 end_if return
cpt: chercheline() return
sub chercheline() dim_local x%,a$,b$,dep% if mouse_left_up(1)=1 timer_off 2 a$=select_read$(1) for x%=1 to count(1) b$=item_read$(1,x%) dep%=instr(b$,a$) if dep%>0 message "ligne : "+str$(x%)+chr$(13)+"Position : "+str$(dep%) end_if next x% end_if end_sub j' ai çà à l' arrache en cinq minutes, j' ai pas plus, je dois repartir.... | |
|
| |
Invité Invité
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 16:21 | |
| caret_position(n) Jack l'avait fait à ma demande, pour un EDIT. Il avait bien précisé que pour l'instant cette instruction ne fonctionnait pas pour un memo. |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 17:17 | |
| @cosmos, ben oui, et c'est dommage.
@ygeronimi, Évidemment, mais c'est la solution de facilité, et ça ne me convient pas. - d'abord il y a un timer, et ceux-là je les évite autant que je peux. - ensuite, et surtout, si tu as plusieurs occurences de la sélection dans ton memo, tu vas toujours t'arrêter sur la première, et pas forcément sur celle qui a été sélectionnée ! | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 17:59 | |
| Je viens de faire une nouvelle version de KGF.dll: KGF.dll V3.41 du 05/09/2014
Il y a une nouvelle fonction qui fait exactement ce que tu cherches: trouver le numéro de ligne et de colonne du début de la sélection (ou du curseur), dans un mémo ou d'ailleurs dans un edit. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 5 Sep 2014 - 18:51 | |
| Je ne vois pas ou est le pb avec mon timer, il démarre au clic sur le memo (donc au début de la sélection) et s' arrête avec la fin de la sélection du texte. le tout pour savoir à quel moment je récupère par select_read$(N). Bon, ca ne plait pas, j' le remet dans ma culotte... | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 5 Sep 2014 - 19:18 | |
| une chose que tu peux faire 1/ sélection du texte 2/ récupération par clipboard_string_copy$ select_read$(N) 3/ tu effaces la sélection 4/ tu traites la sélection en la récupérant par clipboard_string_paste$ en la plaçant dans une variable t$ 5/ tu remets le bébé dans le presse papier par clipboard_string_copy$ t$ 6/ tu colle le bébé et l' eau du bain dans le Memo par clipboard_paste N Si tu n' as pas changé l' emplacement du curseur, le collage se fait à son emplacement... Pas de timer, pas de dll... | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 19:47 | |
| Eh, mais c'est exactement ce que je fais, et que je faisais d'ailleurs dans l'éditeur cité plus haut où j'ai récupéré le sous-programme adéquat, c'était une astuce de cosmos (rendons à César...) que j'avais oublié. Le problème n'était pas le timer, même si j'évite quand je peux, c'était de déterminer l'emplacement exact de la sélection. Et c'est maintenant résolu, avec un peu d'acrobatie, en panoramic.
| |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Ven 5 Sep 2014 - 22:35 | |
| je suis curieux de voir comment tu t' y es pris... | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Sélection dans un Memo Ven 5 Sep 2014 - 23:00 | |
| Pas de mystère, voilà le s/p qui fait le boulot (mm% est le memo): - Code:
-
Poscurs: ' Calcul de la position du curseur (ligne et indice) dans le Memo (emplacement cliqué) CLIPBOARD_STRING_COPY CHR$(255): CLIPBOARD_PASTE mm%: CLIPBOARD_STRING_COPY "" curs% = 0 FOR i% = 1 TO COUNT(mm%) a$ = ITEM_READ$(mm%, i%) k% = INSTR(a$, CHR$(255)) IF k% > 0 a$ = LEFT$(a$, k%-1)+MID$(a$,k%+1,200) ITEM_DELETE mm%,i%: ITEM_INSERT mm%, i%, a$ ligcur% = i%: ' <----- ligne du clic poscur% = k%: ' <----- index du clic dans la ligne curs% = curs% + k%-1 EXIT_FOR END_IF curs% = curs% + LEN(a$) + 2: ' index absolu (par rapport au début du memo) NEXT i% RETURN il manque l'environnement, mais l'essentiel est là, et ça marche. (je mettrai le programme complet dans une autre rubrique: éditeur html) | |
|
| |
Invité Invité
| Sujet: Re: Sélection dans un Memo Sam 6 Sep 2014 - 0:00 | |
| Déjà au départ, ça fait plaisirs de pouvoir poster avec les outils des attributs. J'avais ces jours-ci aucun icône pour pour faire le post, avec un cm de hauteur pour le memo (sans compter le temps fou pour pouvoir avoir une page). Cela dît: - JL35 a écrit:
- a$ = LEFT$(a$, k%-1)+MID$(a$,k%+1,200)
Aujourd'hui, tu as meilleurs temps de mettre: a$ = LEFT$(a$, k%-1)+ RIGHT_POS$(a$,k%+1 )Surtout que personnellement je dépasse facilement les 200 caractères. |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Sélection dans un Memo Sam 6 Sep 2014 - 0:10 | |
| Bien sûr tu as raison cosmos, j'ai du mal à me défaire de mes vieilles habitudes, du temps où cette instruction nous faisait défaut. Il faut que je m'y mette, c'est plus rigoureux comme ça. Mais là, dans le memo, c'est une seule ligne, on ne risque pas de dépasser les 200. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Sélection dans un Memo | |
| |
|
| |
| Sélection dans un Memo | |
|