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

📄 mainedit.pas

📁 大家是不是为不知道如何在VB学到绝地程序
💻 PAS
📖 第 1 页 / 共 5 页
字号:

Procedure TfrmJediEdit.SetAllowDocking(Const Value: Boolean);
Var
  I: Integer;
Begin
  FAllowDocking := Value;
  PageControl.DockSite := FAllowDocking;
  If FAllowDocking Then Begin
    For I := 0 To EditorCount - 1 Do Begin
      Editor[I].DragKind := dkDock;
      Editor[I].DragMode := DmAutomatic;
    End;
  End Else Begin
    For I := 0 To EditorCount - 1 Do Begin
      Editor[I].DragKind := DkDrag;
      Editor[I].DragMode := DmManual;
    End;
  End;
End;

Procedure TfrmJediEdit.EditHexViewExecute(Sender: TObject);
Begin
  EditHexView.Checked := Not EditHexView.Checked;
  CurrentEditor.HexView := EditHexView.Checked;
  tbHighlighter.Enabled := Not EditHexView.Checked;
  cbxHighlighter.Enabled := tbHighlighter.Enabled;
End;

Procedure TfrmJediEdit.HexEditor1StateChanged(Sender: TObject);
Begin
  If CurrentEditor.HexView Then Begin
    With Sender As THexEditor, StatusBar Do Begin
      //Panels[stLinePanel]: 'Line:Column'
      Panels[stLinePanel].Text := Format('%0:6d:%1:3d', [Col, Row]);
      //Panels[stModifiedPanel]: 'Modified'
      If Modified Then Panels[stModifiedPanel].Text := sAlreadyModified
      Else Panels[stModifiedPanel].Text := '';
      If IsInsertMode Then Panels[stInsertPanel].Text := sInsertMode
      Else Panels[stInsertPanel].Text := sOverwriteMode;
      Panels[stDatePanel].Text := FormatDateTime(sDateTimeFormat, Now);
    End;
  End;
End;

//extract from mwCustomEdit

Function Roundoff(X: Extended): LongInt;
Begin
  If (x >= 0) Then Begin
    Result := Trunc(x + 0.5)
  End Else Begin
    Result := Trunc(x - 0.5);
  End;
End;

