Avatar billede bootie Nybegynder
10. februar 2006 - 10:24 Der 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.
Avatar billede soreno Praktikant
10. februar 2006 - 11:01 #1
Scintilla findes i en version der er wrappet i .NET:
http://www.scintilla.org/
http://scintilla.sourceforge.net/ScintillaRelated.html

Jeg har haft det oppe at køre i C# for et par måneder siden.
Men jeg ved altså stort set intet om VB.
Avatar billede bootie Nybegynder
10. februar 2006 - 11:09 #2
Ja, men det er noget C++ kode... det finder jeg sgu nok aldrig rundt i trods koden til tilgængelig.

Ville hellere starte simpelt og så selv bygge videre på det.
Avatar billede bernhof Nybegynder
10. februar 2006 - 17:14 #3
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).

Håber det kan bruges til noget :o)
Avatar billede bernhof Nybegynder
13. februar 2006 - 13:57 #4
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


Og i LostFocus eventen for textboxen:

  ListBox1.Visible = False
Avatar billede soreno Praktikant
13. februar 2006 - 14:03 #5
Scintilla findes også i en .NET "version" her:
http://sourceforge.net/project/showfiles.php?group_id=92619
Avatar billede bootie Nybegynder
13. februar 2006 - 14:15 #6
Jeg prøver at kigge på det.
Avatar billede bootie Nybegynder
01. maj 2006 - 11:00 #7
Jeg er endnu ikke kommet igang med det. Smid et svar så vi kan lukke denne.
Avatar billede bernhof Nybegynder
01. maj 2006 - 15:25 #8
Ok.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester