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