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

📄 env_opt.pas

📁 著名的Handle
💻 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 + -