📄 mainedit.pas
字号:
End;
Procedure TfrmJediEdit.WMDropFiles(Var Msg: TWMDropFiles);
Var
Buf: Array[0..255] Of Char;
FilesCount: Integer;
i: Integer;
Begin
FilesCount := DragQueryFile(Msg.Drop, $FFFFFFFF, Nil, 0);
For i := 0 To FilesCount - 1 Do Begin
DragQueryFile(Msg.Drop, i, Buf, SizeOf(Buf));
OpenFile(Buf);
End;
DragFinish(Msg.Drop);
End;
Procedure TfrmJediEdit.WMNotExists(Var Msg: TMessage);
Begin
MessageDlg(Format(sNoFileExist, [CurrentEditor.FileName]), MtError, [MbOK], 0);
End;
Procedure TfrmJediEdit.WMRestoreApp(Var Msg: TMessage);
Begin
ShowApplication;
End;
Procedure TfrmJediEdit.AddFileToMRL(Const FileName: String);
Var
i: Integer;
Begin
i := MRUManager.Strings.IndexOf(FileName);
If (i = -1) And (FileName <> '') Then MRUManager.Add(FileName, 0)
Else If i <> -1 Then Begin
MRUManager.Remove(FileName);
MRUManager.Add(FileName, 0);
End;
End;
Procedure TfrmJediEdit.AppHint(Sender: TObject);
Begin
StatusBar.Panels[sthintPanel].Text := Application.Hint;
End;
Procedure TfrmJediEdit.NormalSelectionExecute(Sender: TObject);
Var
Edit: TMySynEdit;
Begin
Edit := CurrentEditor;
If Assigned(Edit) Then Begin
Edit.SelectionMode := smNormal;
If dlgOption.cbHalfPageScroll.Checked Then Edit.Options := Edit.Options + [eoHalfPageScroll]
Else Edit.Options := Edit.Options - [eoHalfPageScroll];
LineSelection.Checked := False;
ColumnSelection.Checked := False;
NormalSelection.Checked := True;
End;
End;
Procedure TfrmJediEdit.ColumnSelectionExecute(Sender: TObject);
Var
Edit: TMySynEdit;
Begin
Edit := CurrentEditor;
If Assigned(Edit) Then Begin
Edit.SelectionMode := smColumn;
Edit.Options := Edit.Options + [eoHalfPageScroll];
ColumnSelection.Checked := True;
LineSelection.Checked := False;
NormalSelection.Checked := False;
End;
End;
Procedure TfrmJediEdit.LineSelectionExecute(Sender: TObject);
Var
Edit: TMySynEdit;
Begin
Edit := CurrentEditor;
If Assigned(Edit) Then Begin
Edit.SelectionMode := smLine;
If dlgOption.cbHalfPageScroll.Checked Then Edit.Options := Edit.Options + [eoHalfPageScroll]
Else Edit.Options := Edit.Options - [eoHalfPageScroll];
LineSelection.Checked := True;
ColumnSelection.Checked := False;
NormalSelection.Checked := False;
End;
End;
Procedure TfrmJediEdit.ShowLineNoExecute(Sender: TObject);
Var
I: Integer;
Begin
ShowLineNo.Checked := Not ShowLineNo.Checked;
dlgOption.cbShowLineNumbers.Checked := ShowLineNo.Checked;
For I := 0 To EditorCount - 1 Do Editor[I].Gutter.ShowLineNumbers := ShowLineNo.Checked;
End;
Procedure TfrmJediEdit.EditDateTimeExecute(Sender: TObject);
Begin
CurrentEditor.SelText := FormatDateTime(sDateTimeFormat, Now);
End;
Procedure TfrmJediEdit.SaveFile(Editor: TMySynEdit);
Var
BackupName: String;
Begin
If Assigned(Editor) Then Begin
If Editor.FileName = '' Then SaveAsFile(Editor)
Else Begin
If BackupFile And FileExists(Editor.FileName) Then Begin
BackupName := Editor.FileName;
BackupName := ChangeFileExt(BackupName, '.BAK');
If FileExists(BackupName) Then If OverwriteBackup Then DeleteFile(BackupName)
Else Begin
BackupName := GetUniqueFileNameInDir(ExtractFilePath(BackupName),
ExtractFileName(BackupName) + '%x');
End;
BackupName := ExtractFileName(BackupName);
ReNameFile(Editor.FileName, BackupName);
End;
If Editor.HexView Then Begin
Editor.HexEdit.SaveToFile(Editor.FileName);
Editor.LoadFromHexEdit;
end else if (Editor.HighLighter = EditorDataModule.DfmSyn1) and (not DFMWasText) then
begin
SaveStrings2DFMFile(Editor.Lines, Editor.FileName);
Editor.SaveCollaspeList;
end else begin
Editor.Lines.SaveToFile(Editor.FileName);
Editor.SaveCollaspeList;
End;
Editor.Modified := False;
If Not CanUndoAfterSave Then Editor.ClearUndo;
StatusChangeEvent(Editor, []);
End;
End;
End;
Procedure TfrmJediEdit.SaveAsFile(Editor: TMySynEdit);
Begin
If SaveDialog.Execute Then Begin
If Assigned(Editor) Then Begin
If FileExists(SaveDialog.FileName) Then Begin
Case MessageDlg(Format(tran.TMsg(sFileExist), [SaveDialog.FileName]), MtConfirmation,
[MbYes, MbNo, MbCancel], 0) Of
MrYes: ;
MrNo: SaveAsFile(Editor);
MrCancel: Exit;
End;
End;
Editor.FileName := SaveDialog.FileName;
(Editor.Parent As TTabSheet).Caption := ExtractFileName(Editor.FileName);
SaveFile(Editor);
Editor.HighLighter := GetExtHighLighter(UpperCase(ExtractFileExt(Editor.FileName)));
PageControlChange(Self);
End;
End;
End;
Procedure TfrmJediEdit.QuitExecute(Sender: TObject);
Begin
Close;
End;
Procedure TfrmJediEdit.FileExportExecute(Sender: TObject);
Var
i: Integer;
Exporter: TSynCustomExporter;
Begin
ExportDialog.Defaultext := 'rtf';
If ExportDialog.Execute Then Begin
{$IFDEF debug}
SendDebug('Export ...');
{$ENDIF}
For i := 0 To EditorDataModule.ComponentCount - 1 Do Begin
If (EditorDataModule.Components[i] Is TSynCustomExporter) And ((EditorDataModule.Components[i] As TSynCustomExporter).FormatName = strExports.Strings[ExportDialog.FilterIndex - 1]) Then Begin
Exporter := (EditorDataModule.Components[i] As TSynCustomExporter);
If Assigned(Exporter) Then Begin
With CurrentEditor Do Begin
Exporter.Title := ExtractFileName(FileName) + ' - Export by ' + Application.Title;
Exporter.UseBackGround := True;
Exporter.ExportAll(CurrentEditor.Lines); // was Exporter.RunExport(1, LineCount, CurrentEditor, Highlighter);
Exporter.SaveToFile(ExportDialog.FileName);
Exporter.Clear;
End;
End;
Break;
End;
End;
End;
End;
Procedure TfrmJediEdit.FormDestroy(Sender: TObject);
Begin
If Assigned(strExports) Then strExports.Free;
If FindBuf <> Nil Then FreeMem(FindBuf);
End;
Procedure TfrmJediEdit.EditGotoLineExecute(Sender: TObject);
Var
s: String;
I: LongInt;
Edit: TMySynEdit;
Begin
Edit := CurrentEditor;
If Edit.HexView Then Begin
If Edit.HexEdit.DataSize < 1 Then Exit;
I := Edit.HexEdit.GetCursorPos;
s := IntToStr(I);
If InputQuery(tran.TMsg(sGotoCaption), tran.TMsg(sGotoHexPrompt), s) Then Begin
If Pos('0x', AnsiLowerCase(s)) = 1 Then s := '$' + Copy(s, 3, Maxint);
I := StrToIntDef(s, -1);
If Not Edit.HexEdit.Seek(I, SoFromBeginning, True) Then Raise Exception.Create(tran.TMsg(sInvalidPos));
End;
End Else Begin
s := IntToStr(Edit.CaretY);
If InputQuery(tran.TMsg(sGotoCaption), tran.TMsg(sGotoPrompt), s) Then Begin
i := StrToInt(s);
Edit.CaretY := i;
End;
End;
End;
Procedure TfrmJediEdit.SpecialLineColorsEvent(Sender: TObject; Line: Integer;
Var Special: Boolean; Var FG, BG: TColor);
Var
S: String;
markList: TSynEditMarks;
i: Integer;
Begin
S := Copy((Sender As TMySynEdit).Lines[Line - 1], 1, Length(sCollaspePrmpt));
If S = sCollaspePrmpt Then Begin
Special := True;
BG := CollaspeColor;
FG := CollaspeFGColor;
End Else Begin
With (Sender As TMySynEdit) Do Begin
If S = sExpandPrmpt Then Begin
Special := True;
BG := ExpandColor;
FG := ExpandFGColor;
Marks.GetMarksForLine(Line, markList);
For i := 1 To maxMarks Do Begin
If Assigned(markList[i]) Then Begin
If (Not markList[i].IsBookmark) And (markList[i].ImageIndex = idExpandPic) Then Exit;
End;
End;
CreateCollaspeMark(Line, 1, idExpandPic);
End Else If ShowSpecialLineColor And (Line = (Sender As TMySynEdit).CaretY) Then Begin
Special := True;
BG := dlgOption.cboCurrentLineColor.ColorValue;
FG := clBlack;
End Else Begin
With (Sender As TMySynEdit) Do Begin
Special := False;
Marks.GetMarksForLine(Line, markList);
For i := 1 To maxMarks Do Begin
If Assigned(markList[i]) Then Begin
If (Not markList[i].IsBookmark) And (markList[i].ImageIndex = idCollaspePic) Then DeleteCollapse(markList[i].Column);
End;
End;
Marks.ClearLine(Line);
End;
End;
End;
End;
End;
Procedure TfrmJediEdit.MRUManagerClick(Sender: TObject; Const RecentName,
Caption: String; UserData: Integer);
Begin
OpenFile(RecentName);
End;
Procedure TfrmJediEdit.HelpAboutExecute(Sender: TObject);
Begin
DlgAbout := TDlgAbout.Create(Self);
Try
DlgAbout.ShowAbout;
Finally
DlgAbout.Free;
End;
End;
Procedure TfrmJediEdit.ViewStatusbarExecute(Sender: TObject);
Begin
ViewStatusbar.Checked := Not ViewStatusbar.Checked;
StatusBar.Visible := ViewStatusbar.Checked;
End;
Procedure TfrmJediEdit.ViewStatusbarUpdate(Sender: TObject);
Begin
ViewStatusbar.Checked := StatusBar.Visible;
End;
Procedure TfrmJediEdit.ViewToolbarExecute(Sender: TObject);
Begin
ViewToolbar.Checked := Not ViewToolbar.Checked;
tbMain.Visible := ViewToolbar.Checked;
End;
Procedure TfrmJediEdit.ViewToolbarUpdate(Sender: TObject);
Begin
ViewToolbar.Checked := tbMain.Visible;
End;
Procedure TfrmJediEdit.SetOptionsExecute(Sender: TObject);
Var
s: String;
Begin
//if Not Assigned(dlgOption) then dlgOption := TdlgOption.Create(Application);
If dlgOption.ShowModal = MrOk Then Begin
EditorDataModule.StoreSettings(ExtractFilePath(Application.ExeName) + GetDefaultIniName);
With EditorDataModule Do EnumerateHighlighters(cbxHighlighter.Items, s); //refesh filter
OpenFileDialog.Filter := s;
SaveDialog.Filter := s;
With cbxHighlighter Do s := GetTemplateFileName(Items[ItemIndex]);
If FileExists(s) Then EditorDataModule.AutoComplete1.AutoCompleteList.LoadFromFile(s);
End;
If CurrentEditor <> Nil Then CurrentEditor.InValidate;
End;
Procedure TfrmJediEdit.EditReadonlyExecute(Sender: TObject);
Var
I: Integer;
Edit: TMySynEdit;
Begin
EditReadonly.Checked := Not EditReadonly.Checked;
For I := 0 To EditorCount - 1 Do Begin
Edit := Editor[I];
Edit.ReadOnly := EditReadonly.Checked;
Edit.HexEdit.ReadOnlyView := EditReadonly.Checked;
End;
End;
Procedure TfrmJediEdit.BugRptClick(Sender: TObject);
Var
s: String;
Begin
With AppVerInfo Do Try
s := 'mailto:' + Values['AuthorEmail'];
Finally
Free;
End;
ShellExecute($80, 'open', PChar(s), '', '', SW_SHOWDEFAULT);
End;
Function TfrmJediEdit.CloseFile(Editor: TMySynEdit): TModalResult;
Var
s: String;
Begin
Result := MrNo;
If Assigned(Editor) And Editor.Modified Then Begin
s := Editor.FileName;
If s = '' Then s := tran.TMsg(DefaultFileName);
Result := MessageDlg(Format(tran.TMsg(SWarningText), [s]), MtConfirmation,
[MbYes, MbNo, MbCancel], 0);
Case Result Of
MrYes: SaveFile(Editor);
MrCancel: Exit;
End;
s := Editor.FileName;
AddFileToMRL(s);
End;
End;
Procedure TfrmJediEdit.ControlBar1GetSiteInfo(Sender: TObject;
DockClient: TControl; Var InfluenceRect: TRect; MousePos: TPoint;
Var CanDock: Boolean);
Begin
CanDock := (DockClient Is TToolBar);
End;
Procedure TfrmJediEdit.PageControlGetSiteInfo(Sender: TObject;
DockClient: TControl; Var InfluenceRect: TRect; MousePos: TPoint;
Var CanDock: Boolean);
Begin
CanDock := (DockClient Is TMySynEdit);
// (Sender as TPageControl).ActivePage.Caption := ExtractFileName((Target as TMySynEdit).FileName);
End;
Procedure TfrmJediEdit.PageControlDockOver(Sender: TObject;
Source: TDragDockObject; X, Y: Integer; State: TDragState;
Var Accept: Boolean);
Begin
Accept := (Source.Control Is TMySynEdit);
End;
Procedure TfrmJediEdit.SetAllowDroping(Const Value: Boolean);
Begin
FAllowDroping := Value;
DragAcceptFiles(Handle, FAllowDroping);
End;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -