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

📄 mainfrm.pas

📁 === === === MiniHex 1.61 源程序说明 ============================== “$(MiniHex)Source”目录中的所有
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Menus, ComCtrls, ToolWin, ActnList,
  ImgList, ShellApi, Registry, ChildFrm, SysTray, Buttons;

const
  DefaultWinWidth = 645;       // 缺省窗体宽度
  DefaultWinHeight = 460;      // 缺省窗体高度
  PageButtonWidth = 100;       // PageButton 的宽度
  PageButtonHeight = 18;       // PageButton 的高度

  WM_OPENFILE = WM_USER + 1;

type
  TMainForm = class(TForm)
    StatusBar: TStatusBar;
    ActionList: TActionList;
    OpenAction: TAction;
    MainMenu: TMainMenu;
    FileMenu: TMenuItem;
    FileNewItem: TMenuItem;
    ImageList: TImageList;
    NewAction: TAction;
    FileOpenItem: TMenuItem;
    HelpContentAction: TAction;
    AboutAction: TAction;
    HelpMenu: TMenuItem;
    HelpContentItem: TMenuItem;
    HelpAboutItem: TMenuItem;
    OpenFileDialog: TOpenDialog;
    SaveAction: TAction;
    SaveAsAction: TAction;
    ExecuteAction: TAction;
    PropertyAction: TAction;
    PrintAction: TAction;
    OpenFolderAction: TAction;
    QuitAction: TAction;
    FileN1Item: TMenuItem;
    FileSaveItem: TMenuItem;
    FileSaveAsItem: TMenuItem;
    FileExecuteItem: TMenuItem;
    FilePropertyItem: TMenuItem;
    FilePrintItem: TMenuItem;
    FileOpenFolderItem: TMenuItem;
    FileN4Item: TMenuItem;
    FileQuitItem: TMenuItem;
    FileN5Item: TMenuItem;
    ViewMenu: TMenuItem;
    ViewToolBarItem: TMenuItem;
    ViewStatusBarItem: TMenuItem;
    ViewN2Item: TMenuItem;
    ViewOnTopItem: TMenuItem;
    ToolMenu: TMenuItem;
    WindowMenu: TMenuItem;
    WinMgrItem: TMenuItem;
    WinMgrAction: TAction;
    WinCascAction: TAction;
    WinHoriTileAction: TAction;
    WinArrangeAction: TAction;
    WinCascItem: TMenuItem;
    WinTileItem: TMenuItem;
    WinArrangeItem: TMenuItem;
    WinN1Item: TMenuItem;
    CloseAction: TAction;
    FileCloseItem: TMenuItem;
    OptionsAction: TAction;
    ToolOptionsItem: TMenuItem;
    HelpHomePageItem: TMenuItem;
    HelpEmailItem: TMenuItem;
    HelpN1Item: TMenuItem;
    ToolN3Item: TMenuItem;
    ToolFileSplitItem: TMenuItem;
    ToolFileCombinItem: TMenuItem;
    ToolN1Item: TMenuItem;
    ToolDiskReadItem: TMenuItem;
    ToolDiskWriteItem: TMenuItem;
    ToolN2Item: TMenuItem;
    ToolNumBaseConvItem: TMenuItem;
    ToolCalItem: TMenuItem;
    ToolDecHexTableItem: TMenuItem;
    ToolASCIITableItem: TMenuItem;
    FileMRU1Item: TMenuItem;
    FileMRU2Item: TMenuItem;
    FileMRU3Item: TMenuItem;
    FileMRU4Item: TMenuItem;
    OnTopAction: TAction;
    ExportAction: TAction;
    E1: TMenuItem;
    CloseAllAction: TAction;
    L1: TMenuItem;
    FileN6Item: TMenuItem;
    SaveAllAction: TAction;
    V1: TMenuItem;
    FileN3Item: TMenuItem;
    SaveDialog: TSaveDialog;
    ToolBkmkMgrItem: TMenuItem;
    DataInspectorAction: TAction;
    ViewDataInspItem: TMenuItem;
    FilePrintSetupItem: TMenuItem;
    PrinterSetupDialog: TPrinterSetupDialog;
    EditorAction: TAction;
    FileEditorItem: TMenuItem;
    FileN8Item: TMenuItem;
    ViewN1Item: TMenuItem;
    ViewLanguageItem: TMenuItem;
    ViewLangAutoItem: TMenuItem;
    ViewLangChineseItem: TMenuItem;
    ViewLangEnglishItem: TMenuItem;
    SysTray: TSysTray;
    SysTrayPopupMenu: TPopupMenu;
    STPopupHelpItem: TMenuItem;
    STPopupAboutItem: TMenuItem;
    STPopupQuitItem: TMenuItem;
    STPopupN2Item: TMenuItem;
    STPopupShowMainWinItem: TMenuItem;
    STPopupN1Item: TMenuItem;
    ToolN4Item: TMenuItem;
    ToolToolsItem: TMenuItem;
    ToolToolsN1Item: TMenuItem;
    ToolToolsMgrItem: TMenuItem;
    T1: TMenuItem;
    WinVertTileAction: TAction;
    ToolsMgrAction: TAction;
    ToolDiskToolItem: TMenuItem;
    TopSplitterPanel: TPanel;
    CoolBar: TCoolBar;
    ToolBar: TToolBar;
    NewToolButton: TToolButton;
    OpenToolButton: TToolButton;
    SaveToolButton: TToolButton;
    ToolButton6: TToolButton;
    PropToolButton: TToolButton;
    PrintToolButton: TToolButton;
    SearchToolButton: TToolButton;
    ToolButton10: TToolButton;
    CutToolButton: TToolButton;
    CopyToolButton: TToolButton;
    PasteToolButton: TToolButton;
    ToolButton12: TToolButton;
    UndoToolButton: TToolButton;
    RedoToolButton: TToolButton;
    ToolButton15: TToolButton;
    OnTopToolButton: TToolButton;
    ToolButton1: TToolButton;
    OptionToolButton: TToolButton;
    CalcToolButton: TToolButton;
    ToolButton22: TToolButton;
    CascToolButton: TToolButton;
    TileHoriToolButton: TToolButton;
    TileVertToolButton: TToolButton;
    ToolButton5: TToolButton;
    HelpContentToolButton: TToolButton;
    FileN7Item: TMenuItem;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    PageHeaderScroller: TPageScroller;
    PageHeaderPanel: TPanel;
    ViewPageHeaderItem: TMenuItem;
    ViewN3Item: TMenuItem;
    HelpN2Item: TMenuItem;
    GotoToolButton: TToolButton;
    procedure NewActionExecute(Sender: TObject);
    procedure OpenActionExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure SaveActionExecute(Sender: TObject);
    procedure SaveAsActionExecute(Sender: TObject);
    procedure CloseActionExecute(Sender: TObject);
    procedure ExecuteActionExecute(Sender: TObject);
    procedure PropertyActionExecute(Sender: TObject);
    procedure PrintActionExecute(Sender: TObject);
    procedure OpenFolderActionExecute(Sender: TObject);
    procedure QuitActionExecute(Sender: TObject);
    procedure OptionsActionExecute(Sender: TObject);
    procedure WinMgrActionExecute(Sender: TObject);
    procedure WinCascActionExecute(Sender: TObject);
    procedure WinHoriTileActionExecute(Sender: TObject);
    procedure WinArrangeActionExecute(Sender: TObject);
    procedure HelpContentActionExecute(Sender: TObject);
    procedure AboutActionExecute(Sender: TObject);
    procedure HelpHomePageItemClick(Sender: TObject);
    procedure HelpEmailItemClick(Sender: TObject);
    procedure ViewToolBarItemClick(Sender: TObject);
    procedure ViewStatusBarItemClick(Sender: TObject);
    procedure OnTopActionExecute(Sender: TObject);
    procedure ToolFileSplitItemClick(Sender: TObject);
    procedure ToolFileCombinItemClick(Sender: TObject);
    procedure ToolDiskReadItemClick(Sender: TObject);
    procedure ToolDiskWriteItemClick(Sender: TObject);
    procedure ToolNumBaseConvItemClick(Sender: TObject);
    procedure ToolDecHexTableItemClick(Sender: TObject);
    procedure ToolASCIITableItemClick(Sender: TObject);
    procedure ToolCalItemClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FileMRU1ItemClick(Sender: TObject);
    procedure CloseAllActionExecute(Sender: TObject);
    procedure ExportActionExecute(Sender: TObject);
    procedure SaveAllActionExecute(Sender: TObject);
    procedure ToolBkmkMgrItemClick(Sender: TObject);
    procedure DataInspectorActionExecute(Sender: TObject);
    procedure FilePrintSetupItemClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure EditorActionExecute(Sender: TObject);
    procedure STPopupShowMainWinItemClick(Sender: TObject);
    procedure WinVertTileActionExecute(Sender: TObject);
    procedure CutToolButtonClick(Sender: TObject);
    procedure CopyToolButtonClick(Sender: TObject);
    procedure PasteToolButtonClick(Sender: TObject);
    procedure UndoToolButtonClick(Sender: TObject);
    procedure RedoToolButtonClick(Sender: TObject);
    procedure SearchToolButtonClick(Sender: TObject);
    procedure ToolsMgrActionExecute(Sender: TObject);
    procedure SysTrayIconMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PageHeaderScrollerResize(Sender: TObject);
    procedure ViewPageHeaderItemClick(Sender: TObject);
    procedure GotoToolButtonClick(Sender: TObject);
  private
    { Private declarations }
    FAppMinimized: Boolean;

    procedure ShowToolBar(Value: Boolean = True);
    procedure ShowStatusBar(Value: Boolean = True);
    procedure ShowPageHeader(Value: Boolean = True);
    procedure ShowDataInsp(Value: Boolean = True);
    procedure SetOnTop(Value: Boolean = True);

    procedure ShowKeyState;

    procedure InitMRUMenuItem;
    procedure InitToolsMenuItem;
    procedure SaveFormRect;
    procedure LoadFormRect;
    function DoParam: Boolean;
    function FindChildForm(const FileName: string): TChildForm;
    function OpenFile(FileName: string): Boolean;
    procedure ShowMDIClientEdge;
    procedure AdjustUIEnabled(Active: Boolean);
    
    procedure AddPageButton(Form: TChildForm; const DisplayName: string);
    procedure DeletePageButton(Form: TChildForm);
    function FindPageButton(Form: TChildForm): TSpeedButton;
    procedure ActivePageButton(Form: TChildForm);
    procedure RenamePageButton(Form: TChildForm);

    procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE;
    procedure WMOpenFile(var Message: TMessage); message WM_OPENFILE;
    procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
    procedure AppMinimize(Sender: TObject);
    procedure AppRestore(Sender: TObject);
    procedure ToolsItemClick(Sender: TObject);
    procedure PageButtonClick(Sender: TObject);
    procedure DoFileDropMessage(var Msg: TMsg; var Handled: Boolean);
  public
    { Public declarations }
    procedure ShowMainWindow;
    procedure AddToContentMenu(Add: Boolean);
    function GetMDIClientRect: TRect;
    function GetCurDoc: TChildForm;
    function GetDocCount: Integer;
    procedure ShowStatusMsg(Msg: string);
    procedure ReDrawAllDoc;
    procedure ChangeMaxUndo(Value: Integer);
    procedure ArrangeForCompare(Form1, Form2: TChildForm);
    
    procedure ChildOpenNotify(Form: TChildForm);
    procedure ChildCloseNotify(Form: TChildForm);
    procedure ChildActiveNotify(Form: TChildForm);
    procedure ChildRenameNotify(Form: TChildForm);
    procedure ChildSaveNotify(Form: TChildForm; AddToMRU: Boolean);
  end;

var
  MainForm: TMainForm;
  CheckPreInsAtom: TAtom; 

implementation

uses
  Global, Misc, PrjMisc, MRUMgr, ToolsMgr, BkmkMgr, SysOptMgr, WinVer,
  OptionFrm, FilePropFrm, NumBaseConvFrm, SetSizeFrm, DecHexFrm,
  AsciiFrm, BkmkMgrFrm, WinMgrFrm, DataInspFrm, AboutFrm,
  ToolsMgrFrm, DiskIOFrm, FileSplitFrm, FileCombinFrm;

{$R *.DFM}
{$R Pictures.res}

procedure TMainForm.ShowToolBar(Value: Boolean);
begin
  ToolBar.Visible := Value;
  ViewToolBarItem.Checked := Value;
end;

procedure TMainForm.ShowStatusBar(Value: Boolean);
begin
  StatusBar.Visible := Value;
  ViewStatusBarItem.Checked := Value;
end;

procedure TMainForm.ShowPageHeader(Value: Boolean);
begin
  PageHeaderScroller.Visible := Value;
  ViewPageHeaderItem.Checked := Value;
end;

procedure TMainForm.ShowDataInsp(Value: Boolean);
begin
  ShowDataInspForm(Value);
  if GetCurDoc <> nil then GetCurDoc.FillDataInspector;
  DataInspectorAction.Checked := Value;
  Self.BringToFront;
