📄 mainedit.pas
字号:
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 + -