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

📄 optionfrm.pas

📁 MiniHex 1.1 源程序说明 “MiniHex11SrcSource”目录中的所有文件是MiniHex 1.1的主程序; “MiniHex11SrcControls”目录中的是该软件
💻 PAS
字号:
unit OptionFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs, Misc, HexChFrm, StdCtrls,
  ComCtrls, ExtCtrls, ColorCbo;

type
  TDblClickAct = (daRadixConv, daBkmkMgr);
  TMinState = (msTaskBar, msSysTray);
  TDefDataInspPos = (dpLeftTop, dpLeftBottom, dpRightTop, dpRightBottom);

  TOptionData = record
    AddrColor: TCharAttr;
    HexColor: TCharAttr;
    ChrColor: TCharAttr;
    CurItemColor: TCharAttr;
    BlockColor: TCharAttr;

    ShowToolBar: Boolean;
    ShowStatusBar: Boolean;
    OnTop: Boolean;

    StatusLengthRadix: TRadix;
    StatusOffsetRadix: TRadix;
    StatusBlockInfoRadix: TRadix;
    StatusCurValueType: TValueType;

    HexEditFont: TFont;

    AutoShowOpen: Boolean;
    AddContextMenu: Boolean;
    AllowMultiIns: Boolean;
    ShowDot: Boolean;
    SaveWinSize: Boolean;
    TempPath: string;
    DefEditor: string;
    DblClickAct: TDblClickAct;
    MinState: TMinState;

    AskSave: Boolean;
    CreateBak: Boolean;
    AskWriteSector: Boolean;
    AskWriteCMOS: Boolean;
    MaxUndo: Integer;

    ShowDataInsp: Boolean;
    ShowU8Data: Boolean;
    ShowS8Data: Boolean;
    ShowU16Data: Boolean;
    ShowS16Data: Boolean;
    ShowU32Data: Boolean;
    ShowS32Data: Boolean;
    ShowS64Data: Boolean;
    ShowSingleData: Boolean;
    ShowDoubleData: Boolean;
    ShowReal48Data: Boolean;
    ShowBinaryData: Boolean;
    DefDataInspPos: TDefDataInspPos;
    
  end;

  TOptionForm = class(TForm)
    PageControl: TPageControl;
    NormalTabSheet: TTabSheet;
    OkButton: TButton;
    CancelButton: TButton;
    ApplyButton: TButton;
    HexEditFontDialog: TFontDialog;
    EditorTabSheet: TTabSheet;
    GroupBox1: TGroupBox;
    SetFontButton: TButton;
    GroupBox2: TGroupBox;
    Label1: TLabel;
    TempPathEdit: TEdit;
    TempPathBrowseButton: TButton;
    Label3: TLabel;
    DefEditorEdit: TEdit;
    DefEditorBrowseButton: TButton;
    GroupBox3: TGroupBox;
    AutoShowOpenCheckBox: TCheckBox;
    AddMenuCheckBox: TCheckBox;
    AllowMultiInsCheckBox: TCheckBox;
    ShowDotCheckBox: TCheckBox;
    GroupBox5: TGroupBox;
    DblClickActRadioGroup: TRadioGroup;
    MinStateRadioGroup: TRadioGroup;
    SaveWinSizeCheckBox: TCheckBox;
    DataSafeTabSheet: TTabSheet;
    GroupBox4: TGroupBox;
    AskSaveCheckBox: TCheckBox;
    CreateBakCheckBox: TCheckBox;
    EditorOpenDialog: TOpenDialog;
    FontSamplePanel: TPanel;
    OtherTabSheet: TTabSheet;
    DataInspGroupBox: TGroupBox;
    ShowDataInspCheckBox: TCheckBox;
    ShowU8CheckBox: TCheckBox;
    ShowS8CheckBox: TCheckBox;
    ShowU16CheckBox: TCheckBox;
    ShowS16CheckBox: TCheckBox;
    ShowU32CheckBox: TCheckBox;
    ShowS32CheckBox: TCheckBox;
    ShowS64CheckBox: TCheckBox;
    ShowSingleCheckBox: TCheckBox;
    ShowDoubleCheckBox: TCheckBox;
    ShowReal48CheckBox: TCheckBox;
    ShowBinaryCheckBox: TCheckBox;
    Label13: TLabel;
    DefDataInspPosComboBox: TComboBox;
    Label14: TLabel;
    MaxUndoEdit: TEdit;
    MaxUndoUpDown: TUpDown;
    ScrollBox1: TScrollBox;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    AddrFColorCbo: TColorCbo;
    HexFColorCbo: TColorCbo;
    ChrFColorCbo: TColorCbo;
    BlockFColorCbo: TColorCbo;
    CurFColorCbo: TColorCbo;
    AddrBColorCbo: TColorCbo;
    HexBColorCbo: TColorCbo;
    ChrBColorCbo: TColorCbo;
    BlockBColorCbo: TColorCbo;
    CurBColorCbo: TColorCbo;
    AskWriteSectorCheckBox: TCheckBox;
    AskWriteCMOSCheckBox: TCheckBox;
    procedure SetFontButtonClick(Sender: TObject);
    procedure OkButtonClick(Sender: TObject);
    procedure CancelButtonClick(Sender: TObject);
    procedure ApplyButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TempPathBrowseButtonClick(Sender: TObject);
    procedure DefEditorBrowseButtonClick(Sender: TObject);
    procedure FontSamplePanelDblClick(Sender: TObject);
  private
    { Private declarations }
    procedure SetData(var Value: TOptionData);
    procedure GetData(var Value: TOptionData);

  public
    { Public declarations }
  end;

var
  OptionForm: TOptionForm;
  Options: TOptionData;

function ShowOptionForm(TabSheetIdx: Integer): Boolean;

procedure SetDefaultOptions(var OptionData: TOptionData);
procedure LoadOptions;
procedure SaveOptions;

implementation

{$R *.DFM}

uses MainFrm, IniMgr, DataInspFrm;

function ShowOptionForm(TabSheetIdx: Integer): Boolean;
var
  Frm: TOptionForm;
begin
  Frm := TOptionForm.Create(Application);
  Frm.PageControl.ActivePage := Frm.PageControl.Pages[TabSheetIdx];
  Result := (Frm.ShowModal = mrOk);
  Frm.Free;
end;

procedure SetDefaultOptions(var OptionData: TOptionData);
begin
  OptionData.AddrColor := GetCharAttr(clBlue, clWhite);
  OptionData.HexColor := GetCharAttr(clBlack, clWhite);
  OptionData.ChrColor := GetCharAttr(clBlack, clWhite);
  OptionData.CurItemColor := GetCharAttr(clWhite, clBlue);
  OptionData.BlockColor := GetCharAttr(clWhite, clNavy);

  OptionData.ShowToolBar := True;
  OptionData.ShowStatusBar := True;
  OptionData.OnTop := False;

  OptionData.StatusLengthRadix := raDec;
  OptionData.StatusOffsetRadix := raDec;
  OptionData.StatusBlockInfoRadix := raDec;
  OptionData.StatusCurValueType := vt16u;

  OptionData.HexEditFont.Charset := GB2312_CHARSET;
  OptionData.HexEditFont.Color := clWindowText;
  OptionData.HexEditFont.Height := -16;
  OptionData.HexEditFont.Name := 'Fixedsys';
  OptionData.HexEditFont.Pitch := fpDefault;
  OptionData.HexEditFont.Pitch := fpDefault;
  OptionData.HexEditFont.Size := 12;
  OptionData.HexEditFont.Style := [];

  OptionData.AutoShowOpen := True;
  OptionData.AddContextMenu := True;
  OptionData.AllowMultiIns := False;
  OptionData.ShowDot := False;
  OptionData.SaveWinSize := False;
  OptionData.TempPath := GetWinTempDir;
  OptionData.DefEditor := GetWindowsDir + 'Notepad.exe';
  OptionData.DblClickAct := daRadixConv;
  OptionData.MinState := msTaskBar;
  OptionData.AskSave := False;
  OptionData.CreateBak := True;
  OptionData.AskWriteSector := True;
  OptionData.AskWriteCMOS := True;
  OptionData.MaxUndo := 10;

  OptionData.ShowDataInsp := False;
  OptionData.ShowU8Data := True;
  OptionData.ShowS8Data := True;
  OptionData.ShowU16Data := True;
  OptionData.ShowS16Data := True;
  OptionData.ShowU32Data := True;
  OptionData.ShowS32Data := True;
  OptionData.ShowS64Data := True;
  OptionData.ShowSingleData := False;
  OptionData.ShowDoubleData := False;
  OptionData.ShowReal48Data := False;
  OptionData.ShowBinaryData := False;
  OptionData.DefDataInspPos := dpRightBottom;

end;

procedure LoadOptions;
begin
  Options.HexEditFont := TFont.Create;
  IniManager.LoadOptions(Options);
end;

procedure SaveOptions;
begin
  IniManager.SaveOptions(Options);
end;

procedure TOptionForm.SetData(var Value: TOptionData);
begin
  AutoShowOpenCheckBox.Checked := Value.AutoShowOpen;
  AddMenuCheckBox.Checked := Value.AddContextMenu;
  AllowMultiInsCheckBox.Checked := Value.AllowMultiIns;
  ShowDotCheckBox.Checked := Value.ShowDot;
  SaveWinSizeCheckBox.Checked := Value.SaveWinSize;
  TempPathEdit.Text := Value.TempPath;
  DefEditorEdit.Text := Value.DefEditor;
  DblClickActRadioGroup.ItemIndex := Integer(Value.DblClickAct);
  MinStateRadioGroup.ItemIndex := Integer(Value.MinState);
  AskSaveCheckBox.Checked := Value.AskSave;
  CreateBakCheckBox.Checked := Value.CreateBak;
  AskWriteSectorCheckBox.Checked := Value.AskWriteSector;
  AskWriteCMOSCheckBox.Checked := Value.AskWriteCMOS;
  MaxUndoUpDown.Position := Value.MaxUndo;

  FontSamplePanel.Font := Value.HexEditFont;
  AddrFColorCbo.ColorValue := Value.AddrColor.FColor;
  AddrBColorCbo.ColorValue := Value.AddrColor.BColor;
  HexFColorCbo.ColorValue := Value.HexColor.FColor;
  HexBColorCbo.ColorValue := Value.HexColor.BColor;
  ChrFColorCbo.ColorValue := Value.ChrColor.FColor;
  ChrBColorCbo.ColorValue := Value.ChrColor.BColor;
  BlockFColorCbo.ColorValue := Value.BlockColor.FColor;
  BlockBColorCbo.ColorValue := Value.BlockColor.BColor;
  CurFColorCbo.ColorValue := Value.CurItemColor.FColor;
  CurBColorCbo.ColorValue := Value.CurItemColor.BColor;

  ShowDataInspCheckBox.Checked := Value.ShowDataInsp;
  ShowU8CheckBox.Checked := Value.ShowU8Data;
  ShowS8CheckBox.Checked := Value.ShowS8Data;
  ShowU16CheckBox.Checked := Value.ShowU16Data;
  ShowS16CheckBox.Checked := Value.ShowS16Data;
  ShowU32CheckBox.Checked := Value.ShowU32Data;
  ShowS32CheckBox.Checked := Value.ShowS32Data;
  ShowS64CheckBox.Checked := Value.ShowS64Data;
  ShowSingleCheckBox.Checked := Value.ShowSingleData;
  ShowDoubleCheckBox.Checked := Value.ShowDoubleData;
  ShowReal48CheckBox.Checked := Value.ShowReal48Data;
  ShowBinaryCheckBox.Checked := Value.ShowBinaryData;
  DefDataInspPosComboBox.ItemIndex := Integer(Value.DefDataInspPos);
end;

procedure TOptionForm.GetData(var Value: TOptionData);
begin
  Value.AutoShowOpen := AutoShowOpenCheckBox.Checked;
  Value.AddContextMenu := AddMenuCheckBox.Checked;
  Value.AllowMultiIns := AllowMultiInsCheckBox.Checked;
  Value.ShowDot := ShowDotCheckBox.Checked;
  Value.SaveWinSize := SaveWinSizeCheckBox.Checked;
  Value.TempPath := AddDirSuffix(TempPathEdit.Text);
  Value.DefEditor := DefEditorEdit.Text;
  Value.DblClickAct := TDblClickAct(DblClickActRadioGroup.ItemIndex);
  Value.MinState := TMinState(MinStateRadioGroup.ItemIndex);
  Value.AskSave := AskSaveCheckBox.Checked;
  Value.CreateBak := CreateBakCheckBox.Checked;
  Value.AskWriteSector := AskWriteSectorCheckBox.Checked;
  Value.AskWriteCMOS := AskWriteCMOSCheckBox.Checked;
  Value.MaxUndo := MaxUndoUpDown.Position;

  Value.HexEditFont.Assign(FontSamplePanel.Font);
  Value.AddrColor.FColor := AddrFColorCbo.ColorValue;
  Value.AddrColor.BColor := AddrBColorCbo.ColorValue;
  Value.HexColor.FColor := HexFColorCbo.ColorValue;
  Value.HexColor.BColor := HexBColorCbo.ColorValue;
  Value.ChrColor.FColor := ChrFColorCbo.ColorValue;
  Value.ChrColor.BColor := ChrBColorCbo.ColorValue;
  Value.BlockColor.FColor := BlockFColorCbo.ColorValue;
  Value.BlockColor.BColor := BlockBColorCbo.ColorValue;
  Value.CurItemColor.FColor := CurFColorCbo.ColorValue;
  Value.CurItemColor.BColor := CurBColorCbo.ColorValue;

  Value.ShowDataInsp := ShowDataInspCheckBox.Checked;
  Value.ShowU8Data := ShowU8CheckBox.Checked;
  Value.ShowS8Data := ShowS8CheckBox.Checked;
  Value.ShowU16Data := ShowU16CheckBox.Checked;
  Value.ShowS16Data := ShowS16CheckBox.Checked;
  Value.ShowU32Data := ShowU32CheckBox.Checked;
  Value.ShowS32Data := ShowS32CheckBox.Checked;
  Value.ShowS64Data := ShowS64CheckBox.Checked;
  Value.ShowSingleData := ShowSingleCheckBox.Checked;
  Value.ShowDoubleData := ShowDoubleCheckBox.Checked;
  Value.ShowReal48Data := ShowReal48CheckBox.Checked;
  Value.ShowBinaryData := ShowBinaryCheckBox.Checked;
  Value.DefDataInspPos := TDefDataInspPos(DefDataInspPosComboBox.ItemIndex);
end;

procedure TOptionForm.SetFontButtonClick(Sender: TObject);
begin
  HexEditFontDialog.Font.Assign(FontSamplePanel.Font);
  if HexEditFontDialog.Execute then
  begin
    FontSamplePanel.Font := HexEditFontDialog.Font;
  end;
end;

procedure TOptionForm.FormCreate(Sender: TObject);
begin
  SetData(Options);
end;

procedure TOptionForm.OkButtonClick(Sender: TObject);
begin
  ApplyButtonClick(nil);
  ModalResult := mrOk;
end;

procedure TOptionForm.CancelButtonClick(Sender: TObject);
begin
  ModalResult := mrCancel;
end;

procedure TOptionForm.ApplyButtonClick(Sender: TObject);
begin
  GetData(Options);
  SaveOptions;
  MHMainForm.AddToContentMenu(Options.AddContextMenu);
  MHMainForm.ChangeMaxUndo(Options.MaxUndo);
  MHMainForm.ReDrawAllDoc;
  DataInspForm.AdjustItems;
  DataInspForm.AdjustPos;
end;

procedure TOptionForm.TempPathBrowseButtonClick(Sender: TObject);
var
  Path: string;
  Ok: Boolean;
begin
  Path := '';
  Ok := SelectDir(Handle, '请选择一个临时文件夹:', '', Path);
  if Ok then
  begin
    Path := AddDirSuffix(Path);
    TempPathEdit.Text := Path;
  end;
end;

procedure TOptionForm.DefEditorBrowseButtonClick(Sender: TObject);
begin
  if EditorOpenDialog.Execute then
  begin
    DefEditorEdit.Text := EditorOpenDialog.FileName;
  end;
end;

procedure TOptionForm.FontSamplePanelDblClick(Sender: TObject);
begin
  SetFontButtonClick(nil);
end;

end.

⌨️ 快捷键说明

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