Trouver une chaine dans l'EditorGadget

Programmation d'applications complexes
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

C'est comme ça que l'éditeur PB fonctionne. Ça fait 5 jours à temps perdu que j'essais de comprendre comment ça marche. #hein

Je vais devoir prendre le temps ré-étudier les pointeurs et d'apprendre le fonctionnement et l'utilisation des structures.

A+
Guimauve

Code : Tout sélectionner

Procedure FindTextNext(Mode)
     
     If GlobalFindText$ <> ""
          Flags = #FR_DOWN ; Don't worry, it's ignored on RICHEDIT 1.0
          
          SendMessage_(*RichEditGadget, #EM_GETSEL, @CurrentCursorPosition, 0)
          StringToSearch\chrg\cpMin = CurrentCursorPosition
          StringToSearch\chrg\cpMax = GetWindowTextLength_(*RichEditGadget)
          StringToSearch\lpstrText = @GlobalFindText$
          
          If GlobalFindFlags & #FIND_MatchCase
               Flags | #FR_MATCHCASE
          EndIf
          
          If GlobalFindFlags & #FIND_WholeWord
               Flags | #FR_WHOLEWORD
          EndIf
          
          If Mode = 3
               Mode = 0
               StringToSearch\chrg\cpMin + 1
          EndIf
          
          If SendMessage_(*RichEditGadget, #EM_FINDTEXTEX, Flags, StringToSearch) <> - 1
               Result = 1
               
               Select Mode
                         
                    Case 0 : ; Find
                         ChangeActiveLine(SendMessage_(*RichEditGadget, #EM_EXLINEFROMCHAR, 0, StringToSearch\chrgText\cpMin), -3)
                         SendMessage_(*RichEditGadget, #EM_SETSEL, StringToSearch\chrgText\cpMin, StringToSearch\chrgText\cpMax)
                         
                    Case 1 : ; Replace
                         SendMessage_(*RichEditGadget, #EM_SETSEL, StringToSearch\chrgText\cpMin, StringToSearch\chrgText\cpMax)
                         SendMessage_(*RichEditGadget, #EM_REPLACESEL, 0, GlobalReplaceText$)
                         
                    Case 2 : ; Replace All
                         While SendMessage_(*RichEditGadget, #EM_FINDTEXTEX, Flags, StringToSearch) <> - 1
                              
                              SendMessage_(*RichEditGadget, #EM_SETSEL, StringToSearch\chrgText\cpMin, StringToSearch\chrgText\cpMax)
                              SendMessage_(*RichEditGadget, #EM_REPLACESEL, 0, GlobalReplaceText$)
                              
                              StringToSearch\chrg\cpMax = GetWindowTextLength_(*RichEditGadget)
                              StringToSearch\chrg\cpMin = StringToSearch\chrgText\cpMin + Len(GlobalReplaceText$)
                         Wend
               EndSelect
               
          Else
               MessageRequester("Find/Replace", "No more entry found.", #MB_OK | #MB_ICONINFORMATION)
          EndIf
     EndIf
     
     ProcedureReturn Result
EndProcedure
Répondre