ich bin gerade beim coden einer kleinen Auto Complete funktion für Win und Linux
so und meine frage ist wie bekomme ich die Corser position?
SendMessage_(GadgetID(#MyStringGadget), #EM_GETSEL, @GetSelStart, @GetSelEnde) << nicht das [weil ist WinAPI]
und wie bekomme ich die Corser position in Pixel'n
MouseX() << nicht das [weil da brauche ich OpenWindowedScreen() für]
soweit bin ich schon:

Code: Alles auswählen
#MyStringGadget = 1
#MyListGadget = 2
Procedure.s ICStringField(String.s, Separator.s, Index.l, StartPos.l, EndPos.l)
Protected Wort.s, StartPosOfWort.l, EndPosOfWort.l, w.l, SatzPos.l
Wort = StringField(String, Index, Separator)
If CountString(String, Wort) = 1
StartPosOfWort = FindString(String, Wort, 1)
EndPosOfWort = StartPosOfWort+Len(Wort)
PokeL(StartPos, StartPosOfWort-1)
PokeL(EndPos, EndPosOfWort-1)
ProcedureReturn Wort
ElseIf CountString(String, Wort) > 1
For w = 1 To CountString(String, Separator)
Wort = StringField(String, w, Separator)
SatzPos = SatzPos + Len(Wort) + 1
If w = Index
PokeL(StartPos, SatzPos-Len(Wort)-1)
PokeL(EndPos, SatzPos-1)
ProcedureReturn Wort
EndIf
Next
Else
ProcedureReturn ""
EndIf
EndProcedure
OpenWindow(0,150,150,200,200, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Test")
If CreateGadgetList(WindowID())
StringGadget(#MyStringGadget, 25,25,150,18,"")
ListViewGadget(#MyListGadget, 25, 50, 150, 60)
EndIf
Text.s ; Der Text wie er aus der Gadget kommt
WortStart.l ; Die Position des Wort anfangs
WortEnde.l ; Die Position des Wort endes
i.l ; wie oft ist " " im Text enthalten
GetSel.l ; die position des Corsers
Wort.s ; Wort in dem sich gerade der Corser befindet
SatzStart.s ; der Text vor dem Wort
SatzEnde.s ; der Text nach dem Wort
NewList AutoCompleteList.s()
AddElement(AutoCompleteList()) : AutoCompleteList() = "Hallo"
AddElement(AutoCompleteList()) : AutoCompleteList() = "geht"
AddElement(AutoCompleteList()) : AutoCompleteList() = "euch"
AddElement(AutoCompleteList()) : AutoCompleteList() = "hoffe"
AddElement(AutoCompleteList()) : AutoCompleteList() = "scheisse"
AddElement(AutoCompleteList()) : AutoCompleteList() = "nene"
AddElement(AutoCompleteList()) : AutoCompleteList() = "joke"
AddElement(AutoCompleteList()) : AutoCompleteList() = "oder"
AddElement(AutoCompleteList()) : AutoCompleteList() = "egal"
AddElement(AutoCompleteList()) : AutoCompleteList() = "schön"
AddElement(AutoCompleteList()) : AutoCompleteList() = "Schöne"
AddElement(AutoCompleteList()) : AutoCompleteList() = "Cool"
AddElement(AutoCompleteList()) : AutoCompleteList() = "cooles"
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadgetID()
Case #MyStringGadget
;--------------------------
Text = GetGadgetText(#MyStringGadget)+" "
SendMessage_(GadgetID(#MyStringGadget), #EM_GETSEL, @GetSel, 0)
ClearGadgetItemList(#MyListGadget)
For i = 1 To CountString(Text, " ")
Wort = ICStringField(Text, " ", i, @WortStart, @WortEnde)
If WortStart <= GetSel And WortEnde >= GetSel And Wort <> "" And Len(Wort) > 2
Debug Wort
SatzStart = Left(Text, WortStart)
SatzEnde = Right(Text, Len(Text)-WortEnde-1)
WortLenge = Len(Wort)
ResetList(AutoCompleteList())
While NextElement(AutoCompleteList())
If LCase(LSet(AutoCompleteList(), WortLenge)) = LCase(Wort)
AddGadgetItem(#MyListGadget, -1, AutoCompleteList())
EndIf
Wend
EndIf
Next
Debug "-----"
;--------------------------
Case #MyListGadget
SetGadgetText(#MyStringGadget, SatzStart+GetGadgetItemText(#MyListGadget, GetGadgetState(#MyListGadget), 0)+SatzEnde)
EndSelect
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
CloseWindow(0)
End
wen jemand verbesserungsvorschläge hat bitte sagen
ps: die AutoCompleteList() werde ich noch mit eine Datenbank austauschen