Danilo hat geschrieben:
Wenn Du die PB-Befehle für das Editor-Gadget verwendest,
die Strings verarbeiten oder zurückgeben (GetGadgetText),
kannst Du nur mit Texten arbeiten die so gross sind wie
der PB-String-Buffer. AFAIK sind das 64000 Bytes, falls das
noch nicht erhöht wurde oder Du das nicht selber machst.
Bei größeren Texten droht damit Datenverlust und evtl. ein
Crash des Programmes.
Nur mal so nebenbei als Hinweis, falls einer Deiner User auf
die Idee kommt mal einen großen Text mit Deinem Editor zu
laden.
Jo! War mir klar, leider ist das so

Danke für den Hinweis!
[EDIT]
Laut WinAPI haben die Befehle ohne EX im Namen das selbe Problem.
z.B. EM_GETSEL und EM_EXGETSEL
die WinAPI befehle mit EX sollten mehr unterstützen....
[/EDIT]
Habe noch nicht rausbekommen wie ich den GetGadgetText() befehl ersetzen kann (max. Buffer vom Editorgadget erfragen?).....
Mitlerweile bin ich auch selbst auf die Lösung gestossen.
Spassig ist, das man bei den Suchrichtungen nicht nur die Such-Range "umdrehen" muss, sondern auch der Selection-Range umgedreht ist....
Hier meine Lösung:
[EDIT]
< Falsch und Alt !!Bei dem ersten aufruf (erste suche = Find) muss FindNextPos = 0 sein.>
< Falsch und Alt !! Wenn FindNextPos > 0 ist, dann ist es eine weitersuche (Findnext)>
Habe gemerkt das die Proc bei der Rückwärtssuche nicht korrekt war! Ist nun gefixt.
Nun braucht die Proc auch keine Globale Variable mehr, und auch keine sonnstigen Stützfunktionen
[/EDIT]
Code: Alles auswählen
Procedure EditorGadgetSearch(Gadget_ID,SearchText.s,Flags)
; Possible Flags
; #FT_SEARCH = 1 ; Searching Top to Bottom, not the whole Word and not Case sensitive
; #FT_SEARCH_Bottom_to_Top = 0
; #FT_WHOLEWORD = 2
; #FT_MATCHCASE = 4
SendMessage_(GadgetID(Gadget_ID),#EM_EXGETSEL,0,Range.CHARRANGE) ; Get CurrentCursor Position
Updown = Flags & 2147483647 ; Flag for search direction
findtext.FINDTEXTEX ;Structurvariable, Type FINDTEXTEX
If Updown ; If searchdirection Flag = 1, searching Top to Bottom
; Define the Top to Bottom SearchRange from Min to Max (where Min is Buffer Min and Max is Buffer Max !!!)
findtext\chrg\cpMin = Range\cpMax ; Starting by the Current CurserRangeposition (Range cpMax)
findtext\chrg\cpMax=-1 ; -1 stands vor maximum Bufferlength {equal to Len(GetGadgetText(Gadget_ID))}
Else
; Define the Bottom to Top SearchRange from Min to Max (where Min is Buffer Max and Max is Buffer Min !!!)
findtext\chrg\cpMin = Range\cpMin ; Starting by the Current CurserRangeposition (Range cpMin)
findtext\chrg\cpMax= 0; beginn of Buffer is the end to search
EndIf
findtext\lpstrText=@SearchText ; Simple the Adress og the String to search
If SendMessage_(GadgetID(Gadget_ID),#EM_FINDTEXTEX,Flags,@findtext) <> -1 ; If the Text is found
SendMessage_(GadgetID(Gadget_ID),#EM_EXSETSEL,0,@findtext\chrgText) ; Select the Text
EndIf
EndProcedure
;-Beispielaufrufe:
; Sucht von unten nach oben das Wort "Hello" (zum weitersuchen Findnext einfach nochmal aufrufen)
EditorGadgetSearch(#EditorGadget0,"Hello",0)
; Sucht von oben nach unten das Wort "Hello" (zum weitersuchen Findnext einfach nochmal aufrufen)
EditorGadgetSearch(#EditorGadget0,"Hello",1)
; Sucht von unten nach oben das Wort "Hello" und achtet auf Gross-/Kleischreibung (zum weitersuchen Findnext einfach nochmal aufrufen)
EditorGadgetSearch(#EditorGadget0,"Hello",4)
; Sucht von unten nach oben das Wort "Hello" aber nur ganze Wörter (zum weitersuchen Findnext einfach nochmal aufrufen)
EditorGadgetSearch(#EditorGadget0,"Hello",2)
; Sucht von oben nach unten das Wort "Hello",nur ganze Wörter und achtet auf Gross-/Kleischreibung
; (zum weitersuchen Findnext einfach nochmal aufrufen)
EditorGadgetSearch(#EditorGadget0,"Hello",7)