Page 1 sur 1
[résolu] editorgadget : trouver la ligne courante
Publié : lun. 12/août/2013 19:47
par blendman
salut
J'essaie de trouver la ligne actuelle d'un éditorgadget (celle sur laquelle se trouve le curseur) pour récupérer le texte de cette ligne.
Sauriez-vous comment faire ça (sous windows)?
Merci.
Re: editorgadget : trouver la ligne courante
Publié : lun. 12/août/2013 21:02
par falsam
Bonjour Blendman.
Code : Tout sélectionner
EnableExplicit
Enumeration
#MainForm
#Editor
EndEnumeration
Global Event, GEvent
Procedure Editor_GetCurrentLine(IdGadget.i)
Protected.i SelStart, selEnd
SendMessage_(IdGadget, #EM_GETSEL, @selStart, @selEnd)
ProcedureReturn SendMessage_(IdGadget, #EM_LINEFROMCHAR, SelStart, 0)
EndProcedure
OpenWindow(#MainForm, 0, 0, 500, 400, "Get current line from EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(#Editor, 10, 10, 480, 350)
SetActiveGadget(#Editor)
Repeat
Event = WaitWindowEvent()
Gevent = EventGadget()
Select event
Case #WM_LBUTTONUP, #WM_KEYUP
If GetActiveGadget() = #Editor
Debug "Numéro de Ligne: " + Str(Editor_GetCurrentLine(GadgetID(#Editor)))
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Re: editorgadget : trouver la ligne courante
Publié : lun. 12/août/2013 21:30
par falsam
Une variante qui permet de connaitre le texte de la ligne courante. J'utilise ici la fonction GetGadgetItemText() qui permet de connaitre le texte de la ligne courante.
Code : Tout sélectionner
EnableExplicit
Enumeration
#MainForm
#Editor
EndEnumeration
Global Event, GEvent, NumLine
Procedure Editor_GetCurrentLine(IdGadget.i)
Protected.i SelStart, selEnd
SendMessage_(IdGadget, #EM_GETSEL, @selStart, @selEnd)
ProcedureReturn SendMessage_(IdGadget, #EM_LINEFROMCHAR, SelStart, 0)
EndProcedure
OpenWindow(#MainForm, 0, 0, 500, 400, "Get current line from EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(#Editor, 10, 10, 480, 350)
SetActiveGadget(#Editor)
Repeat
Event = WaitWindowEvent()
Gevent = EventGadget()
Select event
Case #WM_LBUTTONUP, #WM_KEYUP
If GetActiveGadget() = #Editor
NumLine = Editor_GetCurrentLine(GadgetID(#Editor))
Debug "Ligne: "+ Str(NumLine) + " " +GetGadgetItemText(#Editor, NumLine)
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
D’après l'aide :
- GetGadgetItemText() Permet de connaitre le texte de la ligne courante.
- RemoveGadgetItem() Permet de supprimer une ligne.
- SetGadgetItemText() Permet de changer le contenu de la ligne spécifiée.
- CountGadgetItems() Permet de connaitre le nombre total de lignes
Mais par contre ........ il n'y a pas de fonction native permettant de connaitre la ligne active.
Étonnant non ?
Re: editorgadget : trouver la ligne courante
Publié : mar. 13/août/2013 13:38
par blendman
salut
Merci beaucoup, c'est exactement ce que je cherchais
J'ai pu ajouter le ctrl+D (dupliquer la ligne en cours) dans mon petit éditeur de texte.