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

📄 childfrm.pas

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ImgList, StdActns, ActnList, ShellApi, Clipbrd, ComCtrls,
  Printers, HexEdit, Global;

const
  SDefaultFileName = 'Noname.dat';

type
  TCryptType = (ctGOST);
  TSearchKind = (skNone, skSearchText, skSearchHex, skSearchInt, skSearchFloat, skReplaceText, skReplaceHex);

  TChildForm = class(TForm)
    StatusBar: TStatusBar;
    HexEdit: THexEdit;
    MainMenu: TMainMenu;
    EditMenu: TMenuItem;
    EditUndoItem: TMenuItem;
    EditRedoItem: TMenuItem;
    EditN1Item: TMenuItem;
    EditCutItem: TMenuItem;
    EditCopyItem: TMenuItem;
    EditPasteItem: TMenuItem;
    EditSelAllItem: TMenuItem;
    EditN2Item: TMenuItem;
    EditChgLenItem: TMenuItem;
    EditInsertCharItem: TMenuItem;
    EditN3Item: TMenuItem;
    EditWriteBlockItem: TMenuItem;
    EditAdjustBlockItem: TMenuItem;
    EditDefBlockItem: TMenuItem;
    EditFillBlockItem: TMenuItem;
    B1: TMenuItem;
    EditN4Item: TMenuItem;
    EditConvItem: TMenuItem;
    EditConvCharsetItem: TMenuItem;
    EditConvCryptItem: TMenuItem;
    EditConvCaseItem: TMenuItem;
    SearchMenu: TMenuItem;
    SearchTextItem: TMenuItem;
    SearchHexItem: TMenuItem;
    SearchIntegerItem: TMenuItem;
    SearchFloatItem: TMenuItem;
    SearchN1Item: TMenuItem;
    SearchReplaceTextItem: TMenuItem;
    SearchReplaceHexItem: TMenuItem;
    SearchN2Item: TMenuItem;
    SearchNextItem: TMenuItem;
    SearchFirstItem: TMenuItem;
    SearchN3Item: TMenuItem;
    SearchCompareItem: TMenuItem;
    SearchCompareNextItem: TMenuItem;
    PosMenu: TMenuItem;
    PosGotoOffsetItem: TMenuItem;
    PosN1Item: TMenuItem;
    PosGotoFirstItem: TMenuItem;
    PosGotoEndItem: TMenuItem;
    PosN3Item: TMenuItem;
    PosGotoBlockStartItem: TMenuItem;
    PosGotoBlockEndItem: TMenuItem;
    PosN4Item: TMenuItem;
    PosGotoLineFirstItem: TMenuItem;
    PosGotoLineEndItem: TMenuItem;
    PosN2Item: TMenuItem;
    PosDefBookmarkItem: TMenuItem;
    PosDefBk1Item: TMenuItem;
    PosDefBk2Item: TMenuItem;
    PosDefBk3Item: TMenuItem;
    PosDefBk4Item: TMenuItem;
    PosDefBk5Item: TMenuItem;
    PosDefBk6Item: TMenuItem;
    PosDefBk7Item: TMenuItem;
    PosDefBk8Item: TMenuItem;
    PosDefBk9Item: TMenuItem;
    PosDefBk0Item: TMenuItem;
    PosGotoBookmarkItem: TMenuItem;
    PosGotoBk1Item: TMenuItem;
    PosGotoBk2Item: TMenuItem;
    PosGotoBk3Item: TMenuItem;
    PosGotoBk4Item: TMenuItem;
    PosGotoBk5Item: TMenuItem;
    PosGotoBk6Item: TMenuItem;
    PosGotoBk7Item: TMenuItem;
    PosGotoBk8Item: TMenuItem;
    PosGotoBk9Item: TMenuItem;
    PosGotoBk0Item: TMenuItem;
    ActionList: TActionList;
    UndoAction: TAction;
    RedoAction: TAction;
    CopyAction: TEditCopy;
    CutAction: TEditCut;
    PasteAction: TEditPaste;
    SelAllAction: TAction;
    WriteBlockAction: TAction;
    DeleteBlockAction: TAction;
    FillBlockAction: TAction;
    DefBlockAction: TAction;
    ChgLenAction: TAction;
    InsCharAction: TAction;
    GotoOffsetAction: TAction;
    ViewPopupMenu: TPopupMenu;
    PopupWriteBlockItem: TMenuItem;
    PopupFillBlockItem: TMenuItem;
    PopupN1Item: TMenuItem;
    PopupCutItem: TMenuItem;
    PopupCopyItem: TMenuItem;
    PopupPasteItem: TMenuItem;
    PopupN2Item: TMenuItem;
    PopupInsertCharItem: TMenuItem;
    PopupN3Item: TMenuItem;
    PopupShowNumBaseItem: TMenuItem;
    PopupShowBkmkMgrItem: TMenuItem;
    SaveDialog: TSaveDialog;
    CurValuePopupMenu: TPopupMenu;
    CurValPopup8sItem: TMenuItem;
    CurValPopup8uItem: TMenuItem;
    CurValPopup16sItem: TMenuItem;
    CurValPopup16uItem: TMenuItem;
    CurValPopup32sItem: TMenuItem;
    CurValPopup32uItem: TMenuItem;
    CurValPopupSingleItem: TMenuItem;
    CurValPopupDoubleItem: TMenuItem;
    BlockInfoPopupMenu: TPopupMenu;
    BlkPopupDecItem: TMenuItem;
    BlkPopupHexItem: TMenuItem;
    BlkPopupN1Item: TMenuItem;
    BlkPopupDefBlockItem: TMenuItem;
    BlkPopupN2Item: TMenuItem;
    BlkPopupBlockLenItem: TMenuItem;
    OffsetPopupMenu: TPopupMenu;
    OffPopupDecItem: TMenuItem;
    OffPopupHexItem: TMenuItem;
    OffPopupN1Item: TMenuItem;
    OffPopupGotoItem: TMenuItem;
    LengthPopupMenu: TPopupMenu;
    LenPopupDecItem: TMenuItem;
    LenPopupHexItem: TMenuItem;
    LenPopupN1Item: TMenuItem;
    LenPopupChgLenItem: TMenuItem;
    AdjustBlockAction: TAction;
    PopupN4Item: TMenuItem;
    PopupUndoItem: TMenuItem;
    PopupRedoItem: TMenuItem;
    procedure UndoActionExecute(Sender: TObject);
    procedure RedoActionExecute(Sender: TObject);
    procedure CopyActionExecute(Sender: TObject);
    procedure CutActionExecute(Sender: TObject);
    procedure PasteActionExecute(Sender: TObject);
    procedure SelAllActionExecute(Sender: TObject);
    procedure ChgLenActionExecute(Sender: TObject);
    procedure HexEditCaretMove(Sender: TObject);
    procedure HexEditSelectionChange(Sender: TObject);
    procedure StatusBarMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure HexEditChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure InsCharActionExecute(Sender: TObject);
    procedure WriteBlockActionExecute(Sender: TObject);
    procedure DeleteBlockActionExecute(Sender: TObject);
    procedure FillBlockActionExecute(Sender: TObject);
    procedure DefBlockActionExecute(Sender: TObject);
    procedure AdjustBlockActionExecute(Sender: TObject);
    procedure EditConvCharsetItemClick(Sender: TObject);
    procedure EditConvCryptItemClick(Sender: TObject);
    procedure EditConvCaseItemClick(Sender: TObject);
    procedure SearchTextItemClick(Sender: TObject);
    procedure SearchHexItemClick(Sender: TObject);
    procedure SearchIntegerItemClick(Sender: TObject);
    procedure SearchFloatItemClick(Sender: TObject);
    procedure SearchReplaceTextItemClick(Sender: TObject);
    procedure SearchReplaceHexItemClick(Sender: TObject);
    procedure SearchNextItemClick(Sender: TObject);
    procedure SearchFirstItemClick(Sender: TObject);
    procedure SearchCompareItemClick(Sender: TObject);
    procedure SearchCompareNextItemClick(Sender: TObject);
    procedure CurValPopup8sItemClick(Sender: TObject);
    procedure CurValPopup8uItemClick(Sender: TObject);
    procedure CurValPopup16sItemClick(Sender: TObject);
    procedure CurValPopup16uItemClick(Sender: TObject);
    procedure CurValPopup32sItemClick(Sender: TObject);
    procedure CurValPopup32uItemClick(Sender: TObject);
    procedure CurValPopupSingleItemClick(Sender: TObject);
    procedure CurValPopupDoubleItemClick(Sender: TObject);
    procedure LenPopupDecItemClick(Sender: TObject);
    procedure LenPopupHexItemClick(Sender: TObject);
    procedure OffPopupDecItemClick(Sender: TObject);
    procedure OffPopupHexItemClick(Sender: TObject);
    procedure BlkPopupDecItemClick(Sender: TObject);
    procedure BlkPopupHexItemClick(Sender: TObject);
    procedure BlockInfoPopupMenuPopup(Sender: TObject);
    procedure GotoOffsetActionExecute(Sender: TObject);
    procedure PosGotoFirstItemClick(Sender: TObject);
    procedure PosGotoEndItemClick(Sender: TObject);
    procedure PosGotoBlockStartItemClick(Sender: TObject);
    procedure PosGotoBlockEndItemClick(Sender: TObject);
    procedure PosGotoLineFirstItemClick(Sender: TObject);
    procedure PosGotoLineEndItemClick(Sender: TObject);
    procedure PosDefBkItemClick(Sender: TObject);
    procedure PosGotoBkItemClick(Sender: TObject);
    procedure PosDefBookmarkItemClick(Sender: TObject);
    procedure PosGotoBookmarkItemClick(Sender: TObject);
    procedure PopupShowNumBaseItemClick(Sender: TObject);
    procedure HexEditDblClick(Sender: TObject);
    procedure PopupShowBkmkMgrItemClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure StatusBarResize(Sender: TObject);
  private
    { Private declarations }
    FFileName: string;
    FDisplayName: string;     //显示在页面切换栏上
    FIsNewDoc: Boolean;       //是不是新建的文档
    FShowing: Boolean;        //子窗口是否正显示

    function GetDataSize: Integer;
    function GetDisplayName: string;

    procedure SetLengthNumBase(Value: TNumBase);
    procedure SetOffsetNumBase(Value: TNumBase);
    procedure SetBlockInfoNumBase(Value: TNumBase);
    procedure SetCurValueType(Value: TValueType);

    procedure InitBounds;
    procedure InitEditorAppearance;

    procedure ShowStatusInfo;
    procedure ShowOffset;
    procedure ShowLength;
    procedure ShowBlockInfo;
    procedure ShowCurValue;
    procedure ShowModifyFlag;

    function SaveToFile(const FileName: string): Boolean;
    procedure AdjustUndoRedoEnabled;
    procedure AdjustClipboardEnabled;
    procedure AdjustBlockEnabled;
    function CheckSelExists: Boolean;
    procedure CreateBackup;
  public
    { Public declarations }
    function NewBuffer(Size: Integer): Boolean;
    function LoadFromFile(const FileName: string): Boolean;
    function Save: Boolean;
    function SaveAs: Boolean;
    function Execute: Boolean;
    function OpenWithEditor: Boolean;
    function Print: Boolean;
    function ExportToText: Boolean;
    function LoadFromLogicSector(Drive: Char; SectorStart, SectorCount: Integer): Boolean;
    function SaveToLogicSector(Drive: Char; SectorStart: Integer): Boolean;

    procedure ReDraw;
    procedure FillDataInspector;
    procedure SearchText;
    procedure GotoAddress;
    procedure Undo;
    procedure Redo;

    property FileName: string read FFileName;
    property DisplayName: string read GetDisplayName;
    property DataSize: Integer read GetDataSize;
  end;

var
  ChildForm: TChildForm;

implementation

uses
  Misc, SysOptMgr, OptionFrm, MainFrm, InsCharFrm, SetSizeFrm, AdjBlockFrm,
  DefBlockFrm, FillBlockFrm, GotoOffsetFrm, SearchTextFrm, SearchHexFrm,
  SearchIntFrm, SearchFloatFrm, ReplaceTextFrm, ReplaceHexFrm, ExportFrm,
  ProgressFrm, PrintFrm, ConvCryptFrm, ConvCaseFrm, ConvChrsetFrm, DataCompFrm,
  NumBaseConvFrm, BkmkMgrFrm, DataInspFrm, Gost, Search, Compare, NumBase,
  DiskIO, TransCharset;

var
  SearchMgr: TSearchMgr;           //数据搜索
  CompareMgr: TCompareMgr;         //数据比较

{$R *.dfm}

{ Misc }

procedure ShowWinNoAnimate(Handle: HWnd; CmdShow: Integer);

  function GetAnimation: Boolean;
  var
    Info: TAnimationInfo;
  begin
    Info.cbSize := SizeOf(TAnimationInfo);
    if SystemParametersInfo(SPI_GETANIMATION, SizeOf(Info), @Info, 0) then
      Result := Info.iMinAnimate <> 0 else
      Result := False;
  end;

  procedure SetAnimation(Value: Boolean);
  var
    Info: TAnimationInfo;
  begin
    Info.cbSize := SizeOf(TAnimationInfo);
    BOOL(Info.iMinAnimate) := Value;
    SystemParametersInfo(SPI_SETANIMATION, SizeOf(Info), @Info, 0);
  end;

