Page 1 sur 1
[resolu] récupérer un chaine de caratères en surbrillance
Publié : mer. 23/déc./2009 12:39
par Ar-S
Maintenant que j'ai découvert l'API SendMessage_(GadgetID(gadget),#WM_PASTE,0,0) pour insérer une chaine dans un gadget à l'endroit du curseur,
je voudrais savoir si ce même API ou un autre permettrait de récupérer une chaine de caractères qui serait en surbrillance dans un editeur gadget ou autre stringgadget ?
Re: récupérer un chaine de caratères en survrillance ?
Publié : mer. 23/déc./2009 13:45
par Kwai chang caine
Bonjour mon Arsounet
J'ai ce code de HYPER dans mon escarcelle, je ne sais pas si ça peut te servir
Code : Tout sélectionner
Procedure.s RTF_GetSelectedText(i_Gadget.i)
;/ -----------------------------------------------------------------------------
;/ Copy selected Text to String
;/ -----------------------------------------------------------------------------
Protected l_marked.CHARRANGE
Protected l_txt.s
SendMessage_(GadgetID(i_Gadget), #EM_EXGETSEL , 0, @l_marked )
l_txt = Space (1 + l_marked\cpMax - l_marked\cpMin)
SendMessage_(GadgetID(i_Gadget), #EM_GETSELTEXT, 0, @l_txt)
ProcedureReturn l_txt
EndProcedure
text$ = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fmodern\fprq1\fcharset0 Courier New;}{\f1\fswiss\fprq2\fcharset0 Arial;}{\f2\fswiss\fprq2\fcharset0 Verdana;}}"
text$ = text$ + "{\colortbl ;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue255;\red0\green0\blue0;}"
text$ = text$ + "\viewkind4\uc1\pard\f0\fs20 normal \cf1 rot\cf0 \cf2 gr\'fcn\cf0 \b fett\b0 \cf3\b fettblau \cf0\b0 normal\par "
text$ = text$ + "Jetzt Text markieren und Fenster schließen klicken! \f1 Arial, \f2\fs28 Verdana\fs20 , \f0 Courier New\cf4\par "
text$ = text$ + "}"
OpenWindow(#PB_Any, 216, 0, 590, 300, "Popup Menu im Editor-Gadget" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
EditorGadget(9000, 10, 10 , 280, 280)
EditorGadget(9001, 300, 10 , 280, 280)
SetGadgetText( 9000, text$ ) ;/ Text reinsetzen
;/ Pause: Jetzt Textteile markieren
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
l_sel.s = RTF_GetSelectedText( 9000 )
;/ Rechts reinsetzen [leider ohne Format]
SetGadgetText( 9001, l_sel )
;/ Pause
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Re: récupérer un chaine de caratères en survrillance ?
Publié : mer. 23/déc./2009 14:09
par nico
Pour l'Editor, utilise le code de Kwai chang caine, sinon pour le string tu peux prendre celui-ci:
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 300, 280, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
;EditorGadget(0, 10, 10, 280, 200)
StringGadget(0, 10,10, 280,20,"Selection dans un String")
ButtonGadget(1,100,240,100,20,"OK")
For a = 0 To 5
AddGadgetItem(0, a, "Ligne "+Str(a))
Next
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1
Texte.s=GetGadgetText(0)
;Texte = RemoveString(Texte, Chr(10)) ;Utile seulement pour l'Editor
RetVal.l=SendMessage_(GadgetID(0),#EM_GETSEL,@StartPos.l,@EndPos.l)
If StartPos=EndPos
Debug "No Selection"
Else
Selection.s=Mid(Texte,StartPos+1,EndPos-StartPos)
Debug Selection
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Re: récupérer un chaine de caratères en surbrillance ?
Publié : mer. 23/déc./2009 14:31
par Ar-S
Merci KCC, c'est exactement ça !
je pense que la solution se trouve effectivement dans le #EM_EXGETSEL
Super ! Ô grand Shaolin du Gif
Code : Tout sélectionner
Enumeration
#aff:#go:#win
EndEnumeration
Procedure.s RTF_GetSelectedText(i_Gadget.i)
;/ -----------------------------------------------------------------------------
;/ Copy selected Text to String
;/ -----------------------------------------------------------------------------
Protected l_marked.CHARRANGE
Protected l_txt.s
SendMessage_(GadgetID(i_Gadget), #EM_EXGETSEL , 0, @l_marked )
l_txt = Space (1 + l_marked\cpMax - l_marked\cpMin)
SendMessage_(GadgetID(i_Gadget), #EM_GETSELTEXT, 0, @l_txt)
ProcedureReturn l_txt
EndProcedure
text$ = "j'aime le poulet"
OpenWindow(#win, 216, 0, 590, 300, "Popup Menu im Editor-Gadget" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
ButtonGadget(#go, 5, 275, 130, 22, "test")
EditorGadget(#aff, 10, 10 , 280, 250)
SetGadgetText(#aff,"j'aime le poulet" )
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #go
text$=GetGadgetText(#aff)
text$=text$+RTF_GetSelectedText(#aff)
SetGadgetText(#aff, text$ ) ;/ Text reinsetzen
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #win
CloseWindow(#win)
Break
EndSelect
EndSelect
ForEver
----edit-----
merci aussi nico,
comme ça la boucle est bouclée

Re: récupérer un chaine de caratères en surbrillance ?
Publié : mer. 23/déc./2009 14:35
par Kwai chang caine
De rien, c'est un plaisir de te faire plaisir

Y m'a bien fait rire ton GIF, encore une fois, comme tes cerfs

Re: [resolu] récupérer un chaine de caratères en surbrillance
Publié : mer. 23/déc./2009 16:52
par Geo Trouvpatou
Salut.
Voici
un code du soldat inconnu qui permet de selectionner du texte et de mettre des balises bbcodes devant et derrière ou d'incruster un mot à l'endroit du curseur.
Bye.
Re: [resolu] récupérer un chaine de caratères en surbrillance
Publié : mer. 23/déc./2009 23:03
par Ar-S
merci Geo, je n'ai pas ppu testé je ne suis pas chez moi, mais la solution m'a été donné par kcc.
je regarderai ça après le 24...
