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

📄 dechexfrm.pas

📁 MiniHex 1.1 源程序说明 “MiniHex11SrcSource”目录中的所有文件是MiniHex 1.1的主程序; “MiniHex11SrcControls”目录中的是该软件
💻 PAS
字号:
unit DecHexFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, ComCtrls;

type
  TDecHexForm = class(TForm)
    StringGrid: TStringGrid;
    StatusBar: TStatusBar;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure StringGridSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  DecHexForm: TDecHexForm;

procedure ShowDecHexForm;

implementation

{$R *.DFM}

procedure ShowDecHexForm;
begin
  if DecHexForm <> nil then
  begin
    DecHexForm.WindowState := wsNormal;
    DecHexForm.BringToFront;
    Exit;
  end;
  DecHexForm := TDecHexForm.Create(Application);
  DecHexForm.Show;
end;

procedure TDecHexForm.FormCreate(Sender: TObject);
var
  TempCanSelect: Boolean;
begin
  StringGrid.ClientWidth := StringGrid.ColCount * (StringGrid.DefaultColWidth + 1);
  StringGrid.ClientHeight := StringGrid.RowCount * (StringGrid.DefaultRowHeight + 1);
  StringGrid.Left := 0;
  StringGrid.Top := 0;
  ClientWidth := StringGrid.Width;
  ClientHeight := StringGrid.Height + StatusBar.Height;
  StringGridSelectCell(StringGrid, 1, 1, TempCanSelect);
end;

procedure TDecHexForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_ESCAPE then Close;
end;

procedure TDecHexForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  DecHexForm := nil;
end;

procedure TDecHexForm.StringGridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  S: string;
  W, H: Integer;
begin
  W := Rect.Right - Rect.Left + 1;
  H := Rect.Bottom - Rect.Top + 1;
  with Sender as TStringGrid do
  begin
    if ARow = 0 then
    begin
      if ACol > 0 then
      begin
        S := IntToStr(ACol - 1);
        Canvas.TextOut(Rect.Left + W div 2 + Canvas.TextWidth('0') - Canvas.TextWidth(S), Rect.Top + H div 2 - Canvas.TextHeight(S) div 2, S);
      end;
    end else
    begin
      if ACol = 0 then
      begin
        S := IntToStr((ARow-1) * 16);
        Canvas.TextOut(Rect.Right - Canvas.TextWidth(S) - 3, Rect.Top + H div 2 - Canvas.TextHeight(S) div 2, S);
      end else
      begin
        S := IntToHex((ARow - 1) * 16 + ACol - 1, 2);
        Canvas.TextOut(Rect.Left + W div 2 - Canvas.TextWidth(S) div 2, Rect.Top + H div 2 - Canvas.TextHeight(S) div 2, S);
      end;
    end;
  end;
end;

procedure TDecHexForm.StringGridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
  Dec: Integer;
begin
  Dec := (ARow - 1) * 16 + ACol - 1;
  StatusBar.SimpleText := '十进制数:' + Format('%3d', [Dec]) + '   ' +
                          '十六进制数:' + IntToHex(Dec, 2);
end;

end.

⌨️ 快捷键说明

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