Page 1 sur 1

StringGadget - Editorgadget - Insérer du texte au curseur

Publié : dim. 27/janv./2008 20:29
par Le Soldat Inconnu
Salut,

un petit bout de code rapidos, ca permet d'insérer du texte dans un stringgadget ou editorgadget à l'emplacement du curseur.

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Modifier un texte dans un StringGadget ou un EditorGadget en partant de la position du curseur

Procedure EditText(Gadget, Type, Text_Start.s, Text_End.s = "")
  ; type = 0 : Insertion de texte sur le curseur
  ; type = 1 : insertion de texte autour de la sélection
  Protected Debut_Position, Fin_position, Texte.s, Index.l
  Select GadgetType(Gadget)
    Case #PB_GadgetType_String
      SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position) 
      Texte = GetGadgetText(Gadget)
      If Type = 0
        Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
        Debut_Position + Len(Text_Start + Text_End)
        Fin_position = Debut_Position
      Else
        Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
        Debut_Position + Len(Text_Start)
        Fin_position + Len(Text_Start)
      EndIf
      SetGadgetText(Gadget, Texte)
      SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position) 
      SetActiveGadget(Gadget)
      
    Case #PB_GadgetType_Editor
      SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position) 
      For Index = 0 To CountGadgetItems(Gadget) - 1
        If Texte <> ""
          Texte + Chr(10)
        EndIf
        Texte + GetGadgetItemText(Gadget, Index)
      Next
      If Type = 0
        Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
        Debut_Position + Len(Text_Start + Text_End)
        Fin_position = Debut_Position
      Else
        Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
        Debut_Position + Len(Text_Start)
        Fin_position + Len(Text_Start)
      EndIf
      SetGadgetText(Gadget, Texte)
      SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position) 
      SetActiveGadget(Gadget)
      
  EndSelect
EndProcedure


; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Texte", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

StringGadget(0, 0, 0, 300, 25, "")

EditorGadget(1, 0, 30, 300, 100)

ButtonGadget(2, 0, 150, 300, 25, "Insérer le texte 'Blabla' au l'endroit du curseur")
ButtonGadget(3, 0, 175, 300, 25, "Entourer le texte sélectionné par '<b>' et '</b>'")

Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Menu
      Select EventMenu() ; Menus
          
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
        Case 0 ; String
          Gadget_LostFocus = 0
          Debug "String"
        Case 1 ; Editor
           Gadget_LostFocus = 1
          Debug "Editor"
        Case 2
          Debug "Insertion"
          EditText(Gadget_LostFocus, 0, "Blabla")
        Case 3
          EditText(Gadget_LostFocus, 1, "<b>", "</b>")
      EndSelect
  EndSelect
  
Until Event = #PB_Event_CloseWindow

End

Publié : mar. 29/janv./2008 9:55
par SpaceMan
Ouaooooohh ! Le Soldat Inconnu ??????
Bienvenu à toi Régis :D
Il faut croire que Dieu a exaucé ma prière. :lol: en plus avec un bonus(ce code)

Publié : lun. 27/avr./2009 21:44
par Le Soldat Inconnu
j'ai ajouté une fonction pour sélectionner tout le texte d'un gadget (me suis pas foulé mais bon, ça peut servir)

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 4
;
; Explication du programme :
; Modifier un texte dans un StringGadget ou un EditorGadget en partant de la position du curseur