end;

procedure TMainForm.SetOnTop(Value: Boolean);
begin
  SetStayOnTop(Self, Value);
  OnTopAction.Checked := Value;
end;

procedure TMainForm.ShowKeyState;
var
  Cap, Num, Ins: Boolean;
begin
  Ins := ByteBool(GetKeyState(VK_INSERT) and 1);
  Cap := ByteBool(GetKeyState(VK_CAPITAL) and 1);
  Num := ByteBool(GetKeyState(VK_NUMLOCK) and 1);

  if Ins then StatusBar.Panels[1].Text := 'INS'
  else StatusBar.Panels[1].Text := '';

  if Cap then StatusBar.Panels[2].Text := 'CAP'
  else StatusBar.Panels[2].Text := '';

  if Num then StatusBar.Panels[3].Text := 'NUM'
  else StatusBar.Panels[3].Text := '';
end;

function TMainForm.GetCurDoc: TChildForm;
begin
  if Self.ActiveMDIChild is TChildForm then
    Result := Self.ActiveMDIChild as TChildForm
  else
    Result := nil;
end;

function TMainForm.GetDocCount: Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := 0 to Self.MDIChildCount - 1 do
  begin
    if Self.MDIChildren[I] is TChildForm then
      Inc(Result);
  end;
end;