var
  Animation: Boolean;
begin
  Animation := GetAnimation;
  if Animation then SetAnimation(False);
  ShowWindow(Handle, CmdShow);
  if Animation then SetAnimation(True);
end;

{ TChildForm }

function TChildForm.GetDataSize: Integer;
begin
  Result := HexEdit.DataSize;
end;

function TChildForm.GetDisplayName: string;
begin
  Result := FDisplayName;
end;

procedure TChildForm.SetLengthNumBase(Value: TNumBase);
begin
  LenPopupDecItem.Checked := (Value = raDec);
  LenPopupHexItem.Checked := (Value <> raDec);
  OptMgr.Values[SOptStatusLengthNumBase] := Value;
  ShowLength;
end;

procedure TChildForm.SetOffsetNumBase(Value: TNumBase);
begin
  OffPopupDecItem.Checked := (Value = raDec);
  OffPopupHexItem.Checked := (Value <> raDec);
  OptMgr.Values[SOptStatusOffsetNumBase] := Value;
  ShowOffset;
end;

procedure TChildForm.SetBlockInfoNumBase(Value: TNumBase);
begin
  BlkPopupDecItem.Checked := (Value = raDec);
  BlkPopupHexItem.Checked := (Value <> raDec);
  OptMgr.Values[SOptStatusBlockInfoNumBase] := Value;
  ShowBlockInfo;
