Seite 1 von 1
EditorGadget
Verfasst: 22.09.2006 09:39
von Martin66119
Moin,
Mal eine Frage zu EditorGadget.
Mit *win = OpenWindow(1, 10,10,200,200,........) hab ich ein Fenster geöffnet und in diesem ein Editorgadget mit Text plaziert.
In dem EditorgadGet befindet sich Text, den ich nach einem bestimmten Wörten durchsuchen will.
Das suchen im EditorGadget nach einem bestimmten Wort und das Anzeigen in einem Requester geht auch soweit.
Wie kann ich jetzt aber z.B. den Cursor im EditorGadget auf die Zeile und ggf. Spalte bewegen wo ich den gefunden habe.
Mit den folgenden Befehlen kann ich den Cursor zwar im EditorGadget bewegen. Das geht aber so wie ich meine nur Pixelweise nicht Zeilenweise. Muss ich also Pixel in Zeilen umrechen um an die Position zu springen oder geht das auch einfacher.
CreateCaret_( *win , 0 , 2, 15)
SetCaretPos_( 20 , 35)
ShowCaret_( *win )
Ist es auch richtig, dass ich die Nummer des OpenWindow nicht aber die Nummer des EditorGadget für die Caret-Funktionen verwenden muss?
Danke für die Hilfe
Martin
Verfasst: 22.09.2006 10:28
von HeX0R
Code: Alles auswählen
Procedure Editor_Select(Gadget, LineStart.l, CharStart.l, LineEnd.l, CharEnd.l)
sel.CHARRANGE
sel\cpMin = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineStart, 0) + CharStart - 1
If LineEnd = -1
LineEnd = SendMessage_(GadgetID(Gadget), #EM_GETLINECOUNT, 0, 0)-1
EndIf
sel\cpMax = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineEnd, 0)
If CharEnd = -1
sel\cpMax + SendMessage_(GadgetID(Gadget), #EM_LINELENGTH, sel\cpMax, 0)
Else
sel\cpMax + CharEnd - 1
EndIf
SendMessage_(GadgetID(Gadget), #EM_EXSETSEL, 0, @sel)
EndProcedure
Verfasst: 22.09.2006 10:34
von edel
Wenn du #em_findtext benutzt bekommst du den Zeichenindex eh zurueck.
Beispiel :
Code: Alles auswählen
find.FINDTEXTEX
find\chrg\cpMin + 0 ; ab start
find\chrg\cpMax = SendMessage_(hedit,#WM_GETTEXTLENGTH,0,0) ; text ende
find\lpstrText = @"Hallo" ; Text der gefunden werden will
If Not SendMessage_(hedit,#EM_FINDTEXTEX,#FR_DOWN,@find) = -1
; find\chrgText\cpMin = start des gesuchten wortes
; find\chrgText\cpMax = ende des gesuchten wortes
SendMessage_(hedit,#EM_EXSETSEL,0,find\chrgText)
EndIf
EditorGadget
Verfasst: 22.09.2006 10:45
von Martin66119
Danke für den Code!
Noch eine Frage zu der Procedur.
Procedure Editor_Select(Gadget, LineStart.l, CharStart.l, LineEnd.l, CharEnd.l)
Gadget ist die Zahl des EditorGadget, die bei der Definition als Ergbnis zurückgegeben wird oder die Identifizierung, die innerhalb der Definition steht (Ergebnis = EditorGadget(#TestGadget, x, y, Breite, Hoehe [, Flags]); also #TestGadget
LineStart.l und LineEnd.l sind die Startzeile und EndZeile wo der Suchstring gefunden wurde. Die Zeilen finde ich innerhalb der Suchschleife.
CharStart.l und CharEnd.l ist die Position des ersten und letzten Zeichens des Suchstrings. Die Start und Ende Postition kann ich mit FindString(....) und Len (String$) ermitteln.
Danke für die weitere Unterstützng
Verfasst: 22.09.2006 10:46
von HeX0R
Die wandelnde API-Enzyklopädie hat wieder zugeschlagen.
Danke, wusste ich noch gar nicht

Verfasst: 22.09.2006 11:26
von HeX0R
Code: Alles auswählen
If OpenWindow(0, 0, 0, 322, 180, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
EditorGadget(0, 8, 8, 306, 133)
StringGadget(1, 8, 146, 306, 20, "")
AddGadgetItem(0, -1, "Ich möchte bitte immer alles schön")
AddGadgetItem(0, -1, "vorgekaut haben, sonst müsste")
AddGadgetItem(0, -1, "ich am Ende noch anfangen")
AddGadgetItem(0, -1, "mein Hirn zu benutzen...")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 1 And EventType() = #PB_EventType_Change And GetGadgetText(1)
find.FINDTEXTEX\chrg\cpMin + 0 ; ab start
find\chrg\cpMax = SendMessage_(GadgetID(0), #WM_GETTEXTLENGTH, 0, 0) ; text ende
a$ = GetGadgetText(1)
find\lpstrText = @a$ ; Text der gefunden werden will
If SendMessage_(GadgetID(0), #EM_FINDTEXTEX, #FR_DOWN, @find) = -1
find\chrgText\cpMin = 0
find\chrgText\cpMax = 0
EndIf
SendMessage_(GadgetID(0), #EM_EXSETSEL, 0, find\chrgText)
EndIf
EndSelect
ForEver
EndIf
Editorgadget
Verfasst: 22.09.2006 11:29
von Martin66119
Danke für die Hilfe!!
Netter Vorgabetext.
Einen schönen Tag und ein schönes Wochenende wünsche ich.
Martin
Verfasst: 22.09.2006 11:31
von HeX0R
Nimms nicht so ernst, aber dennoch zu Herzen
