📄 mainfrm.pas
字号:
end;
end;
procedure TMHMainForm.ChangeMaxUndo(Value: Integer);
var
i: Integer;
Frm: THexChForm;
begin
for i := 0 to Self.MDIChildCount - 1 do
begin
if Self.MDIChildren[i] is THexChForm then
begin
Frm := Self.MDIChildren[i] as THexChForm;
Frm.ChangeMaxUndo(Value);
end;
end;
end;
procedure TMHMainForm.FormCreate(Sender: TObject);
var
IniFileName: string;
IsWin9598: Boolean;
begin
IniFileName := GetIniFileName;
IniManager := TIniMgr.Create(IniFileName);
MRUManager := TMRUMgr.Create(IniFileName);
ToolsManager := TToolsMgr.Create(IniFileName);
BkmkManager := TBkmkMgr.Create(GetBookmarkFileName);
Application.OnMinimize := AppMinimize;
OptionFrm.LoadOptions;
if Options.AddContextMenu then AddToContentMenu(True);
InitMRUMenuItem;
InitToolsMenuItem;
LoadFormRect;
ShowStatusMsg('');
IsWin9598 := CheckWindows9598;
ToolDiskReadItem.Enabled := IsWin9598;
ToolDiskWriteItem.Enabled := IsWin9598;
end;
procedure TMHMainForm.FormActivate(Sender: TObject);
const
First: Boolean = True;
begin
if First then
begin
First := False;
TimerTimer(nil);
if not DoParam then
if Options.AutoShowOpen then OpenActExecute(nil);
if Options.ShowDataInsp then ShowDataInsp(True);
end;
end;
procedure TMHMainForm.FormShow(Sender: TObject);
begin
//
end;
procedure TMHMainForm.FormDestroy(Sender: TObject);
begin
SaveFormRect;
IniManager.Free;
MRUManager.Free;
ToolsManager.Free;
BkmkManager.Free;
GlobalDeleteAtom(CheckPreInsAtom);
end;
procedure TMHMainForm.FormResize(Sender: TObject);
begin
StatusBar.Panels[0].Width := StatusBar.Width - 115;
end;
procedure TMHMainForm.NewActExecute(Sender: TObject);
var
Frm: THexChForm;
BufSize: Integer;
begin
BufSize := 1024;
if ShowSetSizeForm(BufSize, '新建', '长度(字节):') then
begin
Frm := THexChForm.Create(Self);
Frm.Caption := DefaultFileName;
if not Frm.NewBuf(BufSize) then Frm.Free;
end;
end;
procedure TMHMainForm.OpenActExecute(Sender: TObject);
var
i: Integer;
begin
if OpenFileDialog.Execute then
begin
for i := 0 to OpenFileDialog.Files.Count - 1 do
begin
OpenFile(OpenFileDialog.Files[i]);
end;
end;
end;
procedure TMHMainForm.SaveActExecute(Sender: TObject);
var
Frm: THexChForm;
begin
Frm := GetCurDoc;
if Frm <> nil then Frm.Save;
end;
procedure TMHMainForm.SaveAllActExecute(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Self.MDIChildCount - 1 do
begin
if Self.MDIChildren[i] is THexChForm then
(Self.MDIChildren[i] as THexChForm).Save;
end;
end;
procedure TMHMainForm.SaveAsActExecute(Sender: TObject);
var
Frm: THexChForm;
begin
Frm := GetCurDoc;
if Frm <> nil then Frm.SaveAs;
end;
procedure TMHMainForm.CloseActExecute(Sender: TObject);
var
Frm: THexChForm;
begin
Frm := GetCurDoc;
if Frm <> nil then Frm.Close;
end;
procedure TMHMainForm.CloseAllActExecute(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Self.MDIChildCount - 1 do
begin
if Self.MDIChildren[i] is THexChForm then
(Self.MDIChildren[i] as THexChForm).Close;
end;
end;
procedure TMHMainForm.ExecuteActExecute(Sender: TObject);
var
Frm: THexChForm;
begin
Frm := GetCurDoc;
if Frm = nil then Exit;
Frm.Execute;
end;
procedure TMHMainForm.EditorActExecute(Sender: TObject);
var
Frm: THexChForm;
begin
Frm := GetCurDoc;
if Frm = nil then Exit;
Frm.OpenWidthEditor;
end;
procedure TMHMainForm.PropertyActExecute(Sender: TObject);
var
Frm: THexChForm;
begin
Frm := GetCurDoc;
if Frm <> nil then
begin
ShowFilePropForm(Frm.FileName);
end;
end;
procedure TMHMainForm.PrintActExecute(Sender: TObject);
var
Frm: THexChForm;
begin
Frm := GetCurDoc;
if Frm = nil then Exit;
Frm.Print;
end;
procedure TMHMainForm.FilePrintSetupItemClick(Sender: TObject);
begin
try
PrinterSetupDialog.Execute;
except
MessageBox(Application.Handle, '无法进行打印机设置,请检查是否安装了打印机。', '错误', 16);
end;
end;
procedure TMHMainForm.ExportActExecute(Sender: TObject);
var
Frm: THexChForm;
begin
Frm := GetCurDoc;
if Frm = nil then Exit;
Frm.ExportToText;
end;
procedure TMHMainForm.OpenFolderActExecute(Sender: TObject);
var
Path: string;
Ok: Boolean;
SR: TSearchRec;
Done: Integer;
begin
Path := '';
Ok := SelectDir(Handle, '请选择一个文件夹:', '', Path);
if Ok then
begin
Path := AddDirSuffix(Path);
Done := FindFirst(Path + '*.*', faAnyFile - faDirectory - faVolumeID, SR);
while Done = 0 do
begin
OpenFile(Path + SR.Name);
Done := FindNext(SR);
end;
FindClose(SR);
end;
end;
procedure TMHMainForm.QuitActExecute(Sender: TObject);
begin
Close;
end;
procedure TMHMainForm.OptionsActExecute(Sender: TObject);
begin
ShowOptionForm(0);
end;
procedure TMHMainForm.ToolsMgrActExecute(Sender: TObject);
begin
ShowToolsMgrForm;
InitToolsMenuItem;
end;
procedure TMHMainForm.WinMgrActExecute(Sender: TObject);
begin
ShowWinMgrForm;
end;
procedure TMHMainForm.WinCascActExecute(Sender: TObject);
begin
Self.Cascade;
end;
procedure TMHMainForm.WinHoriTileActExecute(Sender: TObject);
begin
Self.TileMode := tbHorizontal;
Self.Tile;
end;
procedure TMHMainForm.WinVertTileActExecute(Sender: TObject);
begin
Self.TileMode := tbVertical;
Self.Tile;
end;
procedure TMHMainForm.WinArrangeActExecute(Sender: TObject);
begin
Self.ArrangeIcons;
end;
procedure TMHMainForm.WinBestActExecute(Sender: TObject);
var
i: Integer;
Frm: THexChForm;
begin
Self.Cascade;
for i := 0 to Self.MDIChildCount - 1 do
begin
if Self.MDIChildren[i] is THexChForm then
begin
Frm := Self.MDIChildren[i] as THexChForm;
Frm.SetBestSize;
end;
end;
end;
procedure TMHMainForm.HelpContentActExecute(Sender: TObject);
begin
ShowHelp;
end;
procedure TMHMainForm.HelpGPLItemClick(Sender: TObject);
begin
Application.HelpContext(101);
end;
procedure TMHMainForm.AboutActExecute(Sender: TObject);
begin
ShowAboutForm;
end;
procedure TMHMainForm.HelpHomePageItemClick(Sender: TObject);
begin
ShellExecute(Handle, 'Open', 'http://haoxg.yeah.net', '', '', 1);
end;
procedure TMHMainForm.HelpEmailItemClick(Sender: TObject);
var
S: string;
begin
S := 'About ' + MINIHEX_VERSION_INFO;
ShellExecute(Handle, 'Open', PChar('mailto:haoxg@21cn.com?subject="' + S + '"'), '', '', 1);
end;
procedure TMHMainForm.ViewToolBarItemClick(Sender: TObject);
begin
ShowToolBar(not ViewToolBarItem.Checked);
end;
procedure TMHMainForm.ViewStatusBarItemClick(Sender: TObject);
begin
ShowStatusBar(not ViewStatusBarItem.Checked);
end;
procedure TMHMainForm.DataInspectorActExecute(Sender: TObject);
begin
ShowDataInsp(not ViewDataInspItem.Checked);
end;
procedure TMHMainForm.OnTopActExecute(Sender: TObject);
begin
SetOnTop(not OnTopAct.Checked);
end;
procedure TMHMainForm.ToolFileSplitItemClick(Sender: TObject);
begin
ShowFileSplitForm;
end;
procedure TMHMainForm.ToolFileCombinItemClick(Sender: TObject);
begin
ShowFileCombinForm;
end;
procedure TMHMainForm.ToolDiskReadItemClick(Sender: TObject);
var
Frm: THexChForm;
Data: TDiskIOData;
begin
if ShowDiskIOForm(True, Data) then
begin
Frm := THexChForm.Create(Self);
Frm.Caption := UpperCase(Data.Drive + ': 扇区 ' + IntToStr(Data.FromSector) + ' - ' + IntToStr(Data.FromSector+Data.SectorCount-1));
if not Frm.LoadFromDiskSector(Data.Drive, Data.FromSector, Data.SectorCount) then
begin
Frm.Free;
MessageBox(Handle, '读磁盘扇区失败。', '错误', 48);
end;
end;
end;
procedure TMHMainForm.ToolDiskWriteItemClick(Sender: TObject);
var
Frm: THexChForm;
Data: TDiskIOData;
R: Integer;
begin
Frm := GetCurDoc;
if Frm = nil then Exit;
if ShowDiskIOForm(False, Data) then
begin
if Options.AskWriteSector then
begin
R := MessageBox(Handle, '将数据写入磁盘有可能导致磁盘损坏,继续吗?', '警告', 36+256);
if R = ID_NO then Exit;
end;
if not Frm.SaveToDiskSector(Data.Drive, Data.FromSector) then
MessageBox(Handle, '写磁盘扇区失败。', '错误', 48);
end;
end;
procedure TMHMainForm.ToolCMOSReadItemClick(Sender: TObject);
var
Frm: THexChForm;
DataSize: Integer;
begin
DataSize := CMOS_DEFAULT_DATASIZE;
if ShowSetSizeForm(DataSize, 'CMOS数据长度', 'CMOS数据长度(字节):') then
begin
Frm := THexChForm.Create(Self);
Frm.Caption := 'CMOS';
Frm.LoadFromCMOS(DataSize);
end;
end;
procedure TMHMainForm.ToolCMOSWriteItemClick(Sender: TObject);
var
Frm: THexChForm;
R: Integer;
begin
Frm := GetCurDoc;
if Frm = nil then Exit;
if Options.AskWriteCMOS then
begin
R := MessageBox(Handle, '将数据写入CMOS有可能导致CMOS数据损坏,继续吗?', '警告', 36+256);
if R = ID_NO then Exit;
end;
Frm.SaveToCMOS;
end;
procedure TMHMainForm.ToolCMOSBackupItemClick(Sender: TObject);
begin
ShowBackupCMOSForm;
end;
procedure TMHMainForm.ToolCMOSRestoreItemClick(Sender: TObject);
begin
ShowRestoreCMOSForm;
end;
procedure TMHMainForm.ToolBkmkMgrItemClick(Sender: TObject);
begin
ShowBkmkMgrForm;
end;
procedure TMHMainForm.ToolRadixConvItemClick(Sender: TObject);
begin
ShowRadixConvForm;
end;
procedure TMHMainForm.ToolDecHexTableItemClick(Sender: TObject);
begin
ShowDecHexForm;
end;
procedure TMHMainForm.ToolASCIITableItemClick(Sender: TObject);
begin
ShowAsciiForm;
end;
procedure TMHMainForm.ToolCalItemClick(Sender: TObject);
begin
WinExec('Calc.exe', SW_SHOW);
end;
procedure TMHMainForm.TimerTimer(Sender: TObject);
var
Frm: THexChForm;
begin
ShowKeyState;
Frm := GetCurDoc;
if Frm <> nil then
begin
Frm.FlashCursor;
end else
begin
DataInspForm.SetData(nil, 0);
end;
end;
procedure TMHMainForm.FileMRU1ItemClick(Sender: TObject);
var
FileName: string;
MenuItem: TMenuItem;
begin
MenuItem := Sender as TMenuItem;
FileName := MRUManager.Items[MenuItem.Tag - 1];
OpenFile(FileName);
end;
procedure TMHMainForm.STPopupShowMainWinItemClick(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_SHOW);
SysTray.Active := False;
Application.Restore;
end;
procedure TMHMainForm.SysTrayIconMouseDown(Sender: TObject;
Button: TMouseButton; X, Y: Integer);
begin
if Button = mbLeft then
begin
STPopupShowMainWinItemClick(nil);
end;
end;
procedure TMHMainForm.CutToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.DoCut;
end;
procedure TMHMainForm.CopyToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.DoCopy;
end;
procedure TMHMainForm.PasteToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.DoPaste;
end;
procedure TMHMainForm.UndoToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.Undo;
end;
procedure TMHMainForm.RedoToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.Redo;
end;
procedure TMHMainForm.SearchToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.DoSearch;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -