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.