⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ffind.class

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 CLASS
📖 第 1 页 / 共 2 页
字号:
          hEdit = hForm.Editor        ENDIF        iLine = 0      ENDIF    ENDIF    IF hForm = hFormStop THEN      IF iLine = iLineStop THEN        bStop = TRUE      ENDIF    ENDIF  LOOPENDPRIVATE FUNCTION DoSearchBack() AS Boolean  DIM sFile AS String  DIM iColumn AS Integer  DIM iLine AS Integer  DIM sLine AS String  DIM hForm AS Object  DIM hEdit AS GambasEditor  DIM iPos AS Integer  DIM hFormStop AS Object  DIM iLineStop AS Integer  DIM iColumnStop AS Integer  DIM bStop AS Boolean  DIM sNext AS String  hForm = Project.ActiveForm  WITH hForm    sFile = .Path    hEdit = .Editor    WITH hEdit      .Pos = .Selection.Start      iLine = .Line      iColumn = .Column    END WITH  END WITH  hFormStop = hForm  iLineStop = iLine  iColumnStop = iColumn  DO    sLine = hEdit.Lines[iLine]    iPos = SearchString(sLine, iColumn, TRUE)    IF iPos THEN      hEdit.Pos = hEdit.ToPos(iLine, iPos - 1)      hEdit.Select(hEdit.Pos, String.Len($sFind))      'IF ME.Visible THEN ME.SetFocus      'IF hForm <> hFormStop THEN hForm.Show      hForm.Show      RETURN FALSE    ENDIF    IF bStop THEN RETURN TRUE    iLine = iLine - 1    iColumn = -1    IF $iSearch = SEARCH_PROC THEN      'PRINT "Yeah ";      IF iLine < 0 THEN        PRINT "iLine < 0"        WHILE iLine < (hEdit.Lines.Count - 1)          sLine = hEdit.Lines[iLine + 1]          IF FEditor.IsProc(sLine) THEN BREAK          iLine = iLine + 1        WEND      ELSE IF FEditor.IsProc(sLine) THEN        PRINT "it is a proc"        WHILE iLine < (hEdit.Lines.Count - 1)          iLine = iLine + 1          sLine = hEdit.Lines[iLine]          IF FEditor.IsEndProc(sLine) THEN BREAK        WEND      ELSE        PRINT "nothing"      ENDIF    ELSE      IF iLine < 0 THEN        IF $iSearch = SEARCH_PROJECT THEN          sNext = Project.GetPreviousEditor(hForm.Path)          Project.LoadFile(sNext)          hForm = Project.Files[sNext]          hEdit = hForm.Editor        ENDIF        iLine = hEdit.Lines.Count - 1      ENDIF    ENDIF    IF hForm = hFormStop THEN      IF iLine = iLineStop THEN        bStop = TRUE      ENDIF    ENDIF  LOOPENDPUBLIC SUB btnClose_Click()  ME.CloseENDPRIVATE SUB ReadOption()'<upd 20040401 ron  DIM iSr AS Integer  DIM bCS AS Boolean  DIM bWO AS Boolean  DIM bIC AS Boolean  iSr=$iSearch  bCS=$bCaseSensitive  bWO=$bWordOnly  bIC=$bIgnoreComment'</upd  IF optProcedure.Value THEN    $iSearch = SEARCH_PROC  ELSE IF optFile.Value THEN    $iSearch = SEARCH_FILE  ELSE    $iSearch = SEARCH_PROJECT  ENDIF'<add FindList ron>  $bForm=chkInForm.Value'</add FindList ron>  $bCaseSensitive = chkCase.Value  $bWordOnly = chkWord.Value  '$bRegular = chkRegular.Value  $bIgnoreComment = chkComment.Value  $bShow = TRUE  $bReplaceAll = FALSE'<upd 20040401 ron  IF iSr<>$iSearch OR bCS<>$bCaseSensitive OR bWO<> $bWordOnly OR bIC<>$bIgnoreComment THEN bDoFullScan=TRUE'</updENDPRIVATE FUNCTION GetCharType(sChar AS String) AS Integer  IF Asc(sChar) <= 32 THEN RETURN 0  IF Instr("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$", UCase(sChar)) THEN RETURN 1  IF Asc(sChar) >= 128 THEN RETURN 1  RETURN 2ENDPRIVATE FUNCTION SearchString(sLine AS String, iPos AS Integer, OPTIONAL bBack AS Boolean) AS Integer  DIM iPosC AS Integer  IF bBack AND iPos = 0 THEN RETURN  IF $bIgnoreComment THEN    iPosC = Instr(sLine, "'")    IF iPosC THEN sLine = Left$(sLine, iPosC - 1)  ENDIF  IF NOT $bCaseSensitive THEN sLine = String.UCase(sLine)  iPos = String.Pos(sLine, iPos)  DO    IF bBack THEN      IF $bCaseSensitive THEN        iPos = RInstr(sLine, $sFind, iPos)      ELSE        iPos = RInstr(sLine, String.UCase($sFind), iPos)      ENDIF    ELSE      IF $bCaseSensitive THEN        iPos = Instr(sLine, $sFind, iPos + 1)      ELSE        iPos = Instr(sLine, String.UCase($sFind), iPos + 1)      ENDIF    ENDIF    IF iPos = 0 THEN BREAK    IF $bWordOnly THEN      IF iPos > 1 THEN        IF GetCharType(Mid$(sLine, iPos, 1)) = GetCharType(Mid$(sLine, iPos - 1, 1)) THEN CONTINUE      ENDIF      IF (iPos + Len($sFind)) <= Len(sLine) THEN        IF GetCharType(Mid$(sLine, iPos + Len($sFind) - 1, 1)) = GetCharType(Mid$(sLine, iPos + Len($sFind), 1)) THEN CONTINUE      ENDIF    ENDIF    BREAK  LOOP  IF iPos THEN iPos = String.Index(sLine, iPos)  RETURN iPosEND'PUBLIC FUNCTION Form_KeyPress(Ascii AS String, Code AS Integer, State AS Integer) AS BOOLEAN''  Project.Shortcut(Code, Ascii, State)''END'*******************************************************'<add FindMain ron>PUBLIC SUB chkList_Click()  DIM iH AS Integer  DIM iW AS Integer  $bList = chkList.Value  ME.TopOnly = $bList  IF $bList THEN    ListInit    iH = cvwFindList.Top + cvwFindList.height + ME.H - ME.ClientH '385    iW = cvwFindList.X + cvwFindList.W + 8 + ME.W - ME.ClientW    btnFind.Caption = ("&Search forward")    btnFindPrevious.Caption = ("Search &backward")  ELSE    iH = cvwFindList.Top + ME.H - ME.ClientH    iW = btnClose.X + btnClose.W + 8 + ME.W - ME.ClientW    btnFind.Caption = ("Find &next")    btnFindPrevious.Caption = ("Find &previous")  ENDIF  ME.Border = Window.Resizable  ME.Resize(iW, iH)  IF NOT $bList THEN ME.Border = Window.FixedENDPRIVATE SUB ListInit()  WITH cvwFindList    .ScrollBar = Scroll.Both    .Resizable = TRUE    .Columns.Sort=0    .Columns.Ascending=TRUE   ' .Columns.Adjust '?????? how to    .Columns.Count=4    .Columns[0].text=("Class / Line")    .Columns[0].width=100 '   .Columns[0].Align=align.Right    .Columns[1].text=("Line")    .Columns[1].width=0'60    .Columns[1].Alignment=align.Right    .Columns[2].text=("Pos.")    .Columns[2].width=60    .Columns[2].Alignment=align.Right    .Columns[3].Text=("Text")    .Columns[3].width=300  END WITHENDPUBLIC SUB Form_Resize()  IF NOT $bList THEN  RETURN  WITH cvwFindList    .Move(.X,.Y,ME.ClientW-2*.X,ME.ClientH-.Y-.X)  END WITHENDPUBLIC SUB cvwFindList_Click()  DIM hForm AS FEditor  DIM hEdit AS GambasEditor  DIM sbase AS String  DIM sFile AS String  DIM sKey AS String  DIM iLine AS Integer  DIM iColumn AS Integer  DIM iPos AS Integer  DIM aArg AS String[]  DIM ss AS String  sBase   = Application.Path  sBase   = Project.Dir  sKey    = cvwFindList.key  iPos=Instr(sKey,"|")  aArg=Split(sKey,"|")  IF aArg.Count=1 THEN    'it is root node  ELSE     sfile   =sBase &/ aArg[0]     iLine   =CInt(aArg[1])     iColumn =CInt(aArg[2])    IF Project.Files.Exist(sFile) THEN       hForm = Project.Files[sFile]       hForm.Show       hEdit=hForm.Editor       hEdit.Pos = hEdit.ToPos(iLine, iColumn)       hEdit.Select(hEdit.Pos, String.Len($sFind))      ' how to get cursor at begin highlighted ?    ENDIF  ENDIFENDPRIVATE SUB AddToList(hForm AS FEditor, iLine AS Integer, iPos AS Integer)  DIM sNode AS String  DIM sLeaf AS String  DIM sLine AS String  DIM sFile AS String  sFile=Left(hForm.Title,Instr(hform.Title," ")-1)  sLine=hForm.Editor.Lines[iLine]  iPos = SearchString(sLine, 0)  WHILE iPos<> 0 ' iPos is base 1, iLine is base 0 !    sNode=hForm.path    sLeaf = sFile & "|" & CStr(iLine) & "|" & CStr(iPos-1)    ' add object node    IF NOT cvwFindList.Exist(sNode) THEN ' xxx.form or xxx.class      cvwFindList.Add(sNode,sFile)      cvwFindList[sNode][3] ="1"      ' if no project then all visible      IF $iSearch <> SEARCH_PROJECT THEN cvwFindList[sNode].EnsureVisible    ELSE      cvwFindList[sNode][3] = Val(cvwFindList[sNode][3]) + 1    ENDIF    IF NOT cvwFindList.Exist(sleaf) THEN      cvwFindList.Add(sLeaf,  Right$("     " & CStr(iLine+1),5),,sNode)      cvwFindList[sLeaf][1] = Right$("     " & CStr(iLine+1),5) & " "      cvwFindList[sLeaf][2] = Right$("     " & CStr(iPos) ,5) & " "      cvwFindList[sLeaf][3] = Trim(sLine) ' sLine'leading tabs in UltraEdit    ENDIF    ' start at this line    IF $iCline=iLine THEN cvwFindList[sLeaf].Selected=TRUE    ' if no project then all visible    IF $iSearch <> SEARCH_PROJECT THEN cvwFindList[sLeaf].EnsureVisible    ' find next in line    iPos = SearchString(sLine, iPos + String.Len($sFind))  WENDEND'<upd 20040401 ronPUBLIC SUB cmbFind_Change()  bDoFullScan=TRUEEND'</upd'</add FindMain ron>PUBLIC SUB OnProjectChange()  cvwFindList.Clear  chkList.Value = FALSEENDPUBLIC SUB Form_Activate()  DIM bTextOnly AS Boolean  IF NOT Project.ActiveForm THEN RETURN  SELECT CASE Object.Type(Project.ActiveForm)    CASE "FEditor"      bTextOnly = FALSE    CASE "FTextEditor"      bTextOnly = TRUE    CASE ELSE      RETURN  END SELECT  IF bTextOnly = $bTextOnly THEN RETURN  $bTextOnly = bTextOnly  IF $bTextOnly THEN    chkList.Value = FALSE    optFile.Value = TRUE  ENDIF  chkList.Enabled = NOT $bTextOnly  chkComment.Enabled = NOT $bTextOnly  frmSearch.Enabled = NOT $bTextOnlyEND

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -