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

📄 mainfrm.pas

📁 === === === MiniHex 1.61 源程序说明 ============================== “$(MiniHex)Source”目录中的所有
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  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 + -