optdlg.pas

来自「delphi代码格式化,最新汉化版」· PAS 代码 · 共 577 行 · 第 1/2 页

PAS
577
字号
{|----------------------------------------------------------------------
 | Unit:        OptDlg
 |
 | Author:      Egbert van Nes
 |
 | Description: Dialog box with options of DelForExp
 |
 | Copyright (c) 2000  Egbert van Nes
 |   All rights reserved
 |   Disclaimer and licence notes: see license.txt
 |
 |----------------------------------------------------------------------
}
unit OptDlg;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls, ComCtrls, Delfor1, Dialogs, Grids, DelForTypes;

type
  TOptionsDlg = class(TForm)
    OKBtn: TButton;
    CancelBtn: TButton;
    PageControl1: TPageControl;
    Indent: TTabSheet;
    Spaces: TTabSheet;
    Blanklines: TTabSheet;
    SpacePerIndentEdit: TEdit;
    SpacePerIndentUpDown: TUpDown;
    Label1: TLabel;
    Capitals: TTabSheet;
    IndentBeginCheck: TCheckBox;
    UpperCompDirectivesCheck: TCheckBox;
    BlankProcCheck: TCheckBox;
    BlankSubProcCheck: TCheckBox;
    Label2: TLabel;
    IndentTryCheck: TCheckBox;
    Label3: TLabel;
    FeedAfterSemiColonCheck: TCheckBox;
    FeedRoundBeginCombo: TComboBox;
    Label4: TLabel;
    FeedAfterThenCheck: TCheckBox;
    FeedBeforeEndCheck: TCheckBox;
    UpperNumbersCheck: TCheckBox;
    IndentTryElseCheck: TCheckBox;
    Label6: TLabel;
    Label7: TLabel;
    DefaultBtn: TButton;
    TabSheet1: TTabSheet;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    StartCommentOutEdit: TEdit;
    EndCommentOutEdit: TEdit;
    Label11: TLabel;
    CapFileNameButton: TButton;
    CapFileNameEdit: TEdit;
    OpenDialog: TOpenDialog;
    WrapLinesCheck: TCheckBox;
    WrapPositionEdit: TEdit;
    WrapPositionUpDown: TUpDown;
    HelpButton: TButton;
    FeedAfterVarCheck: TCheckBox;
    Label14: TLabel;
    ReservedCaseCombo: TComboBox;
    Label15: TLabel;
    StandDirectivesCombo: TComboBox;
    IndentCommentsCheck: TCheckBox;
    IndentCompDirectivesCheck: TCheckBox;
    TabSheet2: TTabSheet;
    AlignCommentsCheck: TCheckBox;
    Label16: TLabel;
    AlignCommentPosEdit: TEdit;
    AlignCommentPosUpDown: TUpDown;
    AlignVarCheck: TCheckBox;
    Label17: TLabel;
    AlignVarPosEdit: TEdit;
    AlignVarPosUpDown: TUpDown;
    FillNewWordsCombo: TComboBox;
    FeedElseIfCheck: TCheckBox;
    NoFeedBeforeThenCheck: TCheckBox;
    NoIndentElseIfCheck: TCheckBox;
    IndentCaseElseCheck: TCheckBox;
    Label12: TLabel;
    ShortCutEdit: TEdit;
    RemoveDoubleBlankCheck: TCheckBox;
    EditButton: TButton;
    TabSheet3: TTabSheet;
    BeforeMemo: TMemo;
    Label18: TLabel;
    AfterMemo: TMemo;
    Label19: TLabel;
    SpaceGrid: TStringGrid;
    SpacingCombo: TComboBox;
    FeedEachUnitCheck: TCheckBox;
    ExceptSingleCheck: TCheckBox;
    BorlandButton: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DefaultBtnClick(Sender: TObject);
    procedure CapFileNameButtonClick(Sender: TObject);
    procedure HelpButtonClick(Sender: TObject);
    procedure ShortCutEditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EditButtonClick(Sender: TObject);
    procedure CapFileNameEditChange(Sender: TObject);
    procedure TabSheet3Show(Sender: TObject);
    procedure BeforeMemoClick(Sender: TObject);
    procedure BeforeMemoKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BeforeMemoKeyPress(Sender: TObject; var Key: Char);
    procedure BeforeMemoMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SpacingComboExit(Sender: TObject);
    procedure SpaceGridClick(Sender: TObject);
    procedure SpaceGridTopLeftChanged(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BorlandButtonClick(Sender: TObject);
    procedure FeedAfterThenCheckClick(Sender: TObject);
  private
    { Private declarations }
    procedure UpdateButtons;
    procedure FillPreview;
    procedure UpdateFormatter;
    procedure SetFormatterSettings(OldSettings: TSettings; OldCapFileName: PChar);
    function GetFormatterSettings(OldCapFileName: PChar): TSettings;
    procedure FillSpaceCombo(ACombo: TComboBox);
    procedure AddSpaceRow(RowNo: Integer; StrCol1, StrCol2: string;
      Space: TSpaceBefore);
    function GetSpaceItem(I: Integer): TSpaceBefore;
    procedure SetDefault(BorlandStyle: boolean);
  public
    HelpFile: PChar;
    Formatter: TPascalParser;
    { Public declarations }
  end;

var
  OptionsDlg: TOptionsDlg = nil;

implementation
uses Menus, EditFile, Messages;
{$R *.DFM}
const
  str_None = '不插入空格';
  str_Before = '在前面插入空格';
  str_after = '在后面插入空格';
  str_BeforeAfter = '前后都插入空格';

function StrTrim(Dest: PChar): PChar;
var
  P: PChar;
begin
  if Dest^ <> #0 then
  begin
    P := StrEnd(Dest) - 1;
    while (P > Dest) and (P^ = ' ') do
      Dec(P);
    if P^ <> ' ' then inc(P);
    P^ := #0;
  end;
  StrTrim := Dest;
end;

function StrLTrim(Dest: PChar): PChar;
var
  P: PChar;
begin
  P := Dest;
  while (P^ = ' ') and (P^ <> #0) do
    inc(P);
  StrLTrim := StrCopy(Dest, P);
end;

procedure TOptionsDlg.FillSpaceCombo(ACombo: TComboBox);
begin
  with ACombo.Items do
  begin
    Clear;
    Add(str_None);
    Add(str_Before);
    Add(str_after);
    Add(str_BeforeAfter);
  end;
end;

function TOptionsDlg.GetSpaceItem(I: Integer): TSpaceBefore;
var
  S: string;
begin
  S := SpaceGrid.Cells[2, I];
  Result := spNone;
  if S = str_Before then
    Result := spBefore
  else if S = str_after then
    Result := spAfter
  else if S = str_BeforeAfter then
    Result := spBoth;
end;

procedure TOptionsDlg.UpdateFormatter;
begin
  with Formatter do
    if Formatter <> nil then
    begin
      SpacePerIndent := SpacePerIndentUpDown.Position;
      CapFileName := PChar(CapFileNameEdit.Text);
      ShortCutText := ShortCutEdit.Text;
      indentBegin := IndentBeginCheck.Checked;
      IndentComments := IndentCommentsCheck.Checked;
      IndentCompDirectives := IndentCompDirectivesCheck.Checked;
      IndentTry := IndentTryCheck.Checked;
      IndentTryElse := IndentTryElseCheck.Checked;
      IndentCaseElse := IndentCaseElseCheck.Checked;
      UpperCompDirectives := UpperCompDirectivesCheck.Checked;
      UpperNumbers := UpperNumbersCheck.Checked;
      ReservedCase := TCase(ReservedCaseCombo.ItemIndex);
      StandDirectivesCase := TCase(StandDirectivesCombo.ItemIndex);
      BlankProc := BlankProcCheck.Checked;
      BlankSubProc := BlankSubProcCheck.Checked;
      RemoveDoubleBlank := RemoveDoubleBlankCheck.Checked;
      WrapLines := WrapLinesCheck.Checked;
      WrapPosition := WrapPositionUpDown.Position;
      AlignComments := AlignCommentsCheck.Checked;
      AlignCommentPos := AlignCommentPosUpDown.Position;
      AlignVar := AlignVarCheck.Checked;
      AlignVarPos := AlignVarPosUpDown.Position;
      SpaceEqualOper := GetSpaceItem(1);
      SpaceOperators := GetSpaceItem(2);
      SpaceColon := GetSpaceItem(3);
      SpaceSemiColon := GetSpaceItem(4);
      SpaceComma := GetSpaceItem(5);
      SpaceLeftBr := GetSpaceItem(6);
      SpaceRightBr := GetSpaceItem(7);
      SpaceLeftHook := GetSpaceItem(8);
      SpaceRightHook := GetSpaceItem(9);
      FeedAfterThen := FeedAfterThenCheck.Checked;
      ExceptSingle := ExceptSingleCheck.Checked;
      FeedEachUnit := FeedEachUnitCheck.Checked;
      NoFeedBeforeThen := NoFeedBeforeThenCheck.Checked;
      FeedAfterVar := FeedAfterVarCheck.Checked;
      FeedElseIf := FeedElseIfCheck.Checked;
      NoIndentElseIf := NoIndentElseIfCheck.Checked;
      FeedBeforeEnd := FeedBeforeEndCheck.Checked;
      FeedAfterSemiColon := FeedAfterSemiColonCheck.Checked;
      FillNewWords := TFillMode(FillNewWordsCombo.ItemIndex);
      StrLCopy(StartCommentOut, PChar(StartCommentOutEdit.Text), 20);
      StrLTrim(StrTrim(StartCommentOut));
      StrLCopy(EndCommentOut, PChar(EndCommentOutEdit.Text), 20);
      StrLTrim(StrTrim(EndCommentOut));
      FeedRoundBegin := TFeedBegin(FeedRoundBeginCombo.ItemIndex);
    end;
end;

procedure TOptionsDlg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if ModalResult <> mrCancel then
  begin
    UpdateFormatter;
    Formatter.Config(False);
  end;
end;

procedure TOptionsDlg.AddSpaceRow(RowNo: Integer; StrCol1, StrCol2: string;
  Space: TSpaceBefore);
begin
  with SpaceGrid do
  begin
    Cells[0, RowNo] := StrCol1;
    Cells[1, RowNo] := StrCol2;
    case Space of
      spNone: Cells[2, RowNo] := str_None;
      spBefore: Cells[2, RowNo] := str_Before;
      spAfter: Cells[2, RowNo] := str_after;
      spBoth: Cells[2, RowNo] := str_BeforeAfter;
    end;
  end;
end;

procedure TOptionsDlg.FillPreview;
var
  S: string;
begin
  S := Formatter.RootDir + 'preview.pas';
  if FileExists(S) then
    with BeforeMemo do
    begin
      Clear;
      Lines.LoadFromFile(S);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?