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)
Endwen jemand verbesserungsvorschläge hat bitte sagen
ps: die AutoCompleteList() werde ich noch mit eine Datenbank austauschen
