📄 mainfrm.pas
字号:
InitToolsMenuItem;
LoadFormRect;
ShowStatusMsg('');
AdjustUIEnabled(GetDocCount > 0);
ShowPageHeader(False);
// 做已运行程序的标记
SetProp(Handle, SSoftName, Handle);
end;
procedure TMainForm.FormActivate(Sender: TObject);
const
First: Boolean = True;
begin
if First then
begin
First := False;
if not DoParam then
if OptMgr.Values[SOptAutoShowOpen] then OpenActionExecute(nil);
if OptMgr.Values[SOptShowDataInsp] then ShowDataInsp(True);
end;
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
//
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
SaveFormRect;
MRUManager.Free;
ToolsManager.Free;
BkmkManager.Free;
OptMgr.Save;
GlobalDeleteAtom(CheckPreInsAtom);
end;
procedure TMainForm.FormResize(Sender: TObject);
begin
StatusBar.Panels[0].Width := StatusBar.Width - 115;
end;
procedure TMainForm.NewActionExecute(Sender: TObject);
var
Form: TChildForm;
BufSize: Integer;
begin
BufSize := 1024;
if ShowSetSizeForm(BufSize, '新建', '长度(字节):') then
begin
Form := TChildForm.Create(Self);
Form.Caption := SDefaultFileName;
if Form.NewBuffer(BufSize) then
AddPageButton(Form, Form.DisplayName)
else
Form.Free;
end;
end;
procedure TMainForm.OpenActionExecute(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 TMainForm.SaveActionExecute(Sender: TObject);
var
Form: TChildForm;
begin
Form := GetCurDoc;
if Form <> nil then Form.Save;
end;
procedure TMainForm.SaveAllActionExecute(Sender: TObject);
var
I: Integer;
begin
for I := 0 to Self.MDIChildCount - 1 do
begin
if Self.MDIChildren[I] is TChildForm then
(Self.MDIChildren[I] as TChildForm).Save;
end;
end;
procedure TMainForm.SaveAsActionExecute(Sender: TObject);
var
Form: TChildForm;
begin
Form := GetCurDoc;
if Form <> nil then Form.SaveAs;
end;
procedure TMainForm.CloseActionExecute(Sender: TObject);
var
Form: TChildForm;
begin
Form := GetCurDoc;
if Form <> nil then Form.Close;
end;
procedure TMainForm.CloseAllActionExecute(Sender: TObject);
var
I: Integer;
begin
for I := 0 to Self.MDIChildCount - 1 do
begin
if Self.MDIChildren[I] is TChildForm then
(Self.MDIChildren[I] as TChildForm).Close;
end;
Application.ProcessMessages;
AdjustUIEnabled(GetDocCount > 0);
end;
procedure TMainForm.ExecuteActionExecute(Sender: TObject);
var
Form: TChildForm;
begin
Form := GetCurDoc;
if Form = nil then Exit;
Form.Execute;
end;
procedure TMainForm.EditorActionExecute(Sender: TObject);
var
Form: TChildForm;
begin
Form := GetCurDoc;
if Form = nil then Exit;
Form.OpenWithEditor;
end;
procedure TMainForm.PropertyActionExecute(Sender: TObject);
var
Form: TChildForm;
begin
Form := GetCurDoc;
if Form <> nil then
begin
ShowFilePropForm(Form.FileName);
end;
end;
procedure TMainForm.PrintActionExecute(Sender: TObject);
var
Form: TChildForm;
begin
Form := GetCurDoc;
if Form = nil then Exit;
Form.Print;
end;
procedure TMainForm.FilePrintSetupItemClick(Sender: TObject);
begin
try
PrinterSetupDialog.Execute;
except
MsgBox('无法进行打印机设置,请检查是否安装了打印机。', MB_OK + MB_ICONERROR);
end;
end;
procedure TMainForm.ExportActionExecute(Sender: TObject);
var
Form: TChildForm;
begin
Form := GetCurDoc;
if Form = nil then Exit;
Form.ExportToText;
end;
procedure TMainForm.OpenFolderActionExecute(Sender: TObject);
var
Path: string;
Ok: Boolean;
SR: TSearchRec;
R, Count, Done: Integer;
begin
Path := '';
Ok := SelectDir(Handle, '请选择一个文件夹:', '', Path);
if Ok then
begin
Path := AddDirSuffix(Path);
// 计算文件个数
Count := 0;
Done := FindFirst(Path + '*.*', faAnyFile - faDirectory, SR);
while Done = 0 do
begin
Inc(Count);
Done := FindNext(SR);
end;
FindClose(SR);
if Count >= WarningFileCount then
begin
R := MsgBox(Format('文件夹 “%s” 下包含 %d 个文件,要打开它需要耗费比较长的时间。' + #13 +
'确实要打开这个文件夹吗?', [Path, Count]),
MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2);
if R = ID_NO then Exit;
end;
Done := FindFirst(Path + '*.*', faAnyFile - faDirectory, SR);
while Done = 0 do
begin
OpenFile(Path + SR.Name);
Done := FindNext(SR);
end;
FindClose(SR);
end;
end;
procedure TMainForm.QuitActionExecute(Sender: TObject);
begin
//showmessage(inttostr(integer(winversion)));
Close;
end;
procedure TMainForm.OptionsActionExecute(Sender: TObject);
begin
ShowOptionForm(0);
end;
procedure TMainForm.ToolsMgrActionExecute(Sender: TObject);
begin
ShowToolsMgrForm;
InitToolsMenuItem;
end;
procedure TMainForm.WinMgrActionExecute(Sender: TObject);
begin
ShowWinMgrForm;
end;
procedure TMainForm.WinCascActionExecute(Sender: TObject);
begin
ShowMDIClientEdge;
Self.Cascade;
end;
procedure TMainForm.WinHoriTileActionExecute(Sender: TObject);
begin
ShowMDIClientEdge;
Self.TileMode := tbHorizontal;
Self.Tile;
end;
procedure TMainForm.WinVertTileActionExecute(Sender: TObject);
begin
ShowMDIClientEdge;
Self.TileMode := tbVertical;
Self.Tile;
end;
procedure TMainForm.WinArrangeActionExecute(Sender: TObject);
begin
Self.ArrangeIcons;
end;
procedure TMainForm.HelpContentActionExecute(Sender: TObject);
begin
ShowHelp;
end;
procedure TMainForm.AboutActionExecute(Sender: TObject);
begin
ShowAboutForm;
end;
procedure TMainForm.HelpHomePageItemClick(Sender: TObject);
begin
ShellExecute(Handle, 'Open', PChar(SWebsite), '', '', SW_SHOW);
end;
procedure TMainForm.HelpEmailItemClick(Sender: TObject);
var
S: string;
begin
S := 'About ' + SSoftName + ' ' + SVersion;
ShellExecute(Handle, 'Open', PChar(Format('mailto:%s?subject="%s"', [SEmail, S])), '', '', SW_SHOW);
end;
procedure TMainForm.ViewToolBarItemClick(Sender: TObject);
begin
ShowToolBar(not ViewToolBarItem.Checked);
end;
procedure TMainForm.ViewPageHeaderItemClick(Sender: TObject);
begin
ShowPageHeader(not ViewPageHeaderItem.Checked);
end;
procedure TMainForm.ViewStatusBarItemClick(Sender: TObject);
begin
ShowStatusBar(not ViewStatusBarItem.Checked);
end;
procedure TMainForm.DataInspectorActionExecute(Sender: TObject);
begin
ShowDataInsp(not ViewDataInspItem.Checked);
end;
procedure TMainForm.OnTopActionExecute(Sender: TObject);
begin
SetOnTop(not OnTopAction.Checked);
end;
procedure TMainForm.ToolFileSplitItemClick(Sender: TObject);
begin
ShowFileSplitForm;
end;
procedure TMainForm.ToolFileCombinItemClick(Sender: TObject);
begin
ShowFileCombinForm;
end;
procedure TMainForm.ToolDiskReadItemClick(Sender: TObject);
var
Form: TChildForm;
Data: TDiskIOData;
begin
if ShowDiskIOForm(True, Data) then
begin
Form := TChildForm.Create(Self);
if Form.LoadFromLogicSector(Data.Drive, Data.SectorStart, Data.SectorCount) then
begin
AddPageButton(Form, Form.DisplayName)
end else
begin
Form.Free;
MsgBox('读磁盘扇区失败。', MB_OK + MB_ICONERROR);
end;
end;
end;
procedure TMainForm.ToolDiskWriteItemClick(Sender: TObject);
var
Form: TChildForm;
Data: TDiskIOData;
R: Integer;
begin
Form := GetCurDoc;
if Form = nil then Exit;
if ShowDiskIOForm(False, Data) then
begin
R := MsgBox('将数据写入磁盘有可能导致磁盘损坏,继续吗?',
MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2);
if R = ID_NO then Exit;
if not Form.SaveToLogicSector(Data.Drive, Data.SectorStart) then
MsgBox('写磁盘扇区失败。', MB_OK + MB_ICONERROR);
end;
end;
procedure TMainForm.ToolBkmkMgrItemClick(Sender: TObject);
begin
ShowBkmkMgrForm;
end;
procedure TMainForm.ToolNumBaseConvItemClick(Sender: TObject);
begin
ShowNumBaseConvForm;
end;
procedure TMainForm.ToolDecHexTableItemClick(Sender: TObject);
begin
ShowDecHexForm;
end;
procedure TMainForm.ToolASCIITableItemClick(Sender: TObject);
begin
ShowAsciiForm;
end;
procedure TMainForm.ToolCalItemClick(Sender: TObject);
begin
WinExec('Calc.exe', SW_SHOW);
end;
procedure TMainForm.FileMRU1ItemClick(Sender: TObject);
var
FileName: string;
MenuItem: TMenuItem;
begin
MenuItem := Sender as TMenuItem;
FileName := MRUManager.Items[MenuItem.Tag - 1];
OpenFile(FileName);
end;
procedure TMainForm.STPopupShowMainWinItemClick(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_SHOW);
SysTray.Active := False;
Application.Restore;
end;
procedure TMainForm.SysTrayIconMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
STPopupShowMainWinItemClick(nil);
end;
end;
procedure TMainForm.CutToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.HexEdit.CutToClipboard;
end;
procedure TMainForm.CopyToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.HexEdit.CopyToClipboard;
end;
procedure TMainForm.PasteToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.HexEdit.PasteFromClipboard;
end;
procedure TMainForm.UndoToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.Undo;
end;
procedure TMainForm.RedoToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.Redo;
end;
procedure TMainForm.SearchToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.SearchText;
end;
procedure TMainForm.GotoToolButtonClick(Sender: TObject);
begin
if GetCurDoc <> nil then
GetCurDoc.GotoAddress;
end;
procedure TMainForm.PageHeaderScrollerResize(Sender: TObject);
begin
PageHeaderPanel.Width := GetDocCount * PageButtonWidth;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -