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 :allright:

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 :allright: