📄 env_opt.pas
字号:
unit env_opt;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ColorGrd, mwCustomEdit, mwHighlighter, wmMultiSyn,
wmPHPSyn, mwDmlSyn, nhAsmSyn, dmBatSyn, dmDfmSyn, mkGalaxySyn, odPySyn,
lbVBSSyn, hkAWKSyn, hkHTMLSyn, siTCLTKSyn, wmSQLSyn, cwCACSyn,
DcjJavaSyn, cbHPSyn, mwGeneralSyn, DcjPerlSyn, DcjCppSyn, mwPasSyn;
type
TfrmEnvOpts = class(TForm)
btnOk: TButton;
btnCancel: TButton;
PageControl1: TPageControl;
tsEditor: TTabSheet;
TabSheet1: TTabSheet;
lbLanguage: TListBox;
GroupBox1: TGroupBox;
lbElement: TListBox;
ColorGrid: TColorGrid;
cbBold: TCheckBox;
cbItalic: TCheckBox;
cbUnderline: TCheckBox;
Label1: TLabel;
Label2: TLabel;
cbStrikeOut: TCheckBox;
mwPasSyn1: TmwPasSyn;
DcjCppSyn1: TDcjCppSyn;
DcjPerlSyn1: TDcjPerlSyn;
mwGeneralSyn1: TmwGeneralSyn;
cbHPSyn1: TcbHPSyn;
DcjJavaSyn1: TDcjJavaSyn;
cwCACSyn1: TcwCACSyn;
wmSQLSyn1: TwmSQLSyn;
siTCLTKSyn1: TsiTCLTKSyn;
hkHTMLSyn1: ThkHTMLSyn;
hkAWKSyn1: ThkAWKSyn;
lbVbsSyn1: TlbVbsSyn;
odPySyn1: TodPySyn;
mkGalaxySyn1: TmkGalaxySyn;
dmDfmSyn1: TdmDfmSyn;
dmBatSyn1: TdmBatSyn;
nhAsmSyn1: TnhAsmSyn;
mwDmlSyn1: TmwDmlSyn;
wmPHPSyn1: TwmPHPSyn;
GroupBox2: TGroupBox;
cbAutoIndent: TCheckBox;
cbDragDropEditing: TCheckBox;
cbDropFiles: TCheckBox;
cbHalfPageScroll: TCheckBox;
cbScrollPastEol: TCheckBox;
cbTabsToSpaces: TCheckBox;
cbSmartTabs: TCheckBox;
GroupBox3: TGroupBox;
cbGutterVisible: TCheckBox;
cbxGutterSize: TComboBox;
Label3: TLabel;
cbShowLineNumbers: TCheckBox;
wmMultiSyn1: TwmMultiSyn;
procedure FormShow(Sender: TObject);
procedure lbLanguageClick(Sender: TObject);
procedure lbElementClick(Sender: TObject);
procedure ElementChange(Sender: TObject);
procedure btnOkClick(Sender: TObject);
private
public
procedure GetCurrentSettings;
procedure ApplyCurrentSettings;
procedure EnumerateHighlighters;
procedure AssignOptions( Edit : TmwCustomEdit );
end;
var
frmEnvOpts: TfrmEnvOpts;
implementation
uses main;
{$R *.DFM}
procedure TfrmEnvOpts.EnumerateHighlighters;
var
I : integer;
begin
lbLanguage.Items.Clear;
for i := 0 to ComponentCount-1 do
if Components[i] is TmwCustomHighLighter then
lbLanguage.Items.AddObject(
(Components[i] as TmwCustomHighLighter).LanguageName,
Components[i]);
lbLanguage.ItemIndex := 0;
lbLanguageClick(self);
end;
procedure TfrmEnvOpts.FormShow(Sender: TObject);
begin
EnumerateHighlighters;
GetCurrentSettings;
end;
procedure TfrmEnvOpts.lbLanguageClick(Sender: TObject);
var
i: integer;
h: TmwCustomHighLighter;
begin
if lbLanguage.ItemIndex >= 0 then begin
h := lbLanguage.Items.Objects[lbLanguage.ItemIndex] as TmwCustomHighLighter;
lbElement.Items.Clear;
for i := 0 to h.AttrCount - 1 do
lbElement.Items.Add(h.Attribute[i].Name);
lbElement.ItemIndex := 0;
end;
lbElementClick(Self);
end;
procedure TfrmEnvOpts.lbElementClick(Sender: TObject);
var
h: TmwCustomHighLighter;
Attr: TmwHighLightAttributes;
begin
if lbLanguage.ItemIndex >= 0 then begin
h := lbLanguage.Items.Objects[lbLanguage.ItemIndex] as TmwCustomHighLighter;
Attr := TmwHighLightAttributes.Create('');
try
Attr.Assign(h.Attribute[lbElement.ItemIndex]);
ColorGrid.ForegroundIndex := ColorGrid.ColorToIndex(Attr.Foreground);
ColorGrid.BackgroundIndex := ColorGrid.ColorToIndex(Attr.Background);
cbBold.Checked := (fsBold in Attr.Style);
cbItalic.Checked := (fsItalic in Attr.Style);
cbUnderLine.Checked := (fsUnderline in Attr.Style);
cbStrikeOut.Checked := (fsStrikeOut in Attr.Style);
finally
Attr.Free;
end;
end;
end;
procedure TfrmEnvOpts.ElementChange(Sender: TObject);
var
h: TmwCustomHighLighter;
Attr: TmwHighLightAttributes;
AttrStyle: TFontStyles;
begin
if lbLanguage.ItemIndex >= 0 then begin
h := lbLanguage.Items.Objects[lbLanguage.ItemIndex] as TmwCustomHighLighter;
Attr := TmwHighLightAttributes.Create(lbElement.Items[lbElement.ItemIndex]);
try
AttrStyle := [];
Attr.Foreground := ColorGrid.ForegroundColor;
Attr.Background := ColorGrid.BackgroundColor;
if cbBold.Checked then
Include(AttrStyle, fsBold);
if cbItalic.Checked then
Include(AttrStyle, fsItalic);
if cbUnderLine.Checked then
Include(AttrStyle, fsUnderline);
if cbStrikeOut.Checked then
Include(AttrStyle, fsStrikeOut);
Attr.Style := AttrStyle;
h.Attribute[lbElement.ItemIndex].Assign(Attr);
finally
Attr.Free;
end;
end;
end;
procedure TfrmEnvOpts.GetCurrentSettings;
procedure AssignAttrs( FromHL, ToHL : TmwCustomHighLighter );
var
I : integer;
begin
for I := 0 to FromHL.AttrCount-1 do
ToHL.Attribute[I].Assign( FromHL.Attribute[I] );
end;
var
I : integer;
Idx : integer;
Edit : TMyMwCustomEdit;
begin
for i := 0 to MainForm.ComponentCount-1 do
if MainForm.Components[i] is TmwCustomHighLighter then begin
Idx := lbLanguage.Items.IndexOf(
(MainForm.Components[i] as TmwCustomHighLighter).LanguageName );
if Idx >= 0 then
AssignAttrs( MainForm.Components[i] as TmwCustomHighLighter,
lbLanguage.Items.Objects[Idx] as TmwCustomHighLighter );
end;
Edit := MainForm.CurrentEdit;
cbAutoIndent.Checked := mweoAutoIndent in Edit.Options;
cbDragDropEditing.Checked := mweoDragDropEditing in Edit.Options;
cbDropFiles.Checked := mweoDropFiles in Edit.Options;
cbHalfPageScroll.Checked := mweoHalfPageScroll in Edit.Options;
cbScrollPastEol.Checked := mweoScrollPastEol in Edit.Options;
cbTabsToSpaces.Checked := mweoTabsToSpaces in Edit.Options;
cbSmartTabs.Checked := mweoSmartTabs in Edit.Options;
cbGutterVisible.Checked := Edit.Gutter.Width > 0;
cbShowLineNumbers.Checked := Edit.Gutter.ShowLineNumbers;
cbxGutterSize.Text := IntToStr(Edit.Gutter.Width);
end;
procedure TfrmEnvOpts.AssignOptions( Edit : TmwCustomEdit );
begin
if cbAutoIndent.Checked then
Edit.Options := Edit.Options + [mweoAutoIndent]
else
Edit.Options := Edit.Options - [mweoAutoIndent];
if cbDragDropEditing.Checked then
Edit.Options := Edit.Options + [mweoDragDropEditing]
else
Edit.Options := Edit.Options - [mweoDragDropEditing];
if cbDropFiles.Checked then
Edit.Options := Edit.Options + [mweoDropFiles]
else
Edit.Options := Edit.Options - [mweoDropFiles];
if cbHalfPageScroll.Checked then
Edit.Options := Edit.Options + [mweoHalfPageScroll]
else
Edit.Options := Edit.Options - [mweoHalfPageScroll];
if cbScrollPastEol.Checked then
Edit.Options := Edit.Options + [mweoScrollPastEol]
else
Edit.Options := Edit.Options - [mweoScrollPastEol];
if cbTabsToSpaces.Checked then
Edit.Options := Edit.Options + [mweoTabsToSpaces]
else
Edit.Options := Edit.Options - [mweoTabsToSpaces];
if cbSmartTabs.Checked then
Edit.Options := Edit.Options + [mweoSmartTabs]
else
Edit.Options := Edit.Options - [mweoSmartTabs];
if not cbGutterVisible.Checked then
Edit.Gutter.Width := 0
else begin
Edit.Gutter.ShowLineNumbers := cbShowLineNumbers.Checked;
Edit.Gutter.Width := StrToInt(cbxGutterSize.Text);
end;
end;
procedure TfrmEnvOpts.ApplyCurrentSettings;
procedure AssignAttrs( FromHL, ToHL : TmwCustomHighLighter );
var
I : integer;
begin
for I := 0 to FromHL.AttrCount-1 do
ToHL.Attribute[I].Assign( FromHL.Attribute[I] );
end;
var
I : integer;
Idx : integer;
begin
for i := 0 to MainForm.ComponentCount-1 do
if MainForm.Components[i] is TmwCustomHighLighter then begin
Idx := lbLanguage.Items.IndexOf(
(MainForm.Components[i] as TmwCustomHighLighter).LanguageName );
if Idx >= 0 then
AssignAttrs( lbLanguage.Items.Objects[Idx] as TmwCustomHighLighter,
MainForm.Components[i] as TmwCustomHighLighter );
end;
for I := 0 to MainForm.EditorCount-1 do
AssignOptions(MainForm.Editor[I]);
end;
procedure TfrmEnvOpts.btnOkClick(Sender: TObject);
begin
ApplyCurrentSettings;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -