📄 ffind.class
字号:
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 + -