Page 1 sur 1

[résolu] EditorGadget- texte en majuscule (win)

Publié : dim. 25/août/2013 20:31
par blendman
salut

J'essaye de créer une fonction permettant de changer le texte sélectionné en majuscule, mais j'ai un pitit bug que je n'arrive pas à résoudre.

Voici le code :

Code : Tout sélectionner

#EDITOR_GADGET_editor = 0
#button = 1

Procedure GetCurrentLine(Gadget.i)
  ; by falsam
   Protected.i SelStart, selEnd
   SendMessage_(Gadget, #EM_GETSEL, @selStart, @selEnd)
   ProcedureReturn SendMessage_(Gadget, #EM_LINEFROMCHAR, SelStart, 0)   
 EndProcedure
 
Procedure SetInMajuscule()
  gad =#EDITOR_GADGET_editor
  line = GetCurrentLine(GadgetID(Gad))
  txt$ = GetGadgetItemText(gad,line)
  SendMessage_(GadgetID(Gad), #EM_GETSEL, @sstart, @sEnd)
  selection$ = Mid(txt$, sstart + 1, sEnd - sStart) 
  selection2$ = UCase(selection$)
  txt2$ = Left(txt$, sStart) + selection2$ + Right(txt$, Len(Texte$) - sEnd)
  SetGadgetItemText(gad,line,txt2$)
EndProcedure

If OpenWindow(0, 0, 0, 400, 300, "Editor Majuscule", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(#EDITOR_GADGET_editor, 10, 40, 380, 250)
  ButtonGadget(#button, 10,10,60,20,"Majuscule")
  
  Repeat 
    event = WaitWindowEvent()
    
    Select event
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
            
          Case #button
            SetInMajuscule()
            
        EndSelect
               
    EndSelect
            
  Until event = #PB_Event_CloseWindow
    
EndIf
Si quelqu'un a une idée ^^
Merci.

Re: EditorGadget- texte en majuscule

Publié : dim. 25/août/2013 21:23
par Backup
chez moi ça marche

j'ecris "toto est parti au canada"
je sélectionne "canada" , je click sur le bouton majuscule , et ça le met en majuscule ....
resultat : "toto est parti au CANADA"

Re: EditorGadget- texte en majuscule

Publié : dim. 25/août/2013 21:27
par SPH
Moi ca me fait un bug zarb : quand j'ecris "toto est mort au canada" et que je surligne "mort", il met "toto est MORT" et le canada disparait...

Re: EditorGadget- texte en majuscule

Publié : dim. 25/août/2013 21:35
par Ar-S
SPH a écrit :Moi ca me fait un bug zarb : quand j'ecris "toto est mort au canada" et que je surligne "mort", il met "toto est MORT" et le canada disparait...
Erreur ligne 18

Code : Tout sélectionner

txt2$ = Left(txt$, sStart) + selection2$ + Right(txt$, Len(Texte$) - sEnd) 
à remplacer par

Code : Tout sélectionner

txt2$ = Left(txt$, sStart) + selection2$ + Right(txt$, Len(Txt$) - sEnd)

Re: EditorGadget- texte en majuscule

Publié : lun. 26/août/2013 8:04
par blendman
salut

En fait, je pense avoir compris le problème, le code :

Code : Tout sélectionner

  SendMessage_(GadgetID(Gad), #EM_GETSEL, @sStart, @sEnd)
Renvoie en sStart et sEnd, les valeurs non pas sur la ligne, mais sur le texte complet.
Donc, comme je veux garder le formatage du texte, ça va être un peu plus compliqué que ce que je pensais, sinon, il m'aurait suffit de faire les opérations sur tout le code ^^ comme ceci (j'ai piqué des bouts de codes à LSI) :

Code : Tout sélectionner

#EDITOR_GADGET_editor = 0
#button = 1

Procedure SetInMajuscule()
  Protected.i sStart, sEnd
  gad =#EDITOR_GADGET_editor
  SendMessage_(GadgetID(Gad), #EM_GETSEL, @sStart, @sEnd)
  Texte$ = ""
  nbItems = CountGadgetItems(gad) - 1            
  For index = 0 To nbItems
    If Texte$ <> ""
      Texte$ + Chr(10)
    EndIf
    Texte$ + GetGadgetItemText(gad, index)
  Next
  selection$ = UCase(Mid(Texte$, sStart + 1, sEnd - sStart))
  Texte$ = Left(Texte$, sStart) +  selection$ +
           Right(Texte$, Len(Texte$) - sEnd)
  SetGadgetText(gad, Texte$)
  SendMessage_(GadgetID(gad), #EM_SETSEL, sStart, sEnd)  
EndProcedure

If OpenWindow(0, 0, 0, 400, 300, "Editor Majuscule", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(#EDITOR_GADGET_editor, 10, 40, 380, 250)
  ButtonGadget(#button, 10,10,60,20,"Majuscule")
 
  Repeat
    event = WaitWindowEvent()   
    Select event       
      Case #PB_Event_Gadget       
        Select EventGadget()           
          Case #button
            SetInMajuscule()           
        EndSelect               
    EndSelect           
  Until event = #PB_Event_CloseWindow   
EndIf
Mais là, ça supprime le formatage (police, effet de police, justification paragraphe, etc..). Donc, je vais essayer de corriger ça pour que ça garde le formatage du mot et du texte complet ^^.

Re: EditorGadget- texte en majuscule

Publié : lun. 26/août/2013 10:16
par Mesa
Peut-être comme ça ? :

Code : Tout sélectionner

#EDITOR_GADGET_editor = 0
#button = 1

Procedure SetInMajuscule()
  Protected.i sStart, sEnd
  gad =#EDITOR_GADGET_editor
  SendMessage_(GadgetID(Gad), #EM_GETSEL, @sStart, @sEnd)
  Texte$ = ""
  nbItems = CountGadgetItems(gad) - 1           
  For index = 0 To nbItems
    If Texte$ <> ""
      Texte$ + Chr(10)
    EndIf
    Texte$ + GetGadgetItemText(gad, index)
  Next
  selection$ = UCase(Mid(Texte$, sStart + 1, sEnd - sStart))
  ;Texte$ = Left(Texte$, sStart) +  selection$ +
           Right(Texte$, Len(Texte$) - sEnd)
  ;SetGadgetText(gad, Texte$)
  SendMessage_(GadgetID(gad), #EM_REPLACESEL, #True, @selection$) 
  
     ;wParam
    ;Specifies whether the replacement operation can be undone. If this is TRUE, the operation can be undone. If this is FALSE , the operation cannot be undone.
    
    ;lParam
    ;A pointer To a null-terminated string containing the replacement text.

EndProcedure

If OpenWindow(0, 0, 0, 400, 300, "Editor Majuscule", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  EditorGadget(#EDITOR_GADGET_editor, 10, 40, 380, 250)
  ButtonGadget(#button, 10,10,60,20,"Majuscule")

  Repeat
    event = WaitWindowEvent()   
    Select event       
      Case #PB_Event_Gadget       
        Select EventGadget()           
          Case #button
            SetInMajuscule()           
        EndSelect               
    EndSelect           
  Until event = #PB_Event_CloseWindow   
EndIf
Mesa.

Re: EditorGadget- texte en majuscule

Publié : lun. 26/août/2013 14:59
par blendman
Un grand merci Mesa.

Non seulement, ta correction fonctionne nickel, mais en plus, je viens d'apprendre un code qui va grandement me servir pour plein d'autres options que je comptais ajouter ;).

Encore merci.