StringGadget - Editorgadget - Insérer du texte au curseur

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

StringGadget - Editorgadget - Insérer du texte au curseur

Message 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
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message 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)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

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

Message 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
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

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

Message par Jacobus »

Hello, il y avait longtemps. T'es en vacances?
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

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

Message 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:
Tout obstacle est un point d'appui potentiel.

Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Répondre