Procedure TfrmJediEdit.MouseDownEvent(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var
  pt: TPoint;
  f: Single;
  markList: TSynEditMarks;
  i: Integer;
Begin
  With Sender As TMySynEdit Do Begin
    f := (X + LeftChar * CharWidth - Gutter.Width - 2) / CharWidth;
    pt := Point(Roundoff(f), Y Div LineHeight + TopLine);
    If pt.x < 0 Then Begin //in gutter
      Marks.GetMarksForLine(pt.y, markList);
      For i := 1 To maxMarks Do Begin
        If Assigned(markList[i]) Then If Not markList[i].IsBookmark Then Begin
            If markList[i].ImageIndex = idCollaspePic Then ExpandText(pt.y)
            Else If markList[i].ImageIndex = idExpandPic Then CollaspeText(pt.y, 1, '');
            Exit;
          End;
      End;
      If GetBookmark(0, x, y) And (y = pt.y) Then ClearBookmark(0)
      Else SetBookMark(0, CaretX, pt.y);
    End;
  End;
End;

Procedure TfrmJediEdit.ToggleBookmarks(Sender: TObject);
Var
  x, y: Integer;
Begin
  With Sender As TComponent, CurrentEditor Do Begin
    If GetBookmark(Tag, x, y) And (y = CaretY) Then ClearBookmark(Tag)
    Else SetBookMark(Tag, CaretX, CaretY);
  End;
End;

Procedure TfrmJediEdit.GotoBookmarks(Sender: TObject);
Begin
  With Sender As TComponent Do CurrentEditor.GotoBookmark(Tag);
End;

Procedure TfrmJediEdit.miBookmarksClick(Sender: TObject);
Var
  i: Integer;
Begin
  With Sender As TMenuItem Do For i := 0 To Count - 1 Do Checked := False;
  With Sender As TMenuItem, CurrentEditor Do For i := 0 To Marks.Count - 1 Do Begin
      Items[Marks[i].BookmarkNumber].Checked := True;
    End;
End;

Procedure TfrmJediEdit.WindowClick(Sender: TObject);
Begin
  With Sender As TMenuItem Do PageControl.ActivePageIndex := Tag;
End;

Procedure TfrmJediEdit.WindowsListExecute(Sender: TObject);
Var
  I: Integer;
  C: String[2];
  Edit: TMySynEdit;
Begin
  I := PageControl.PageCount;
  If mmiWindows.Count > I Then With mmiWindows Do While Count > I Do Items[Count - 1].Free
  Else If mmiWindows.Count < I Then With mmiWindows Do While Count < I Do Begin
        Add(TMenuItem.Create(mmiWindows));
      End;
  For I := 0 To EditorCount - 1 Do With mmiWindows Do Begin
      Edit := Editor[I];
      Items[I].OnClick := WindowClick;
      If I < 10 Then C := '&' + Char(Ord('0') + I)
      Else If I <= (Ord('Z') + 10) Then C := '&' + Char(I + Ord('A') - 10)
      Else C := ' ';
      Items[I].Caption := C + ' ' + TTabSheet(Edit.Parent).Caption;
      Items[I].Checked := (CurrentEditor = Edit);
      Items[I].Tag := I;
      If Edit.Modified Then Items[I].Caption := Items[I].Caption + ' *';
    End;
End;

Procedure TfrmJediEdit.ToolsAsciiChartExecute(Sender: TObject);
Begin
  If fmAsciiChart = Nil Then fmAsciiChart := TfmAsciiChart.Create(Application);
  If fmAsciiChart.WindowState = WsMinimized Then fmAsciiChart.WindowState := WsNormal;
  fmAsciiChart.Show;
End;

Procedure TfrmJediEdit.ViewHighlighterExecute(Sender: TObject);
Begin
  ViewHighlighter.Checked := Not ViewHighlighter.Checked;
  tbHighlighter.Visible := ViewHighlighter.Checked;
End;

Procedure TfrmJediEdit.ViewHighlighterUpdate(Sender: TObject);
Begin
  ViewHighlighter.Checked := tbHighlighter.Visible;
End;

Procedure TfrmJediEdit.BuildToolsMenu;
Var
  I, J: Integer;
  NewItem: TMenuItem;
  Icon: TIcon;
Begin
  With mmiTools Do Begin
    If Count <= MyToolsCount Then NewBottomLine
    Else For I := MyToolsCount + 1 To Count - 1 Do Delete(Count - 1);

    For I := 0 To ToolsList.Count - 1 Do Begin
      NewItem := TMenuItem.Create(mmiTools);
      NewItem.Caption := ToolsList.Names[I];
      If NewItem.Caption <> '-' Then Begin
        NewItem.Hint := ToolsList.Values[NewItem.Caption];
        {if NewItem.Hint[1] = '"' Then          Icon := IconExtract(Copy(NewItem.Hint, 2, Length(NewItem.Hint) - 2), 0)
        else}
        J := Pos(',', NewItem.Hint);
        If J > 0 Then Icon := IconExtract(Copy(NewItem.Hint, 1, j - 1), 0)
        Else Icon := IconExtract(NewItem.Hint, 0);
        If Icon <> Nil Then Try
          NewItem.Bitmap.Width := Icon.Width;
          NewItem.Bitmap.Height := Icon.Height;
          NewItem.Bitmap.Canvas.Draw(0, 0, Icon);
        Finally
          Icon.Free;
        End;
        NewItem.OnClick := ToolsMenuClick;
      End;
      Add(NewItem);
    End;
  End;
End;

Procedure TfrmJediEdit.ToolsMenuClick(Sender: TObject);
Var
  s, Param, TempDir: String;
  i: Integer;
Begin
  With Sender As TMenuItem Do s := Hint;
  Param := '';
  TempDir := '';
  i := Pos(',', s);
  If i > 0 Then Begin
    Param := Copy(s, i + 1, Length(s));
    s := Copy(s, 1, i - 1);
    i := Pos(',', Param);
    If i > 0 Then Begin
      TempDir := Copy(Param, i + 1, Length(Param));
      Param := Copy(Param, 1, i - 1);
      Param := ReplaceStrings(Param);
      TempDir := ReplaceStrings(TempDir);
    End;
  End;
  ShellExecute($80, 'open', PChar(s), PChar(Param), PChar(TempDir), SW_SHOWDEFAULT);
End;

Procedure TfrmJediEdit.PrintExecute(Sender: TObject);
Begin
  With CurrentEditor Do Begin
    PrintDialog.FromPage := 1;
    PrintDialog.MinPage := 1;
    PrintDialog.Topage := Lines.Count;
    PrintDialog.MaxPage := Lines.Count;
    If SelAvail Then PrintDialog.Options := PrintDialog.Options + [PoSelection]
    Else PrintDialog.Options := PrintDialog.Options - [PoSelection];
    If PrintDialog.Execute Then Begin
      mwPrintOptions.Highlight := Assigned(Highlighter);
      //mwPrintOptions.SynEdit
      mwPrintOptions.Title := ExtractFileName(FileName);
      //mwPrintOptions.SelectedOnly := False;
      //mwPrintOptions.Copies := PrintDialog.Copies;
      Case PrintDialog.PrintRange Of
        PrAllPages: mwPrintOptions.Print;
        //PrSelection: mwPrintOptions.SelectedOnly := True;
        PrPageNums: mwPrintOptions.PrintRange(PrintDialog.FromPage, PrintDialog.Topage);
      End;
    End;
  End;
End;

Procedure TfrmJediEdit.PrintSetupExecute(Sender: TObject);
Begin
  PrinterSetupDialog.Execute;
End;

Procedure TfrmJediEdit.PrintStatusEvent(Sender: TObject; Status: TSynPrintStatus;
  PageNumber: Integer; Var Abort: Boolean);
Begin
  Case Status Of
    psBegin: Begin
        If dlgPrintStatus = Nil Then dlgPrintStatus := TdlgPrintStatus.Create(Application);
        With dlgPrintStatus Do Begin
          Show;
          LblStatus.Caption := sPageNumber + ': ' + IntToStr(PageNumber);
        End;
      End;
    psNewPage: Begin
        With dlgPrintStatus Do Begin
          LblStatus.Caption := sPageNumber + ': ' + IntToStr(PageNumber);
          Refresh;
        End;
        If AbortPrint Then Abort := True;
      End;
    psEnd: dlgPrintStatus.Free;
  End;
End;

Procedure TfrmJediEdit.OpenFilePos(AFileName: String; X, Y: Integer; Const Bookmarks: TBookMarksSet; bkPos: String; NeedSetFocus: Boolean = True);
Var
  Edit: TMySynEdit;
  I, p: Integer;
Begin
  Edit := OpenFile(AFileName, NeedSetFocus);
  If Assigned(Edit) Then With Edit Do Begin
      CaretX := X;
      CaretY := Y;
      //          restore bookmarks
      If Bookmarks <> [] Then For I := 0 To 9 Do Begin
          If i In Bookmarks Then Begin
            p := Pos(',', bkPos);
            x := StrToInt(Copy(bkPos, 1, p - 1));
            Delete(bkPos, 1, p);
            p := Pos(',', bkPos);
            If p = 0 Then p := Length(bkPos) + 1; //the last number
            y := StrToInt(Copy(bkPos, 1, p - 1));
            Delete(bkPos, 1, p);
            SetBookmark(I, x, y);
          End;
        End;
      PageControlChange(Self);
      StatusChangeEvent(Edit, []);
    End;
End;

Function TfrmJediEdit.FileAlreadyOpen(Const AFileName: String): Boolean;
Var
  i: Integer;
Begin
  Result := False;
  If AFileName = '' Then Exit;
  For i := 0 To EditorCount - 1 Do Begin
    If AnsiUpperCase(AFileName) = AnsiUpperCase(Editor[i].FileName) Then Begin
      PageControl.ActivePageIndex := I;
      Result := True;
      Exit;
    End;
  End;
End;

Procedure TfrmJediEdit.EditFindInFilesExecute(Sender: TObject);
Begin
  frmGrepResults.Execute(False);
End;

Procedure TfrmJediEdit.pnlBottomDockSiteGetSiteInfo(Sender: TObject;
  DockClient: TControl; Var InfluenceRect: TRect; MousePos: TPoint;
  Var CanDock: Boolean);
Begin
  CanDock := DockClient Is TfrmGrepResults;
End;

Procedure TfrmJediEdit.pnlBottomDockSiteDockDrop(Sender: TObject;
  Source: TDragDockObject; X, Y: Integer);
Begin
  (Sender As TWinControl).Height := 128;
  StatusBar.Top := pnlBottomDockSite.Top + pnlBottomDockSite.Height;
  If Source.Control Is TfrmGrepResults Then frmGrepResults.IsDocked := True;

  sptBottom.Visible := True;
End;

Procedure TfrmJediEdit.pnlBottomDockSiteUnDock(Sender: TObject;
  Client: TControl; NewTarget: TWinControl; Var Allow: Boolean);
Begin
  (Sender As TWinControl).Height := 3;
  sptBottom.Visible := False;
  If Client Is TfrmGrepResults Then frmGrepResults.IsDocked := False;
End;

Procedure TfrmJediEdit.ViewFindInFilesExecute(Sender: TObject);
Begin
  ViewFindInFiles.Checked := Not ViewFindInFiles.Checked;
  If ViewFindInFiles.Checked Then Begin
    frmGrepResults.Show;
    If frmGrepResults.IsDocked Then Begin
      pnlBottomDockSite.Height := 128;
      StatusBar.Top := pnlBottomDockSite.Top + pnlBottomDockSite.Height;
    End;
  End Else frmGrepResults.Close;
End;

Procedure TfrmJediEdit.ViewFindInFilesUpdate(Sender: TObject);
Begin
  ViewFindInFiles.Checked := frmGrepResults.Visible;
End;

Procedure TfrmJediEdit.SelectLanMenuClick(Sender: TObject);
Var
  I: Integer;
Begin
  For i := 0 To mmiLanguage.Count - 1 Do mmiLanguage.Items[i].Checked := False;
  tran.LanguageFile := (Sender As TMenuItem).Hint;
  Perform(WM_SETREDRAW, 0, 0); //Lock window
  Try
    tran.Translate;
    Application.Title := tran.TMsg(sProductName) + ' ' + sProductVer;
  Finally
    Perform(WM_SETREDRAW, 1, 0); //UnLock window
  End;
  RedrawWindow(Handle, Nil, 0, RDW_FRAME + RDW_INVALIDATE +
    RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);
  CurrentLan := tran.LanguageFile;
  (Sender As TMenuItem).Checked := True;
  PageControlChange(Self);
End;

Procedure TfrmJediEdit.BuildLanguagesMenu;
Var
  I: Integer;
  xLanguage: Integer;
  NewItem: TMenuItem;
  strLanguages: TStringList;
  s: String;
  DefaultLanguage: String;
Begin
  strLanguages := TStringList.Create;
  s := ExtractFilePath(Application.ExeName);
  xLanguage := 0;
  Try
    GetLanguages(strLanguages);
    DefaultLanguage := GetMatcheDefaultLanguage;
    For I := 0 To strLanguages.Count - 1 Do Begin
      NewItem := TMenuItem.Create(mmiLanguage);
      NewItem.Caption := ExtractFileBaseName(strLanguages[I]);
      NewItem.Hint := s + strLanguages[I];
      If CurrentLan <> '' Then Begin
        If CurrentLan = NewItem.Hint Then NewItem.Checked := True;
      End Else If Pos(UpperCase(NewItem.Caption), UpperCase(DefaultLanguage)) > 0 Then Be

⌨️ 快捷键说明

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