📄 fcompletion.class
字号:
' Gambas class filePRIVATE $iCol AS IntegerPRIVATE $sText AS StringPRIVATE $bLoaded AS BooleanPUBLIC SUB RefreshLibrary() $bLoaded = FALSEENDPRIVATE FUNCTION GetEditor() AS GambasEditor DIM hForm AS FEditor hForm = ME.Window RETURN hForm.EditorENDPUBLIC SUB Open(OPTIONAL sClass AS String, OPTIONAL bStatic AS Boolean, OPTIONAL bPrivate AS Boolean) DIM hEditor AS GambasEditor DIM iX AS Integer DIM iY AS Integer IF Len(sClass) = 1 THEN RETURN hEditor = GetEditor() INC Application.Busy IF sClass THEN FillWithSymbol(sClass, bStatic, bPrivate) ELSE FillWithClasses ENDIF IF lvwComp.Count = 0 THEN DEC Application.Busy RETURN ENDIF ME.Height = (ME.Font.Height(" ") + 2) * Min(8, lvwComp.Count) + 4 'PRINT "Open: $hEditor = "; $hEditor $iCol = hEditor.Column + 1 lvwComp.MoveFirst lvwComp.Item.Selected = TRUE lvwComp.Item.EnsureVisible iX = hEditor.X + hEditor.CursorX IF Key.Code = Key.Backspace THEN iX = iX - hEditor.Font.Width(Mid$(hEditor.Lines[hEditor.Line], hEditor.Column, 1)) ELSE iX = iX + hEditor.Font.Width(Key.Text) ENDIF iX = Min(iX, ME.Window.ClientW - ME.Width) iY = hEditor.Y + hEditor.CursorY + hEditor.LineHeight IF (iY + ME.Height) > (hEditor.Y + hEditor.H) THEN iY = hEditor.Y + hEditor.CursorY - ME.Height ENDIF ME.Move(iX, iY) ME.Show ME.Raise DEC Application.BusyENDPUBLIC SUB FillWithClasses() DIM sClass AS String DIM sLib AS String DIM aClass AS String[] DIM iType AS Integer DIM hPic[3] AS Picture 'IF $bLoaded THEN RETURN lvwComp.Clear aClass = [ "Boolean0", "Byte0", "Short0", "Integer0", "Float0", "Date0", "String0", "Object0", "Variant0" ] CComponent.All["gb"].Load FOR EACH sClass IN Project.GetClasses() aClass.Add(sClass & "1") 'TRY lvwComp.Add(sClass, sClass) NEXT FOR EACH sLib IN Split("gb," & Project.Libraries.Join(",")) IF NOT CComponent.All.Exist(sLib) THEN CONTINUE CComponent.All[sLib].Load FOR EACH sClass IN CComponent.All[sLib].ClassList IF Left$(sClass) <> "." THEN IF CComponent.Classes[sClass].Properties THEN aClass.Add(sClass & "2") ELSE aClass.Add(sClass & "1") ENDIF ENDIF NEXT NEXT aClass.Sort(gb.Text) hPic[0] = Picture["img/16/gambas.png"] hPic[1] = Picture["img/16/class.png"] hPic[2] = Picture["img/16/control.png"] FOR EACH sClass IN aClass iType = Val(Right$(sClass)) sClass = Left$(sClass, -1) TRY lvwComp.Add(sClass, sClass, hPic[iType]) NEXT $bLoaded = TRUEENDPUBLIC SUB FillWithSymbol(sClass AS String, bStatic AS Boolean, bPrivate AS Boolean) DIM cSymbol AS Collection DIM hSymbol AS CSymbolInfo DIM aSymbol AS NEW String[] DIM sSymbol AS String DIM sName AS String DIM hClass AS CClassInfo lvwComp.Clear cSymbol = CComponent.GetClassSymbols(sClass) IF NOT cSymbol THEN RETURN hClass = CComponent.Classes[sClass] IF hClass THEN IF hClass.AutoCreatable THEN bStatic = FALSE ENDIF FOR EACH hSymbol IN cSymbol IF Left$(hSymbol.Name) = "_" THEN CONTINUE IF hSymbol.Kind = ":" THEN CONTINUE IF hSymbol.NotPublic THEN CONTINUE IF bStatic THEN IF UCase(hSymbol.Kind) <> hSymbol.Kind THEN CONTINUE ENDIF ENDIF aSymbol.Add(hSymbol.Name) NEXT aSymbol.Sort(gb.Text) FOR EACH sSymbol IN aSymbol hSymbol = cSymbol[sSymbol] TRY lvwComp.Add(sSymbol, sSymbol, Picture[hSymbol.GetIcon()]) NEXTEND' PUBLIC SUB Form_Resize()'' 'PRINT "Form_Resize: ME.H = "; ME.H; " Me.ClientH =";ME.ClientH' panComp.Move(0, 0, ME.ClientW, ME.ClientH)' lvwComp.Move(1, 1, panComp.W - 2, panComp.H - 2)'' ENDPUBLIC SUB Form_Hide() $sText = ""ENDPUBLIC FUNCTION ManageKey() AS Boolean DIM iInd AS Integer SELECT CASE Key.Code CASE Key.Up, Key.PageUp lvwComp.MoveCurrent IF lvwComp.Item.Selected THEN FOR iInd = 1 TO If(Key.Code = Key.Up, 1, 8) IF lvwComp.MoveAbove() THEN BREAK NEXT ENDIF IF NOT lvwComp.Available THEN lvwComp.MoveFirst lvwComp.Item.Selected = TRUE lvwComp.Item.EnsureVisible CASE Key.Down, Key.PageDown lvwComp.MoveCurrent IF lvwComp.Item.Selected THEN FOR iInd = 1 TO If(Key.Code = Key.Down, 1, 8) IF lvwComp.MoveBelow() THEN BREAK NEXT ENDIF IF NOT lvwComp.Available THEN lvwComp.MoveLast lvwComp.Item.Selected = TRUE lvwComp.Item.EnsureVisible CASE Key.Home lvwComp.MoveCurrent IF lvwComp.MovePrevious() THEN ME.Hide RETURN ENDIF lvwComp.MoveFirst lvwComp.Item.Selected = TRUE lvwComp.Item.EnsureVisible CASE Key.End lvwComp.MoveCurrent IF lvwComp.MoveNext() THEN ME.Hide RETURN ENDIF lvwComp.MoveLast lvwComp.Item.Selected = TRUE lvwComp.Item.EnsureVisible CASE Key.Esc ME.Hide CASE Key.Left, Key.Right ME.Hide RETURN CASE Key.Enter, Key.Return, Key.Tab InsertItem 'IF Key.Code <> Key.Tab THEN RETURN CASE Key.Space IF UCase($sText) = "NEW" THEN RETURN InsertItem(" ") CASE Key.Backspace IF $sText THEN $sText = Left$($sText, -1) FindItem ELSE ME.Hide ENDIF RETURN FALSE CASE ELSE IF Key.Text THEN IF Instr("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_", UCase(Key.Text)) THEN $sText = $sText & Key.Text FindItem ELSE IF Instr("([.!", Key.Text) THEN InsertItem ELSE ME.Hide ENDIF RETURN FALSE ENDIF END SELECT RETURN TRUEENDPRIVATE SUB FindItem() DIM sComp AS String sComp = UCase(Replace($sText, "[", "[[]") & "*") lvwComp.MoveFirst DO IF UCase(lvwComp.Item.Text) LIKE sComp THEN lvwComp.Item.Selected = TRUE lvwComp.Item.EnsureVisible RETURN ENDIF IF lvwComp.MoveNext() THEN RETURN LOOPEND' PUBLIC SUB Form_Activate()'' 'PRINT "Form_Activate: $hEditor = "; $hEditor' TRY $hEditor.SetFocus'' ENDPRIVATE FUNCTION InsertItem(OPTIONAL sAfter AS String) AS Boolean DIM sText AS String DIM hEditor AS GambasEditor TRY sText = lvwComp.Current.Text IF NOT lvwComp.Current.Selected THEN RETURN IF NOT sText THEN RETURN TRUE hEditor = GetEditor() WITH hEditor .Frozen = TRUE .Selection(.ToPos(.Line, $iCol), .Column - $iCol) .Insert(sText & sAfter) .Frozen = FALSE END WITH ME.HideENDPUBLIC SUB lvwComp_Click() InsertItemENDPUBLIC SUB lvwComp_KeyPress() DIM hEditor AS GambasEditor DIM hForm AS FEditor 'IF Key.Code = Key.Escape THEN ME.Hide hEditor = GetEditor() hEditor.SetFocus hForm = hEditor.Window hForm.edtEditor_KeyPressEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -