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