Показать загрузочную запись визуально

Previous  Top  Next

    
 

 

 

Code:

{$S-,R-,B-}

unit uBoot;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs, tlHelp32,  ExtCtrls, FileCtrl, ComCtrls,

StdCtrls, Grids, Menus, shellApi,UFAT, ToolWin;

 

 

type

TForm1 = class(TForm)

   StatusBar1: TStatusBar;

   MainMenu1: TMainMenu;

   Drive1: TMenuItem;

   ScrollBar1: TScrollBar;

   Panel2: TPanel;

   Boot32Grid: TStringGrid;

   procedure Boot32GridDrawCell(Sender: TObject; ACol, ARow: Integer;

     R: TRect; State: TGridDrawState);

   procedure FormCreate(Sender: TObject);

   procedure Boot32GridMouseWheelDown(Sender: TObject;

     Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);

   procedure Boot32GridMouseWheelUp(Sender: TObject;

     Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);

   procedure Boot32GridMouseMove(Sender: TObject; Shift: TShiftState;

     X, Y: Integer);

   procedure Boot32GridClick(Sender: TObject);

   procedure FormResize(Sender: TObject);

protected

private

   { Private declarations }

public

   { Public declarations }

end;

 

 

var

Form1  : TForm1;

 

 

implementation

 

uses Disk;

 

{$R *.DFM}

 

VAR

QP           : LongInt = 14;

MSScrollDown : Boolean = False;

MSScrollUp   : Boolean = False;

 

 

procedure TForm1.Boot32GridDrawCell(Sender: TObject; ACol, ARow: Integer;

R: TRect; State: TGridDrawState);

var

s:string;

cR   : TRect;

rR   : TRect;

rTmp : TRect;

gr  :TGridRect;

i,j:Byte;

begin

with Boot32Grid.Canvas do

begin

if (aRow<qp) then

   r:=rect(r.left,r.top,r.right,r.bottom+1);

if (aCol<Boot32Grid.colCount-1) then

   r:=rect(r.left,r.top,r.right+1,r.bottom);

s:='';

font.color:=$0;

 

if aRow=0 then

begin

   brush.color:=$D5F5E0;

   pen.color:=$D5F5E0;

   r:=rect(0,r.top,r.Right,r.bottom-1);

   rectangle(r);

   TextOut(r.Left+5,r.Top+2,'Sector');

   TextOut(r.left+70,r.Top+2,'Boot Sector (FAT32)');

end else