Procedure SelectText(Gadget)
  SendMessage_(GadgetID(Gadget), #EM_SETSEL, 0, Len(GetGadgetText(Gadget))) 
  SetActiveGadget(Gadget)
EndProcedure

Procedure EditText(Gadget, Type, Text_Start.s, Text_End.s = "")
  ; type = 0 : Insertion de texte sur le curseur
  ; type = 1 : insertion de texte autour de la sélection
  Protected Debut_Position, Fin_position, Texte.s, Index.l
  Select GadgetType(Gadget)
    Case #PB_GadgetType_String
      SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position) 
      Texte = GetGadgetText(Gadget)
      If Type = 0
        Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
        Debut_Position + Len(Text_Start + Text_End)
        Fin_position = Debut_Position
      Else
        Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
        Debut_Position + Len(Text_Start)
        Fin_position + Len(Text_Start)
      EndIf
      SetGadgetText(Gadget, Texte)
      SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position) 
      SetActiveGadget(Gadget)
      
    Case #PB_GadgetType_Editor
      SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position) 
      For Index = 0 To CountGadgetItems(Gadget) - 1
        If Texte <> ""
          Texte + Chr(10)
        EndIf
        Texte + GetGadgetItemText(Gadget, Index)
      Next
      If Type = 0
        Texte = Left(Texte, Debut_Position) + Text_Start + Text_End + Right(Texte, Len(Texte) - Fin_position)
        Debut_Position + Len(Text_Start + Text_End)
        Fin_position = Debut_Position
      Else
        Texte = Left(Texte, Debut_Position) + Text_Start + Mid(Texte, Debut_Position + 1, Fin_position - Debut_Position) + Text_End + Right(Texte, Len(Texte) - Fin_position)
        Debut_Position + Len(Text_Start)
        Fin_position + Len(Text_Start)
      EndIf
      SetGadgetText(Gadget, Texte)
      SendMessage_(GadgetID(Gadget), #EM_SETSEL, Debut_Position, Fin_position) 
      SetActiveGadget(Gadget)
      
  EndSelect
EndProcedure


; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 300, "Texte", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0 Or CreateGadgetList(WindowID(0)) = 0
  End
EndIf

StringGadget(0, 0, 0, 300, 25, "")

EditorGadget(1, 0, 30, 300, 100)

ButtonGadget(2, 0, 150, 300, 25, "Insérer le texte 'Blabla' au l'endroit du curseur")
ButtonGadget(3, 0, 175, 300, 25, "Entourer le texte sélectionné par '<b>' et '</b>'")
ButtonGadget(4, 0, 200, 300, 25, "Sélectionner tout le texte")

Repeat
  Event = WaitWindowEvent()
  
  
  ;{ Focus
  ; Mis comme çà car il y a des problèmes de détection de focus avec les EditorGadget, de cette manière, c'est du solide
  Focus = GetActiveGadget()
  If Focus <> -1 And (GadgetType(Focus) = #PB_GadgetType_String Or GadgetType(Focus) = #PB_GadgetType_Editor)
    Gadget_TextFocus = Focus
  EndIf
  ;}
  
  
  Select Event
    Case #PB_Event_Menu
      Select EventMenu() ; Menus
          
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
        Case 2
          EditText(Gadget_TextFocus, 0, "Blabla")
        Case 3
          EditText(Gadget_TextFocus, 1, "<b>", "</b>")
        Case 4
          SelectText(Gadget_TextFocus)
      EndSelect
  EndSelect
  
Until Event = #PB_Event_CloseWindow

End

Re: StringGadget - Editorgadget - Insérer du texte au curseu

Publié : ven. 16/juil./2010 15:51
par ZapMan
Je sais que ce post est vieux, mais si quelqu'un a besoin d'une fonction de ce type, j'ai beaucoup plus simple :

SendMessage_(GadgetID(StringGadget), #EM_REPLACESEL, #True, @MyString)

insérera la chaine MyString à l'emplacement du curseur clignotant

Re: StringGadget - Editorgadget - Insérer du texte au curseu

Publié : ven. 16/juil./2010 15:59
par Jacobus
Hello, il y avait longtemps. T'es en vacances?

Re: StringGadget - Editorgadget - Insérer du texte au curseu

Publié : sam. 17/juil./2010 5:55
par ZapMan
Jacobus a écrit :Hello, il y avait longtemps. T'es en vacances?
Ouais, y'avait une sacrée paye, mais mon coeur est toujours avec vous :wink: