10. februar 2006 - 10:24Der er
7 kommentarer og 1 løsning
IntelliSense like feature
Hejsa
Nogen her der har forsøgt sig med at implementere en intellisense like feature i diverse editore i sidder og arbejder på og har nogle gode eksempler til hvordan man lige kommer i gang med sådan en fætter?
Jeg skal nemlig lave en Script Editor og der kunne det jo være meget fancy at få lavet en rigtig god og intuitiv intellisense så det bliver rigtig rart og nemt at bruge den.
Enten gode ideer til hvordan man kan gøre det, kode eksempler eller links til steder der beskriver hvordan man kan komme om ved det.
Hvis du gerne vil bygge det op fra bunden, så skal vel bruge noget kode til at finde ud af, hvor markøren i tekstfeltet befinder sig (pixel-koordinat-mæssigt). Og den har du her:
<System.Runtime.InteropServices.StructLayout( _ Runtime.InteropServices.LayoutKind.Sequential)> _ Private Structure PointStruct Public X As Int32 Public Y As Int32 End Structure
<System.Runtime.InteropServices.DllImport("user32.dll")> _ Private Shared Function GetCaretPos(ByRef pPoint As PointStruct) As Int32 End Function
Public Function GetCaretPoint(ByVal TextField As Control) As Point Dim CaretPos As PointStruct Dim Gr As Graphics Dim X, Y As Int32 '(Tekst feltet skal have fokus før koordinatet kan hentes) 'Hvis GetCaretPos returnerer 0 betyder det, 'at koordinaten ikke kunne hentes. If GetCaretPos(CaretPos) = 0 Then Return Nothing 'Koordinaten skal ses i relation til det øverst venstre 'hjørne af det hvide felt i tekstfeltet. Dvs. kanten 'på tekstboksen er ikke medregnet: X = (TextField.Bounds.Width - TextField.ClientRectangle.Width) \ 2 Y = (TextField.Bounds.Height - TextField.ClientRectangle.Height) \ 2 X += CaretPos.X + TextField.Location.X Y += CaretPos.Y + TextField.Location.Y Y += CType(TextField.Font.Height, Int32) Return New Point(X, Y) End Function
Ovenstående funktion GetCaretPoint modtager én parameter, nemlig TextField, som angiver i hvilken kontrol (fx RichTextField, TextBox, ComboBox osv.) den skal finde markørens position. Hvis den ikke kan finde en koordinat (fx hvis tekst-feltet ikke har fokus) returnerer den Nothing.
Koordinaten, den returnerer, svarer til markørens nederste højre hjørne set i forhold til den kontrol, som tekst-feltet befinder sig i (fx formen selv).
For eksempel kan du bruge en listbox til at fungere som 'drop-down' intellisense-menu, der som udgangspunkt er usynlig. Du kan så i fx KeyDown eventen for textboxen vise listboxen ved bestemte tastetryk. Fx.:
Select Case e.KeyCode Case Keys.Space ListBox1.Location = GetCaretPoint(TextBox1) ListBox1.Visible = True Case Keys.Escape ListBox1.Visible = False End Select
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.