if (aRow=1then

begin

   brush.color:=$B9B0E0;

   pen.color:=$B9B0E0;

   r:=rect(0,r.top,r.Right,r.bottom-1);

   rectangle(r);

   TextOut(r.Left+4,r.top+2,'x'+Boot32Grid.Cols[00].Strings[aRow]);

   TextOut(r.Left+70,r.top+2,'Valid Boot Sector');

   pen.color:=$BF;

end else

begin

  pen.Color:=$DFE8FF;

  brush.color:=$DFE8FF;

  font.color:=$0;

  if aRow<=qp then

  begin

    // текст

   case ACol  of

     00: s:= Boot32Grid.Cols[00].Strings[aRow];

     01: s:= Boot32Grid.Cols[01].Strings[aRow];

     02: s:= Boot32Grid.Cols[02].Strings[aRow];

     03: s:= Boot32Grid.Cols[03].Strings[aRow];

     04: s:= Boot32Grid.Cols[04].Strings[aRow];

     05: s:= Boot32Grid.Cols[05].Strings[aRow];

     06: s:= Boot32Grid.Cols[06].Strings[aRow];

     07: s:= Boot32Grid.Cols[07].Strings[aRow];

   end;

 

   if (aCol=0then

   begin

    brush.color:=$FFFFFF;

    pen.Color:=$FFFFFF;

   end;

 

   if (aCol=2) or (aCol=4then

   Begin

     Brush.Color:=$DFECFF;

       pen.Color:=$DFECFF;

//     Font.Color:=$A928FF;

   end;

 

   rectangle(r);

end;

// -------------------- Select -----------------------

if gdSelected in State then

begin

   if (ACol <> 1)and(aCol <> 3) Then

   Begin

    rTmp:=Rect(r.Left+1,r.Top+1,r.Right-2,r.Bottom-1);

    brush.color:=$455D9F;

    Font.Color:=$FFFFFF;

    pen.Color:=$DE81F5;

    rectangle(rTmp);

   end else

   Boot32Grid.Col:=ACol+1;

end;

end;

  textOut(r.left+5,r.top+2,s);

//----------------------------------------------------

  pen.Color:=$B9B0E0;

if (aRow>=2) and ((aCol = 1)or(aCol = 3)) then

Begin

  moveTo(r.Left,r.Bottom);

  LineTo(R.Left,r.Top-1);

end;

//-----------------------------------------------------

if (aRow=Boot32Grid.RowCount-1then

Begin

  moveTo(r.Left+r.Right,R.Top+Boot32Grid.DefaultRowHeight-1);

  LineTo(r.Left,r.Top+Boot32Grid.DefaultRowHeight-1);

end;

end;

end;

 

 

procedure TForm1.FormCreate(Sender: TObject);

 

 

function AlgStr(Str: string): string;

Var

d,l,i:Byte;

begin

d:=20;

l:=Length(Str);

if l >= 20 then

Begin

  Copy(Str,1,20);

  l:=20;

end;

d:=d-l;

For i:=l to d do

Str:=Str+' ';

Result:='x'+str;

end;

 

Function StrToHexInt(Int,Def:DWORD):String;

Begin

Result:=AlgStr(IntToHex(Int,Def))+IntToStr(Int);

end;

 

Function GetActiveFAT(bsExtFlags:word):String;

Begin

if (bsExtFlags and $40) = 0 then

Result:='Yes (bit 7 clear)' else

Result:='No (bit 7 clear)';

end;

 

Var

P:Pointer;

begin

  Boot32Grid.GridLineWidth:=0;

  Boot32Grid.color:=$DFEFFF;

  ScrollBar1.Max:=1000000000;

  Boot32Grid.Cells[0,01]:=IntToHex(63,8);

  Boot32Grid.Cells[0,02]:=IntToStr(63);

  Boot32Grid.Cells[1,02]:='OEM name:';             Boot32Grid.Cells[3,02]:='Big sectors per FAT:';

  Boot32Grid.Cells[1,03]:='Bytes per sector:';     Boot32Grid.Cells[3,03]:='Active FAT:';

  Boot32Grid.Cells[1,04]:='Sectors per cluster:';  Boot32Grid.Cells[3,04]:='FAT mirrored:';

  Boot32Grid.Cells[1,05]:='Reserved sectors:';     Boot32Grid.Cells[3,05]:='Minor FS version:';

  Boot32Grid.Cells[1,06]:='FATs:';                 Boot32Grid.Cells[3,06]:='Major FS version:';

  Boot32Grid.Cells[1,07]:='Root dir entries:';     Boot32Grid.Cells[3,07]:='1st Root cluster:';

  Boot32Grid.Cells[1,08]:='Sectors on drive:';     Boot32Grid.Cells[3,08]:='FS info sector:';

  Boot32Grid.Cells[1,09]:='Media descriptor:';     Boot32Grid.Cells[3,09]:='Backup Boot sector:';

  Boot32Grid.Cells[1,10]:='Sectors per FAT:';      Boot32Grid.Cells[3,10]:='Physical drive #:';

  Boot32Grid.Cells[1,11]:='Sectors per track:';    Boot32Grid.Cells[3,11]:='Boot record signature:';

  Boot32Grid.Cells[1,12]:='heads:';                Boot32Grid.Cells[3,12]:='Volume serial number:';

  Boot32Grid.Cells[1,13]:='Hidden sectors:';       Boot32Grid.Cells[3,13]:='Volume label:';

  Boot32Grid.Cells[1,14]:='Big sectors on drive:'; Boot32Grid.Cells[3,14]:='File system:';

GetMem(P,512);

  ReadPlysicalSector($0,63,1,P^);

  With PBoot32(P)^ do

  Begin

   Boot32Grid.Cells[2,02]:=bsOemname;                     Boot32Grid.Cells[4,02]:=StrToHexInt(bsFATSz32,8);

   Boot32Grid.Cells[2,03]:=StrToHexInt(bsBytePerSec,4);   Boot32Grid.Cells[4,03]:=StrToHexInt(bsExtFlags and $F,1);

   Boot32Grid.Cells[2,04]:=StrToHexInt(bsSecPerClus,2);   Boot32Grid.Cells[4,04]:=GetActiveFAT(bsExtFlags);

   Boot32Grid.Cells[2,05]:=StrToHexInt(bsRsvdSecCnt,4);   Boot32Grid.Cells[4,05]:=StrToHexInt(hi(bsFSVer),1);

   Boot32Grid.Cells[2,06]:=StrToHexInt(bsNumFATs,2);      Boot32Grid.Cells[4,06]:=StrToHexInt(lo(bsFSVer),1);

   Boot32Grid.Cells[2,07]:=StrToHexInt(bsRootEntCnt,4);   Boot32Grid.Cells[4,07]:=StrToHexInt(bsRootClus,8);

   Boot32Grid.Cells[2,08]:=StrToHexInt(bsToolSec16,4);    Boot32Grid.Cells[4,08]:=StrToHexInt(bsFSInfo,4);

   Boot32Grid.Cells[2,09]:=StrToHexInt(bsMedia,2);        Boot32Grid.Cells[4,09]:=StrToHexInt(bsBkBootSec,4);

   Boot32Grid.Cells[2,10]:=StrToHexInt(bsFATz16,4);       Boot32Grid.Cells[4,10]:=StrToHexInt(bsDrvNum,2);

   Boot32Grid.Cells[2,11]:=StrToHexInt(bsSecPerTrk,4);    Boot32Grid.Cells[4,11]:=StrToHexInt(bsBootSig,2);

   Boot32Grid.Cells[2,12]:=StrToHexInt(bsNumHeads,4);     Boot32Grid.Cells[4,12]:=StrToHexInt(bsVolId,2);

   Boot32Grid.Cells[2,13]:=StrToHexInt(bsHiddSec,8);      Boot32Grid.Cells[4,13]:=bsVolLab;

   Boot32Grid.Cells[2,14]:=StrToHexInt(bsTolSec32,8);     Boot32Grid.Cells[4,14]:=bsFSType;

  end;

FreeMem(P);

end;

 

 

 

 

procedure TForm1.Boot32GridMouseWheelDown(Sender: TObject;

Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);

begin

MSScrollDown:=True;

MSScrollUp:=False;

end;

 

procedure TForm1.Boot32GridMouseWheelUp(Sender: TObject;

Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);

begin

MSScrollUp:=True;

MSScrollDown:=False;

end;

 

procedure TForm1.Boot32GridMouseMove(Sender: TObject;

Shift: TShiftState; X, Y: Integer);

begin

MSScrollUp:=False;

MSScrollDown:=False;

end;

 

procedure TForm1.Boot32GridClick(Sender: TObject);

Var

gr:TGridRect;

begin

 

end;

 

procedure TForm1.FormResize(Sender: TObject);

Var

i,ColsWidth,RowsHeight:Integer;

begin

ColsWidth:=0;

RowsHeight:=0;

With Boot32Grid do

Begin

For i:=0 to ColCount-2 do

  ColsWidth:=ColsWidth+ColWidths[i];

For i:=1 to RowCount-1 do

  RowsHeight:=RowsHeight+RowHeights[i];

ColWidths[ColCount-1]:=Form1.Width-ColsWidth-26;

Height:=RowsHeight;

end;

end;

 

end.