procedure TMainForm.InitMRUMenuItem;
var
  I: Integer;
  MenuItem: TMenuItem;
begin
  for I := 1 to MRUManager.Items.Count do
  begin
    MenuItem := FindComponent('FileMRU' + IntToStr(I) + 'Item') as TMenuItem;
    MenuItem.Caption := '&' + IntToStr(MenuItem.Tag) + ' ' + MRUManager.GetDisplayString(I - 1);
    MenuItem.Visible := True;
  end;
  FileN5Item.Visible := MRUManager.Items.Count > 0;
end;

procedure TMainForm.InitToolsMenuItem;
var
  I: Integer;
  MenuItem: TMenuItem;
begin
  I := 0;
  while I < ToolToolsItem.Count do
  begin
    MenuItem := ToolToolsItem.Items[I];
    if MenuItem.Tag <> -1 then
      ToolToolsItem.Delete(I)
    else
      Inc(I);
  end;

  for I := 0 to High(ToolsManager.Items) do
  begin
    MenuItem := TMenuItem.Create(Self);
    ToolToolsItem.Insert(I, MenuItem);
    MenuItem.Tag := I;
    MenuItem.Caption := ToolsManager.Items[I].Title;
    MenuItem.OnClick := ToolsItemClick;
    if I < 9 then
      MenuItem.ShortCut := ShortCut(Word(Ord('1')+I), [ssAlt]);
  end;
  ToolToolsN1Item.Visible := Length(ToolsManager.Items) > 0;
end;

procedure TMainForm.SaveFormRect;
var
  R: TRect;
begin
  if WindowState = wsMaximized then
    R := Screen.WorkAreaRect else
    R := BoundsRect;
  OptMgr.Values[SOptWinLeft] := R.Left;
  OptMgr.Values[SOptWinTop] := R.Top;
  OptMgr.Values[SOptWinRight] := R.Right;
  OptMgr.Values[SOptWinBottom] := R.Bottom;
end;

procedure TMainForm.LoadFormRect;
var
  DefRect, R: TRect;
begin
  DefRect.Left := (Screen.Width - DefaultWinWidth) div 2;
  DefRect.Top := (Screen.Height - DefaultWinHeight) div 2;
  DefRect.Right := DefRect.Left + DefaultWinWidth;
  DefRect.Bottom := DefRect.Top + DefaultWinHeight;

  if OptMgr.Values[SOptSaveWinSize] then
  begin
    R.Left := OptMgr.Values[SOptWinLeft];
    R.Top := OptMgr.Values[SOptWinTop];
    R.Right := OptMgr.Values[SOptWinRight];
    R.Bottom := OptMgr.Values[SOptWinBottom];
    if (R.Right - R.Left > Screen.Width) or (R.Bottom - R.Top > Screen.Height) then
      FillChar(R, SizeOf(R), 0);
    if (R.Left >= R.Right) or (R.Top >= R.Bottom) then
      R := DefRect;
    BoundsRect := R;
    MakeFullyVisible;
  end else
  begin
    BoundsRect := DefRect;
  end;
end;

function TMainForm.DoParam: Boolean;
var
  I: Integer;
begin
  for I := 1 to ParamCount do
  begin
    OpenFile(ParamStr(I));
  end;
  Result := (ParamCount >= 1);
end;

function TMainForm.FindChildForm(const FileName: string): TChildForm;
var
  Form: TChildForm;
  I: Integer;
begin

⌨️ 快捷键说明

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