📄 main.pas
字号:
if SaveDialog.Execute then begin
if assigned(Edit) then begin
Edit.FileName := SaveDialog.FileName;
(Edit.Parent as TTabSheet).Caption := ExtractFileName(Edit.FileName);
end;
FileSave.Execute;
end;
end;
procedure TMainForm.EditCopy1Execute(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
if assigned(Edit) then
Edit.CopyToClipboard;
end;
procedure TMainForm.EditCopy1Update(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
EditCopy1.Enabled := assigned(Edit) and Edit.SelAvail;
end;
procedure TMainForm.EditCut1Execute(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
if assigned(Edit) then
Edit.CopyToClipboard;
end;
procedure TMainForm.EditCut1Update(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
EditCut1.Enabled := assigned(Edit) and Edit.SelAvail;
end;
procedure TMainForm.EditPaste1Execute(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
if assigned(Edit) then
Edit.PasteFromClipboard;
end;
procedure TMainForm.EditPaste1Update(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
EditPaste1.Enabled := assigned(Edit) and Edit.CanPaste;
end;
procedure TMainForm.EnvironmentOptions1Click(Sender: TObject);
begin
if frmEnvOpts.ShowModal = mrOk then begin
StoreSettings;
end;
CurrentEdit.Invalidate;
end;
function FormatAttrib(Attrib : TmwHighLightAttributes) : string;
begin
Result := IntToHex( Attrib.Background, 8 ) + ':' +
IntToHex( Attrib.Foreground, 8 ) + ':';
if (fsBold in Attrib.Style) then
Result := Result + '1:'
else
Result := Result + '0:';
if (fsItalic in Attrib.Style) then
Result := Result + '1:'
else
Result := Result + '0:';
if (fsUnderline in Attrib.Style) then
Result := Result + '1:'
else
Result := Result + '0:';
if (fsStrikeOut in Attrib.Style) then
Result := Result + '1'
else
Result := Result + '0';
end;
procedure ParseAttr(Value : string; Attrib : TmwHighLightAttributes);
var
P : integer;
begin
P := pos(':', Value );
if P > 0 then
Attrib.Background := strtointdef('$' + copy (Value, 1, P-1 ), clWindow);
delete( Value, 1, P );
P := pos(':', Value );
if P > 0 then
Attrib.Foreground := strtointdef('$' + copy (Value, 1, P-1 ), clWindowText);
delete( Value, 1, P );
Attrib.Style := [];
P := pos(':', Value );
if P > 0 then
if (strtointdef('$' + copy (Value, 1, P-1 ), 0)>0) then
Attrib.Style := Attrib.Style + [fsBold];
delete( Value, 1, P );
P := pos(':', Value );
if P > 0 then
if (strtointdef('$' + copy (Value, 1, P-1 ), 0)>0) then
Attrib.Style := Attrib.Style + [fsItalic];
delete( Value, 1, P );
P := pos(':', Value );
if P > 0 then
if (strtointdef('$' + copy (Value, 1, P-1 ), 0)>0) then
Attrib.Style := Attrib.Style + [fsUnderline];
delete( Value, 1, P );
P := pos(':', Value );
if P > 0 then
if (strtointdef('$' + copy (Value, 1, P-1 ), 0)>0) then
Attrib.Style := Attrib.Style + [fsStrikeOut];
delete( Value, 1, P );
end;
procedure TMainForm.StoreSettings;
var
INI : TINIFile;
I,J : integer;
begin
INI := TIniFile.Create('adv_demo.ini');
try
for i := 0 to ComponentCount-1 do
if Components[i] is TmwCustomHighLighter then
with Components[i] as TmwCustomHighLighter do
for J := 0 to AttrCount-1 do
INI.WriteString( LanguageName, Attribute[J].Name,
FormatAttrib( Attribute[J] ));
INI.WriteBool( 'Editor', 'AutoIndent', frmEnvOpts.cbAutoIndent.Checked );
INI.WriteBool( 'Editor', 'DragDropEditing', frmEnvOpts.cbDragDropEditing.Checked );
INI.WriteBool( 'Editor', 'DropFiles', frmEnvOpts.cbDropFiles.Checked );
INI.WriteBool( 'Editor', 'HalfPageScroll', frmEnvOpts.cbHalfPageScroll.Checked );
INI.WriteBool( 'Editor', 'ScrollPastEol', frmEnvOpts.cbScrollPastEol.Checked );
INI.WriteBool( 'Editor', 'TabsToSpaces', frmEnvOpts.cbTabsToSpaces.Checked );
INI.WriteBool( 'Editor', 'SmartTabs', frmEnvOpts.cbSmartTabs.Checked );
INI.WriteBool( 'Gutter', 'ShowLineNumbers', frmEnvOpts.cbShowLineNumbers.Checked );
INI.WriteString( 'Gutter', 'GutterSize', frmEnvOpts.cbxGutterSize.Text );
finally
INI.Free;
end;
end;
procedure TMainForm.LoadSettings;
var
INI : TINIFile;
I,J : integer;
Attr: string;
begin
INI := TIniFile.Create('adv_demo.ini');
try
for i := 0 to ComponentCount-1 do
if Components[i] is TmwCustomHighLighter then
with Components[i] as TmwCustomHighLighter do
for J := 0 to AttrCount-1 do begin
Attr := INI.ReadString( LanguageName, Attribute[J].Name,
FormatAttrib( Attribute[J] ));
ParseAttr( Attr, Attribute[J] );
end;
frmEnvOpts.cbAutoIndent.Checked := INI.ReadBool( 'Editor', 'AutoIndent', true );
frmEnvOpts.cbDragDropEditing.Checked := INI.ReadBool( 'Editor', 'DragDropEditing', true );
frmEnvOpts.cbDropFiles.Checked := INI.ReadBool( 'Editor', 'DropFiles', false );
frmEnvOpts.cbHalfPageScroll.Checked := INI.ReadBool( 'Editor', 'HalfPageScroll', false );
frmEnvOpts.cbScrollPastEol.Checked := INI.ReadBool( 'Editor', 'ScrollPastEol', true );
frmEnvOpts.cbTabsToSpaces.Checked := INI.ReadBool( 'Editor', 'TabsToSpaces', true );
frmEnvOpts.cbSmartTabs.Checked := INI.ReadBool( 'Editor', 'SmartTabs', true );
frmEnvOpts.cbShowLineNumbers.Checked := INI.ReadBool( 'Gutter', 'ShowLineNumbers', false );
frmEnvOpts.cbxGutterSize.Text := INI.ReadString( 'Gutter', 'GutterSize', '30' );
frmEnvOpts.cbGutterVisible.Checked := boolean(strtoint(frmEnvOpts.cbxGutterSize.Text));
finally
INI.Free;
end;
end;
function TMainForm.GetEditor(Index: integer): TMyMwCustomEdit;
var
I : integer;
begin
Result := nil;
for I := 0 to PageControl.Pages[Index].ControlCount-1 do
if PageControl.Pages[Index].Controls[I] is TMyMwCustomEdit then begin
Result := PageControl.Pages[Index].Controls[I] as TMyMwCustomEdit;
break;
end;
end;
function TMainForm.GetEditorCount : integer;
begin
Result := PageControl.PageCount;
end;
procedure TMainForm.FileCloseExecute(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
if assigned(Edit) and Edit.Modified then
case MessageDlg('Save changes to file '+Edit.Filename+'?', mtConfirmation,
[mbYes, mbNo, mbCancel], 0) of
mrYes : FileSave.Execute;
mrNo : ;
mrCancel : exit;
end;
PageControl.ActivePage.Free;
if PageControl.PageCount = 0 then
FileNew.Execute;
if PageControl.ActivePage.PageIndex = 0 then
PageControl.ActivePage := PageControl.Pages[PageControl.PageCount-1];
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
I : integer;
begin
CanClose := true;
for I := 0 to EditorCount-1 do
if Editor[I].Modified then
case MessageDlg('Save changes to file '+Editor[I].Filename+'?', mtConfirmation,
[mbYes, mbNo, mbCancel], 0) of
mrYes : FileSave.Execute;
mrNo : ;
mrCancel : begin
CanClose := false;
exit;
end;
end;
end;
procedure TMainForm.PageControlChange(Sender: TObject);
var
Idx : integer;
Edit : TMyMwCustomEdit;
begin
Caption := 'adv_demo : '+CurrentEdit.FileName;
Edit := CurrentEdit;
Idx := 0;
if assigned(Edit) and assigned(CurrentEdit.Highlighter) then begin
Idx := cbxHighlighter.Items.IndexOf(CurrentEdit.Highlighter.LanguageName);
if (Idx<0) then
Idx := 0;
end;
cbxHighlighter.ItemIndex := Idx;
end;
procedure TMainForm.cbxHighlighterChange(Sender: TObject);
begin
CurrentEdit.Highlighter := cbxHighlighter.Items.Objects[cbxHighlighter.ItemIndex] as TmwCustomHighLighter;
end;
procedure TMainForm.mwCustomEdit1DropFiles(Sender: TObject; X, Y: Integer;
Files: TStrings);
var
I : integer;
begin
for I := 0 to Files.Count-1 do
OpenFile(Files[I]);
end;
procedure TMainForm.EditSelectAllExecute(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
if assigned(Edit) then
Edit.SelectAll;
end;
procedure TMainForm.EditUndoUpdate(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
EditUndo.Enabled := assigned(Edit) and Edit.CanUndo;
end;
procedure TMainForm.EditRedoUpdate(Sender: TObject);
var
Edit : TMyMwCustomEdit;
begin
Edit := CurrentEdit;
EditRedo.Enabled := assigned(Edit) and Edit.CanRedo;
end;
procedure TMainForm.EditUndoExecute(Sender: TObject);
begin
CurrentEdit.Undo;
end;
procedure TMainForm.EditRedoExecute(Sender: TObject);
begin
CurrentEdit.Redo;
end;
procedure TMainForm.EditFindExecute(Sender: TObject);
var
OldBlockBegin: TPoint;
OldBlockEnd: TPoint;
begin
with CurrentEdit do begin
OldBlockBegin := BlockBegin;
OldBlockEnd := BlockEnd;
SetSelWord;
frmFind.cbFindText.Text := SelText;
BlockBegin := OldBlockBegin;
BlockEnd := OldBlockEnd;
if frmFind.ShowModal=mrOk then begin
SearchOptions := [];
if frmFind.cbMatchCase.Checked then
include( SearchOptions, mwsoMatchCase );
if frmFind.cbWholeWord.Checked then
include( SearchOptions, mwsoWholeWord );
if frmFind.rbBackward.Checked then
include( SearchOptions, mwsoBackwards );
if frmFind.rbSelectedOnly.Checked then
include( SearchOptions, mwsoSelectedOnly );
if frmFind.rbEntireScope.Checked then
include( SearchOptions, mwsoEntireScope );
SearchReplace(frmFind.cbFindText.Text, '', SearchOptions );
end;
end;
end;
procedure TMainForm.EditFindUpdate(Sender: TObject);
begin
EditFind.Enabled := CurrentEdit<>nil;
end;
procedure TMainForm.EditSearchAgainUpdate(Sender: TObject);
begin
EditSearchAgain.Enabled := frmFind.cbFindText.Text <> '';
end;
procedure TMainForm.EditSearchAgainExecute(Sender: TObject);
begin
exclude( SearchOptions, mwsoEntireScope );
CurrentEdit.SearchReplace(frmFind.cbFindText.Text, '', SearchOptions );
end;
procedure TMainForm.Exit1Click(Sender: TObject);
begin
Close;
end;
procedure TMainForm.PrintSetup1Click(Sender: TObject);
begin
PrinterSetupDialog.Execute;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -