📄 optionfrm.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 + -