end;

procedure TChildForm.SetCurValueType(Value: TValueType);
begin
  CurValPopup8sItem.Checked := (Value = vt8s);
  CurValPopup8uItem.Checked := (Value = vt8u);
  CurValPopup16sItem.Checked := (Value = vt16s);
  CurValPopup16uItem.Checked := (Value = vt16u);
  CurValPopup32sItem.Checked := (Value = vt32s);
  CurValPopup32uItem.Checked := (Value = vt32u);
  CurValPopupSingleItem.Checked := (Value = vtSingle);
  CurValPopupDoubleItem.Checked := (Value = vtDouble);

  OptMgr.Values[SOptStatusCurValueType] := Value;
  ShowCurValue;
end;

procedure TChildForm.InitBounds;
begin
  if MainForm.GetDocCount = 1 then
  begin
    BoundsRect := MainForm.GetMDIClientRect;
    ShowWinNoAnimate(Handle, SW_MAXIMIZE);
  end;
end;

procedure TChildForm.InitEditorAppearance;
begin
  GetEditFontFromOpt(HexEdit.Font);
  HexEdit.Colors.AddressBackColor := OptMgr.Values[SOptAddrBColor];
  HexEdit.Colors.AddressForeColor := OptMgr.Values[SOptAddrFColor];
  HexEdit.Colors.HexBackColor := OptMgr.Values[SOptHexBColor];
  HexEdit.Colors.HexForeColor := OptMgr.Values[SOptHexFColor];
  HexEdit.Colors.CharBackColor := OptMgr.Values[SOptChrBColor];
  HexEdit.Colors.CharForeColor := OptMgr.Values[SOptChrFColor];
  HexEdit.Colors.SelectionBackColor := OptMgr.Values[SOptBlockBColor];
  HexEdit.Colors.SelectionForeColor := OptMgr.Values[SOptBlockFColor];
  HexEdit.Colors.CaretBackColor := OptMgr.Values[SOptCurItemBColor];
  HexEdit.Colors.CaretForeColor := OptMgr.Values[SOptCurItemFColor];
  HexEdit.DrawCharStyle := TDrawCharStyle(OptMgr.Values[SOptDrawCharStyle]);
end;

procedure TChildForm.ShowStatusInfo;
begin
  StatusBar.Panels.BeginUpdate;
  ShowLength;
  ShowOffset;
  ShowBlockInfo;
  ShowCurValue;
  ShowModifyFlag;
  StatusBar.Panels.EndUpdate;
end;

procedure TChildForm.ShowOffset;
var
  S: string;
  Value: Integer;
begin
  Value := HexEdit.Offset;
  S := '偏移: ';
  if OptMgr.Values[SOptStatusOffsetNumBase] = raDec then
    S := S + Format('%10dD', [Value])
  else
    S := S + '  ' + IntToHex(Value, 8) + 'H';
  StatusBar.Panels[1].Text := S;
end;

procedure TChildForm.ShowLength;
var
  S: string;
  Value: Integer;

⌨️ 快捷键说明

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