Corser position im Editor Gadget und in Px für Win und Linux
Verfasst: 18.11.2005 22:20
Moin
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:
die Corser position in Px brauche ich für so eine art popup fenster welches unter dem wort stehen soll
wen jemand verbesserungsvorschläge hat bitte sagen
ps: die AutoCompleteList() werde ich noch mit eine Datenbank austauschen
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