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

📄 unit1.pas

📁 16进制HEX编辑器DELPHI控件源码。
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  FileCtrl, StdCtrls, ExtCtrls, MPHexEditor, MPHexEditorEx, Grids;

type
  TfmHexViewer = class(TForm)
    Panel1: TPanel;
    DriveComboBox1: TDriveComboBox;
    DirectoryListBox1: TDirectoryListBox;
    FileListBox1: TFileListBox;
    MPHexEditor1: TMPHexEditorEx;
    Panel2: TPanel;
    btnPrint: TButton;
    btnFind: TButton;
    procedure FileListBox1Change(Sender: TObject);
    procedure MPHexEditor1InvalidKey(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure btnFindClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmHexViewer: TfmHexViewer;

implementation

uses uprinting, ufinddialog;

{$R *.DFM}

procedure TfmHexViewer.FileListBox1Change(Sender: TObject);
begin
  // load the selected file into the hex editor
  with MPHexEditor1
  do
    if FileName <> FileListBox1.FileName then
    begin
      if not FileExists(FileListBox1.FileName) then
      begin
        CreateEmptyFile('Unnamed');
        btnPrint.Enabled := False;
        btnFind.Enabled := False;
      end
      else
      begin
        LoadFromFile(FileListBox1.FileName);
        btnPrint.Enabled := DataSize > 0;
        btnFind.Enabled := DataSize > 0;
      end;
    end;
end;

procedure TfmHexViewer.MPHexEditor1InvalidKey(Sender: TObject);
begin
  // invalid Key, Beep
  MessageBeep(MB_ICONASTERISK)
end;

procedure TfmHexViewer.FormCreate(Sender: TObject);
begin
  // make sure that MYGRID is not defined in mphexeditor.pas
  Assert(MPHexEditor1 is TCustomGrid);
end;

procedure TfmHexViewer.btnPrintClick(Sender: TObject);
begin
  PrintPreview(MPHexEditor1);
end;

procedure TfmHexViewer.btnFindClick(Sender: TObject);
var
  sData, sTemp: string;
  ct: integer;
begin
  with TDlgFind.Create(Application) do
  try
    if ShowModal = mrOK then
    begin
      sData := edSearch.Text;
      if cbHex.Checked then
      begin
        // text is in hex digit format '0a 0c...', convert to binary
        sTemp := sData;
        SetLength(sData, Length(sTemp) div 2);
        ConvertHexToBin(PChar(sTemp), PChar(sData), Length(sTemp), False, ct);
        // in ct the amount of converted data bytes is stored, now set real
        // length of the converted data
        SetLength(sData, ct);
      end;
      if sData <> '' then
      begin
        // get first position to find (end of selection)
        with MPHexEditor1 do
        begin
          ct := Min(SelStart, SelEnd)+SelCount;
          // prepare find data
          PrepareFindReplaceData(sData, cbIgnoreCase.Checked, not cbHex.Checked);
          // find data
          ct := Find(PChar(sData), Length(sData), ct, DataSize -1,
            cbIgnoreCase.Checked);
          if ct = -1 then
            ShowMessage('Not found.')
          else
          begin
            // select
            SelStart := ct;
            SelEnd := SelStart +Length(sData)-1;
          end;
        end;
      end;
    end;
  finally
    Free;
  end;
end;

end.

⌨️ 快捷键说明

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