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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

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

Message 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.
Dernière modification par blendman le lun. 26/août/2013 14:59, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: EditorGadget- texte en majuscule

Message 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"
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: EditorGadget- texte en majuscule

Message 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...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: EditorGadget- texte en majuscule

Message 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)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: EditorGadget- texte en majuscule

Message 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 ^^.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: EditorGadget- texte en majuscule

Message 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.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: EditorGadget- texte en majuscule

Message 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.
Répondre