16248

Эмуляция работы программы FDisk

Курсовая

Информатика, кибернетика и программирование

Курсовой проект по по информатике Тема: Эмуляция работы программы FDisk Краткие теоретические сведения. Конструкция HDD Рис. 1 Диск представляет собой круглую металлическую пластину с очень ровной поверхностью покрытую тонким ферро...

Русский

2013-06-20

471 KB

1 чел.

Курсовой проект по по информатике

Тема: Эмуляция работы программы FDisk

Краткие теоретические сведения.

Конструкция HDD

 Рис. 1

Диск представляет собой круглую металлическую пластину с очень ровной

поверхностью, покрытую тонким ферромагнитным слоем. Во многих накопителях используется слой оксида железа (которым покрывается обычная магнитная лента), но новейшие модели жестких дисков работают со слоем кобальта толщиной порядка десяти микрон. Количество дисков может быть различным – от одного до пяти, количество рабочих поверхностей, соответственно, вдвое больше (по две на каждом диске). Последнее (как и материал, использованный для магнитного покрытия) определяет емкость жесткого диска. Магнитные головки считывают и записывают информацию на диски. Цифровая информация преобразуется в переменный электрический ток, поступающий на магнитную головку, а затем передается на магнитный диск, но уже в виде магнитного поля, которое диск может воспринять и «запомнить». Магнитное покрытие диска представляет собой множество мельчайших областей самопроизвольной (спонтанной) намагниченности. Под воздействием внешнего магнитного поля собственные магнитные поля доменов ориентируются в соответствии с его направлением. После прекращения действия внешнего поля на поверхности диска образуются зоны остаточной намагниченности. Таким образом, сохраняется записанная на диск информация. Участки остаточной намагниченности, оказавшись при вращении диска напротив зазора магнитной головки, наводят в ней электродвижущую силу, изменяющуюся в зависимости от величины намагниченности. Пакет дисков, смонтированный на оси-шпинделе, приводится в движение специальным двигателем, компактно расположенным под ним. Головки перемещаются с помощью прецизионного шагового двигателя и как бы «плывут» на расстоянии 0.00005 -  0.0001 милиметра от поверхности диска, не касаясь его. На поверхности дисков в результате записи информации образуются намагниченные участки, в форме концентрических окружностей. Они называются магнитными дорожками. Перемещаясь, головки останавливаются над каждой следующей дорожкой. Совокупность дорожек, расположенных друг под другом на всех поверхностях, называют цилиндром. Все головки накопителя перемещаются одновременно, осуществляя доступ к одноименным цилиндрам с одинаковыми номерами.

Жесткие диски, как и дискеты, разделяются на сектора и дорожки. Сектора имеют сквозную нумерацию, начиная с 1. Их число зависит от интерфейса, используемого для связи с винчестером. Характерная скорость вращения,измеряемая в оборотах в минуту, позволяет косвенно судить о производительности (внутренней скорости). Чем выше скорость вращения, тем больше скорость обмена информацией с диском, но высокие скорости вращения порождают проблемы, связанные с балансировкой, тепловыделением, гироскопическим эффектом и аэродинамикой головок. Сущетвуют следующие характерные скорости вращения: 3600 об/мин, 5400 об/мин, 7200 об/мин, 10000 об/мин, 15000 об/мин. Для магнитных головок весьма критично расстояние от головки до поверхности. Непосредственный контакт между ними допустим лишь при малых скоростях движения носителя. Головки винчестеров поддерживаются на микроскопическом расстоянии от рабочей поверхности аэромической подъемной силой. Высота «полета» головки должна поддерживаться довольно строго, иначе магнитные поля головок будут «промахиваться» мимо рабочего слоя. Высота определяется тем положением, когда подъемная сила, определяемая скоростью вращения, формой «крыла» головки и плотностью воздуха, уравновесит давление прижимающей головку пружины. Емкость диска представляет собой объем хранимой полезной информации – сумму полей данных всех доступных секторов. Указывается для стандартного размера сектора – 512 байт. Емкость находится по следующей формуле – C*H*S*512 байт

Секторы на треке нумеруются последовательно. После того как требуемый сектор прошел под головкой, и его данные попали в контроллер, который проверил их достоверность по контрольному входу, данные из контроллера передаются в память компьютера. После анализа состояния выполнения операции контроллер получает указание на считывание следующего сектора, но он к этому времени уже может пролететь над головкой. Тогда контроллеру придется ждать почти полный оборот диска, пока сектор не подойдет снова. Выходом в такой ситуации является применение чередования секторов(interleaving). Секторы с соседними номерами располагаются не рядом, а через несколько секторов. В современных накопителях со встроенными быстродействующими контроллерами, способными за одну операцию записать или считать все секторы трека, чередование секторов не применяют. Изменение Interleave-фактора возможно только специальными программными средствами и, как следствие, приводит к полной потере данных, так как изменяется логическое разбиение диска.

Interleave 1:1

Interleave 1:3

Для компенсации различной плотности записи используют метод зонно-секционной записи (Zone Bit Recording). Метод заключается в том, что все рабочее пространство магнитного диска делится на зоны: 8 и более. В самой младшей зоне, т. Е. на дорожке, которая расположена дальше всех от центра диска, содержится большее количество секторов. К центру диска количество секторов уменьшается. Поскольку диск вращается с неизменной скоростью, от внешних зон поступает значительно больший объем информации, чем от внутренних. Неравномерность поступления данных компенсируется путем увеличения скорости работы канала считывания/преобразования данных и использования специальных перестраиваемых фильтров. Для частотной коррекции по зонам, а также путем применения производительных однокристальных микроконтроллеров.

Жесткие диски, работающие таким образом, нельзя объявлять в CMOS Setup с их фактическими параметрами (Native Mode). Для этих дисков есть опция, называемая Translation Mode. Ее установка означает, что значение, Указанное в CMOS Setup, пересчитывается контроллером в параметры соответствующих цилиндров и секторов.

Логическая структура диска

С аппаратной точки зрения любой жесткий диск можно представить как совокупность секторов, адресуемых тем или иным способом(CHS или LBA), и каждый сектор может быть записан и считан независимо от других. Но для большинства прикладных программ представляет интерес не обращение к отдельным секторам, а возможность обращения к файлам, которые могут занимать произвольное, в том числе и не целое количество секторов. Для облегчения обращения к файлам и упорядочения использования пространства секторов диска в состав любой операционной системы входит файловая система, тесно связанная с логической структурой диска

Логический диск — это совокупность секторов с последовательно нарастающими номерами. Самый первый сектор логического диска называется загрузочным (boot sector). Если на диске с загрузчиком присутствуют и соответствующие файлы ОС, и эта ОС может быть загружена с него на компьютер, такой диск называется системным.

Существует возможность разбиения жесткого диска на несколько независимых разделов. Разбиение диска на разделы позволяет уменьшить размеры логических дисков, что бывает выгодно из-за ограничений файловых систем. Разбиение винчестера на логические диски используют и для упорядочивания использования дискового пространства.

Как работать с программой

1 Ввод параметров жесткого диска и проверка их на корректность

Далее предусмотрены следующие действия

2 Создание основного раздела

  а) Проверка доступного пространства

  б) Считывание параметров

  в) Проверка на корректность

3 Удаление основного раздела

  а) Проверка существования раздела

  б) Очистка параметров разделу соответствующих

4 Создание расширенного раздела

  а) Проверка доступного пространства

  б) Считывание параметров

  в) Проверка на корректность

5 Удаление расширенного раздела

  а) Проверка существования раздела

  б) Очистка параметров разделу соответствующих

6 Создание логических дисков в расширенном разделе

  а) Проверка доступного пространства

  б) Считывание параметров

  в) Проверка на корректность

7 Удаление логических дисков в расширенном разделе

  а) Проверка существования л. диска

  б) Очистка параметров соответствующих последнему созданному л. Диску

8 Одновременно с пунктами 2-4 на экране выводится состояние диска

  в виде графической диаграммы и таблицы

9 С первой страниц возможно просмотреть таблицу состояний разделов

Пример работы

Рассмотрим логическую организацию физических дисков на следующем примере: Capacity – 80 Gb, Cylinder – 38309, Head – 16,Precomp – 0, Landing Zone – 38308, Sector – 255. На рисунке заштрихованная область соответствует всем неиспользуемым секторам.

Вначале располагается главная загрузочная запись MBR (Master Boot Record), находящаяся в следующем месте — цилиндр 0, головка 0, сектор 1).

В этом секторе расположена программа главного загрузчика ILP0, необходимая для загрузки операционной системы, а за ней имеется таблица разделов, содержащая четыре описателя разделов. Первый байт MBR указывает смещение до программы ILP0. Каждый описатель задает границы разделов, причем в двух системах: CHS (координаты начала и конца) и LBA (начало и длина). Разделы, как правило, начинаются точно по границе цилиндра (координаты N, О, 1), кроме первого, начинающегося обычно с первой головки нулевого цилиндра (О, 1, 1), поскольку под нулевой головкой расположен сектор с MBR. Заканчиваться разделы должны на границе цилиндра, что позволяет через номера конечной головки и конечного сектора определить число головок и секторов на треке.

Тип раздела

Инф-я о разделе

Размер раздела

Начало

Конец

H

C

S

H

C

S

Primary DOS

MBR

1

0

1

16

15300

255

Около 40%

Extended DOS

0

15301

1

16

38309

255

Primary DOS

SMBR1

1

15301

1

16

33700

255

Самый большой

Extended DOS

0

33701

1

16

38309

255

Primary DOS

SMBR2

0

33701

1

16

38309

255

Самый маленький

(для данного примера)

Основной раздел DOS начинается в следующем месте – цилиндр 0, головка 1, сектор 1. Первичный раздел  содержит один логический диск. В первом секторе логического диска находится загрузчик и описатель структуры диска. В каждом описателе  разделов задаются как трехмерные границы раздела (начальные и конечные номера цилиндра, головки и сектора), так и линейные (номер начального сектора и их количество). Расширенный раздел находится в следующем месте: головка 0,цилиндр 801, сектор 1. Первый сектор расширенного раздела аналогичен MBR(но загрузчик отсутствует) и содержит расширенную таблицу разделов, той же структуры, но с некоторыми отличиями. Первый описатель задает вторичный(secondary) раздел, отведенный под очередной логичекий диск; в нем указывается код раздела с файловой системой. В расширенном разделе можно создать любое количество логических дисков. Расширенный раздел не может быть активным, следовательно, логические диски в этом разделе не могут быть использованы для загрузки системы. В этом описателе задаются координаты начала и конца раздела с логическим диском (трехмерные и линейные). Если этот логический занимает не весь объем расширенного раздела, то второй описатель указывает на положение сектора со следующей расширенной таблицей разделов. Часть пространства расширенного раздела может оставаться не распределенной, в дальнейшем она может быть использована под логические диски. По расположению на физическом диске расширенные разделы являются вложенными друг в друга; все они располагаются в области, описанной в главной таблице разделов как расширенный раздел. В главной таблице может быть описан лишь один расширенный раздел.

OS позволяет разбить HDD на части, причём каждая из них будет рассматриваться OS как отдельный «логический» диск.

Разделение большого диска на части полезно:

  •  в случае повреждения логического диска теряется только информация, которая находилась на логическом диске;
  •  реорганизация и выгрузка диска маленького размера выполняется быстрее, чем большого;

на одном физическом диске может находиться несколько различных OS с разной файловой системой, расположенные на различных логических дисках (в разных разделах). В ходе загрузки операционной системы можно указать, с какого раздела должна загружаться OS.

Текст программы (с комментариями):

{Главное окно, содержащее кнопки для перехода к дальнейшим действиям}

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls, ExtCtrls, Buttons, Unit2,Unit3,Unit4, Unit6, Unit5, Unit8,Unit7;

type

   TForm1 = class(TForm)

   Label1: TLabel;

   Panel1: TPanel;

   Label2: TLabel;

   Button1: TButton;

   Button3: TButton;

   Button4: TButton;

   Panel2: TPanel;

   SpeedButton1: TSpeedButton;

   procedure Button3Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure SpeedButton1Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

   private

     procedure wmwindowposchanged(var message:tWMmove); message wm_windowposchanged;

    end;

 Razdel=record  {Запись,используемая для описания основного раздела и логических дисков}

 name:char;           

 metka:string[11];

 size:int64;

 rSize:int64;

 pc:byte;

 stCyl:int64;

 NumCyl:int64;

  end;

{Также здесь описаны большинство переменных используемых в дальнейшей программе}

 var

 Form1: TForm1;

 c:char;

 Nhead,Ncyl,Nsect,sects,disksize:int64;  {Кол-во головок, цилиндров, секторов, размер сектора и всего жесткого диска}

 Prim:Razdel;                                          {Основной раздел} 

 Exten:int64;                                       { Расширенный раздел }

 RExten:int64;                                    {                                       }

 extPc:byte;                                        {                                       }

 extCyl:int64;                                     {                                       }

 LDisks:array[1..23] of razdel;                {Логические диски}

 ePri:boolean;

 eExt:boolean;

 numld:byte;                                        {Кол-во жестких дисков}

  cl:boolean;

  bbb2:boolean;

implementation

procedure tform1.wmwindowposchanged;  {Отслеживает движение формы}

begin

inherited;

if bbb<>false then

if (form8.visible<>false)and(form1.active=true) then begin

form8.left:=form1.left-415;

form8.top:=form1.top;

end ;

end;

procedure TForm1.FormCreate(Sender: TObject); {Задает начальные условия}

begin

eExt:=false;

ePri:=false;

numld:=0;

end;

procedure TForm1.Button3Click(Sender: TObject);  {Переход к окну удалеия раздела или диска}

begin

form1.visible:=false;

form5.visible:=true;

end;

procedure TForm1.Button1Click(Sender: TObject);  {Переход к окну создания раздела или диска}

begin

form1.visible:=false;

form2.visible:=true;

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);  {Выход из программы}

begin

Showmessage ('Для вступления изменений в силу требуется перезагрузить компьютер и отформатировать диски!');

form1.close;

form2.close;

form3.close;

form4.close;

form5.close;

form6.close;

form7.close;

form8.close;

end;

procedure TForm1.Button4Click(Sender: TObject);    {Переход к сведениям о разделах и дисках}

begin

form1.visible:=false;

form6.visible:=true;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); {Выход из программы}

begin

form2.close;

form3.close;

form4.close;

form5.close;

form6.close;

form7.close;

form8.close;

end;

end.

unit Unit2; {В данном модуле содержатся элементы для выбора создаваемого раздела}

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls, ExtCtrls, Buttons, Unit1, Unit3, Unit8;

type

 TForm2 = class(TForm)

   Label1: TLabel;

   SpeedButton1: TSpeedButton;

   Panel1: TPanel;

   Label2: TLabel;

   Button1: TButton;

   Button2: TButton;

   Button3: TButton;

   Panel2: TPanel;

   procedure Button1Click(Sender: TObject);

   procedure SpeedButton1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure FormActivate(Sender: TObject);

 private

    procedure wmwindowposchanged(var message:tWMmove); message wm_windowposchanged;

 end;

var

 Form2: TForm2;

 cr:(pri,ext,log);

 t:int64;  

implementation

procedure tform2.wmwindowposchanged;  {Отслеживает движение формы}

begin

inherited;

if bbb<>false then

if (form8.visible<>false)and(form2.active<>false) then begin

form8.left:=form2.left-415;

form8.top:=form2.top;

end

end;

procedure TForm2.Button1Click(Sender: TObject);      {Переход к созданию основного раздела}

begin

if ePri = true then showmessage ('Основной раздел уже создан!')

else begin

form2.visible:=false;

form3.visible:=true;

cr:=pri;

end

end;

procedure TForm2.Button2Click(Sender: TObject);     {Создание расширенного раздела}

begin

if (diskSize-prim.rsize<Nhead*Nsect*Sects)or(prim.pc=100) then showmessage('Основной раздел занимает все свободное место !') else

if ePri = false then showmessage ('Основной раздел еще не создан!') else

if eExt = true then showmessage ('Расширенный раздел уже создан!')

else begin

form2.visible:=false;

form3.visible:=true;

cr:=ext;

end

end;

procedure TForm2.Button3Click(Sender: TObject);      {Создание логических дисков}

begin

if eext = false then showmessage ('Расширенный раздел еще не создан!') else

if numLD=23 then showmessage('Создано максимальное кол-во логических дисков!') else

if (rexten-t<Nhead*Nsect*Sects)then showmessage('Не хватает места для создания раздела!')

else begin

form2.visible:=false;

form3.visible:=true;

cr:=log;

end

end;

procedure TForm2.SpeedButton1Click(Sender: TObject);     {Возврат к предыдущему окну}

begin

form2.visible:=false;

form1.visible:=true;

end;

procedure TForm2.FormCreate(Sender: TObject);

begin

form2.visible:=false;

end;

procedure TForm2.FormActivate(Sender: TObject); {Считает, сколько места занимают лог. диски}

var i:integer;

begin

t:=0;

for i:=1 to numld do

t:=t+ldisks[i].Rsize;

end; end.

unit Unit3; {Здесь осуществляется создание раздела или лог. диска с указанием его параметров}

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls,Unit1, ExtCtrls, ComCtrls, Unit2, Unit8;

type

 TForm3 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Button1: TButton;

   Button2: TButton;

   RadioGroup1: TRadioGroup;

   RadioButton1: TRadioButton;

   RadioButton2: TRadioButton;

   Edit1: TEdit;

   Edit2: TEdit;

   UpDown1: TUpDown;

   Edit4: TEdit;

   Label3: TLabel;

   procedure Button1Click(Sender: TObject);

   procedure RadioButton2Click(Sender: TObject);

   procedure RadioButton1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Edit2Change(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure FormPaint(Sender: TObject);

 private

  procedure wmwindowposchanged(var message:tWMmove); message wm_windowposchanged;

 end;

var

 Form3: TForm3;

 size,Rsize:int64;

 maxsize:int64;

 sizeP,maxPC:byte;

 pb:boolean;

implementation

procedure tform3.wmwindowposchanged;    {Отслеживает движение формы}

begin

inherited;

if bbb<>false then

if (form8.visible<>false)and(form3.active<>false) then begin

form8.left:=form3.left-415;

form8.top:=form3.top; end

end;

procedure TForm3.Button1Click(Sender: TObject);   {Отказ от создания раздела или лог. диска}

begin

form3.visible:=false;

form2.visible:=true;

end;

{Следующие две процедуры позволяют выбрать способ задания размера(либо в процентах либо в байтах)}

procedure TForm3.RadioButton2Click(Sender: TObject);

begin

edit1.enabled:=false;

edit2.enabled:=true;

UpDown1.Enabled:=true ;

updown1.max:=maxPC;

edit2.Text:=InttoStr(maxPC);

if pb=true then Edit1.text:=inttostr(strtoint(Edit2.text)*(maxSize div maxPc));

if strtoint(edit2.Text)=maxPC then Edit1.text:=IntToStr(MaxSize);

end;

procedure TForm3.RadioButton1Click(Sender: TObject);

begin

edit2.enabled:=false;

edit1.enabled:=true;

UpDown1.Enabled:=false;

end;

{Процедура проверяет правильность задания параметров и затем осуществляет создания раздела}

procedure TForm3.Button2Click(Sender: TObject);

var  succes:boolean;

      i,p:byte;

       t:int64;

begin

succes:=false;

if radiobutton1.checked=true then begin

if edit1.text='' then showmessage ('Введите размер !')

else begin

try

size:=strtoint64(edit1.text);

except

on EConvertError do showmessage ('Неверный формат ввода !');

end;

if (size<33554432)or(size<NHead*Nsect*sects) then showmessage ('Размер раздела не может быть меньше 32 MB!')

else  if size<=maxSize then begin succes:=true;

end else ShowMessage('Неправильнй размер!');

end

end else begin

case cr of

pri:begin

if Strtoint(edit2.text)<100 then size:=Strtoint(edit2.text)* disksize div 100;

if Strtoint(edit2.text)=100 then size:=disksize;

end ;

ext:begin

if Strtoint(edit2.text)<maxPC then size:=Strtoint(edit2.text)* disksize div 100;

if Strtoint(edit2.text)=maxPC then size:=disksize-prim.size;

end ;

log:begin

if Strtoint(edit2.text)<maxPC then size:=Strtoint(edit2.text)* Exten div 100;

if Strtoint(edit2.text)=maxPC then begin

size:=Exten;

for i:=1 to numld do

size:=size-ldisks[i].size;

end

end;

end;

if (size<33554432)or(size<NHead*Nsect*sects) then showmessage ('Размер раздела не может быть меньше 32 MB!')

else succes:=true;

end;

if succes=true then begin

if radiobutton1.checked=true then

rsize:=(size div(Nhead*Nsect*Sects)+1)*(Nhead)*Nsect*Sects

else begin

if size=maxSize then rSize:=size else begin

rsize:=(size div(Nhead*Nsect*Sects))*(Nhead)*Nsect*Sects;

size:=rSize;

end;

end;

case cr of

pri:begin

prim.name:='C';

prim.size:=size;

prim.rsize:=rsize;

prim.metka:=edit4.text;

ePri:=true;

if radiobutton2.checked=true then

prim.pc:=StrToInt(Edit2.text)

else

if prim.rsize<disksize then prim.pc:=rSize div(disksize div 100)

else prim.pc:=100;

prim.stcyl:=0;

prim.NumCyl:=Prim.Rsize div (Nsect*Sects*Nhead);

end;

ext:begin

exten:=size;

rexten:=rsize;

ExtCyl:=Rexten div (Nsect*Sects*Nhead);

if (disksize-prim.rsize)>rexten  then Extpc:=rSize div(disksize div 100)

else Extpc:=100-prim.pc;

eext:=true;

ldisks[1].stCyl:=Prim.numcyl;

end;

log:begin

numld:=numld+1;

lDisks[numld].name:=chr(67+numld);

lDisks[numld].size:=size;

lDisks[numld].rsize:=rsize;

lDisks[numld].metka:=edit4.text;

if numld>1 then begin

lDisks[numld].stcyl:=lDisks[numld-1].NumCyl+lDisks[numld-1].stCyl;

lDisks[numld].NumCyl:=lDisks[numld].rSize div (Nsect*Sects*Nhead);

end else begin

lDisks[numld].stcyl:=prim.NumCyl;

lDisks[numld].NumCyl:=lDisks[numld].rSize div (Nsect*Sects*Nhead);

end ;

t:=0;

p:=0;

if radiobutton2.checked=true then

lDisks[numld].pc:=StrToInt(Edit2.text)

else begin

for i:=1 to numld do begin

t:=t+ldisks[i].Rsize;

if i<numld then p:=p+ldisks[i].pc;

end  ;

if t<rExten then lDisks[numld].pc:=rsize div (rExten div 100)

else lDisks[numld].pc:=100-p;

end;

end;

end;

form3.visible:=false;

form2.visible:=true;

end;

end;

procedure TForm3.Edit2Change(Sender: TObject);

begin

if pb=true then Edit1.text:=inttostr(strtoint(Edit2.text)*(maxSize div maxPc));

if strtoint(edit2.Text)=maxPC then Edit1.text:=IntToStr(MaxSize);

end;

procedure TForm3.FormCreate(Sender: TObject);

begin

pb:=false;

end;

{Процедура отвечает за названия кнопок и заполнение полей в зависимости от того какой раздел создается}

procedure TForm3.FormPaint(Sender: TObject);

var t:int64;

i:byte;

begin

radiobutton1.checked:=true;

maxPc:=0;

case cr of

pri:begin

label1.caption:='       Создание основного раздела';

maxSize:=Disksize;

maxpc:=100;

label2.caption:='         Размер диска:'+inttostr(diskSize)+' байт';

end;

ext:begin

edit4.enabled:=false;

label1.caption:='     Создание расширенного раздела';

maxSize:=Disksize-prim.RSize;

maxpc:=100-prim.pc;

if (Prim.Size>0) and (MaxPc=100) then maxPc:=99;

label2.caption:='         Размер диска:'+inttostr(diskSize)+' байт';

end;

log:begin

edit4.enabled:=true;

label2.caption:='Размер расширенного раздела:'+inttostr(Exten)+' байт';

label1.caption:='         Cоздание логического диска ';

t:=0;

maxPc:=100;

for i:=1 to numld do begin

t:=t+ldisks[i].Rsize;

MaxPc:=Maxpc-ldisks[i].pc;

end;

maxsize:=exten-t;

end;

end;

pb:=true;

end;

end.

unit Unit4; {В данном модуле задаются параметры жесткого диска}

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls ,Unit1, Unit2,Unit8;

type

 TForm4 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label6: TLabel;

   Edit1: TEdit;

   Edit2: TEdit;

   Edit3: TEdit;

   Edit4: TEdit;

   Edit5: TEdit;

   Button1: TButton;

   Label7: TLabel;

   procedure Button1Click(Sender: TObject);

   procedure Edit5Click(Sender: TObject);

 end;

var

 Form4: TForm4;

implementation

procedure TForm4.Button1Click(Sender: TObject); {Проверка правильности ввода и запись данных}

begin

try

Nhead:=strtoint64(edit1.text);

Ncyl:=strtoint64(edit2.text);

Nsect:=strtoint64(edit3.text);

sects:=strtoint64(edit4.text);

if Nhead*Ncyl*Nsect*sects<=2199023255552 then

begin

form4.visible:=false;

form8.visible:=true;

form1.visible:=true;

DiskSize:=Nhead*Ncyl*Nsect*sects;

bbb:=true;

end

else showmessage('Неправильный формат параметров !');

except

on EConvertError do showmessage('Неправильный формат параметров !');

end;

end;

procedure TForm4.Edit5Click(Sender: TObject);  {Считает размер жесткого диска по параметрам}

begin

try

Nhead:=strtoint64(edit1.text);

Ncyl:=strtoint64(edit2.text);

Nsect:=strtoint64(edit3.text);

sects:=strtoint64(edit4.text);

if Nhead*Ncyl*Nsect*sects<=2199023255552 then edit5.text:=inttostr(Nhead*Ncyl*Nsect*sects) else edit5.text:='Ошибка !'

except

on EConvertError do edit5.text:='Ошибка !'

end;

end;

end.

unit Unit5;    {Модуль отвечает за удаление разделов и лог.дисков}

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  StdCtrls, ExtCtrls, Unit1,Unit8;

type

 TForm5 = class(TForm)

   Label1: TLabel;

   Panel1: TPanel;

   Label2: TLabel;

   Button1: TButton;

   Button2: TButton;

   Button3: TButton;

   Label3: TLabel;

   Button4: TButton;

   procedure Button4Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button1Click(Sender: TObject);

 private

   procedure wmwindowposchanged(var message:tWMmove); message wm_windowposchanged;

 end;

var

 Form5: TForm5;

 x:char;

implementation

procedure tform5.wmwindowposchanged;  {Отслеживает движение формы}

begin

inherited;

if bbb<>false then

if (form8.visible<>false)and(form5.active<>false) then begin

form8.left:=form5.left-415;

form8.top:=form5.top;

end

end;

procedure TForm5.Button4Click(Sender: TObject);   {Возврат к предыдущему экрану}

begin

form5.visible:=false;

form1.visible:=true;

end;

procedure TForm5.Button3Click(Sender: TObject);    {Удаление лог. диска}

begin

if numld<>0 then begin

showmessage('Логический диск '+ldisks[numld].name+' был удален!');

ldisks[numld].name:=x;

ldisks[numld].metka:='';

ldisks[numld].rsize:=0;

ldisks[numld].size:=0;

ldisks[numld].pc:=0;

ldisks[numld].numcyl:=0;

ldisks[numld].stcyl:=0;

numld:=numld-1;

end

else showmessage('Все логические диски были удалены!');

form5.visible:=false;

form5.visible:=true;

end;

procedure TForm5.Button2Click(Sender: TObject);  {Удаление доп. раздела}

begin

if eExt=false then showmessage ('Дополнительный раздела не существует!') else

if numld=0 then

begin

showmessage('Дополнительный раздел жесткого диска был удален');

exten:=0;

eExt:=false;

rexten:=0;

extpc:=0;

extcyl:=0;

end else showmessage('В дополнительном разделе остались жесткие диски!');

form5.visible:=false;

form5.visible:=true;

end;

procedure TForm5.Button1Click(Sender: TObject);  {Удаление основного раздела}

begin

if ePri=false then showmessage ('Основного раздела нет !') else

if eExt=false then

begin

showmessage('Основной раздел жесткого диска был удален');

prim.name:=x;

prim.metka:='';

prim.pc:=0;

prim.rsize:=0;

prim.size:=0;

ePri:=false;

prim.numcyl:=0;

prim.stcyl:=0;

end else showmessage('Дополнительный раздел не был удален!');

form5.visible:=false;

form5.visible:=true;

end;

end.

unit Unit6;   {В этом модуле осуществляется вывод таблицы состояния разделов}

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

 Grids, StdCtrls,Unit1,Unit7, Unit8;

type

 TForm6 = class(TForm)

   StringGrid1: TStringGrid;

   Label1: TLabel;

   Label2: TLabel;

   Button1: TButton;

   Button2: TButton;

   procedure FormActivate(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button1Click(Sender: TObject);

 private

    procedure wmwindowposchanged(var message:tWMmove); message wm_windowposchanged;

 end;

var

 Form6: TForm6;

 c:real;

 sost:integer;

implementation

procedure tform6.wmwindowposchanged;  {Отслеживает движение формы}

begin

inherited;

if bbb<>false then

if (form8.visible<>false)and(form6.active<>false) then begin

form8.left:=form6.left-415;

form8.top:=form6.top;

end

end;

procedure sost1;         {Вывод сведений о разделах }

begin

if ePri<>false then begin

form6.StringGrid1.Cells[0,1]:='C:        1';

form6.StringGrid1.Cells[1,1]:='PRI DOS';

form6.StringGrid1.Cells[2,1]:=prim.metka;

form6.StringGrid1.Cells[3,1]:=inttostr(round(prim.size/1048576));

form6.StringGrid1.Cells[4,1]:='      --';

form6.StringGrid1.Cells[5,1]:='          '+inttostr(Prim.pc)+'%';

end else begin

form6.StringGrid1.Cells[0,1]:='';

form6.StringGrid1.Cells[1,1]:='';

form6.StringGrid1.Cells[2,1]:='';

form6.StringGrid1.Cells[3,1]:='';

form6.StringGrid1.Cells[4,1]:='';

form6.StringGrid1.Cells[5,1]:='';

end;

if eExt=true then begin

form6.StringGrid1.Cells[0,2]:='            2';

form6.StringGrid1.Cells[1,2]:='EXT DOS';

form6.StringGrid1.Cells[3,2]:=''+inttostr(round(exten/1048576));

form6.StringGrid1.Cells[5,2]:='          '+inttostr(extPc)+'%';

end else begin

form6.StringGrid1.Cells[0,2]:='';

form6.StringGrid1.Cells[1,2]:='';

form6.StringGrid1.Cells[3,2]:='';

form6.StringGrid1.Cells[5,2]:='';

end;

form6.button1.visible:=false;

form6.stringgrid1.colcount:=6;

form6.stringgrid1.rowcount:=3;

form6.stringgrid1.Cells[0,0]:='Раздел';

form6.stringgrid1.cells[1,0]:='    Тип';

form6.stringgrid1.cells[2,0]:='Том Метка';

form6.stringgrid1.cells[3,0]:='    МБ';

form6.stringgrid1.cells[4,0]:='Система';

form6.stringgrid1.cells[5,0]:='Использование';

c:=(disksize/1048576);

form6.label2.caption:='Объем жесткого диска - ' + inttostr(round(c)) + 'МБ (1МБ=1048576 байт)';

if ldisks[1].name<>'' then form6.button1.visible:=true;

form6.label1.caption:='Вывод сведений о разделах DOS';

sost:=1;

end;

procedure TForm6.FormActivate(Sender: TObject);   {Начальное положение формы}

begin

sost:=0;

sost1;

end;

procedure TForm6.Button2Click(Sender: TObject);  {Возврат к предыдущей форме}

begin

if sost=1 then begin

form6.visible:=false;

form1.visible:=true;

end;

end;

procedure TForm6.Button1Click(Sender: TObject); {Переход к выводу сведений о лог. дисках}

begin

form7.visible:=true;

form6.visible:=false;

end;

end.

unit Unit7; {В данном модуле осуществляется вывод таблицы состояния логических дисков}

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  Grids, StdCtrls, Buttons, Unit6,Unit1, Unit8;

type

 TForm7 = class(TForm)

   Label1: TLabel;

   StringGrid1: TStringGrid;

   BitBtn1: TBitBtn;

   Label2: TLabel;

   procedure FormActivate(Sender: TObject);

   procedure BitBtn1Click(Sender: TObject);

 private

  procedure wmwindowposchanged(var message:tWMmove); message wm_windowposchanged;

  end;

var

 Form7: TForm7;

 n:integer;

implementation

procedure tform7.wmwindowposchanged;  {Отслеживает движение формы}

begin

inherited;

if bbb<>false then

if (form8.visible<>false)and(form7.active<>false) then begin

form8.left:=form7.left-415;

form8.top:=form7.top;

end;

end;

procedure TForm7.FormActivate(Sender: TObject);  {Вывод сведений о лог. дисках}

begin

form7.stringgrid1.refresh;

stringgrid1.Cells[0,0]:='   Диск';

stringgrid1.cells[1,0]:='Том Метка';

stringgrid1.cells[2,0]:='         МБ';

stringgrid1.cells[3,0]:='Система';

stringgrid1.cells[4,0]:='Использование';

label2.caption:='Полный объем дополнительного раздела - ' + inttostr(round(exten/1048576)) + 'МБ (1МБ=1048576 байт)';

stringgrid1.rowcount:=1;

for n:=1 to 23 do

if ldisks[n].name<>'' then begin

stringgrid1.rowcount:=stringgrid1.rowcount+1;

StringGrid1.Cells[0,n]:='   '+ldisks[n].name+':';

StringGrid1.Cells[1,n]:=ldisks[n].metka;

StringGrid1.Cells[2,n]:='       '+inttostr(round(ldisks[n].size/1048576));

StringGrid1.Cells[3,n]:='      --';

StringGrid1.Cells[4,n]:='         '+inttostr(ldisks[n].pc)+'%';

end;

end;

procedure TForm7.BitBtn1Click(Sender: TObject);  {Возврат к предыдущей форме}

begin

form6.visible:=true;

form7.close;

end;

end.

unit Unit8; {Этот модуль выводит состояние жесткого диска в виде таблицы или диаграммы}

interface

uses

 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,  Grids, StdCtrls, Buttons, ExtCtrls, Unit1, Unit6, Unit2, Unit3, Unit5, Unit7;

type

 TForm8 = class(TForm)

   StringGrid1: TStringGrid;

   SpeedButton1: TSpeedButton;

   SpeedButton2: TSpeedButton;

   Image1: TImage;

   Image2: TImage;

   procedure SpeedButton1Click(Sender: TObject);

   procedure SpeedButton2Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure FormActivate(Sender: TObject);

 private

   procedure wmmove(var message:tWMmove); message wm_move;

 end;

var

 Form8: TForm8;

 sost:char;

 bbb:boolean;

implementation

procedure tform8.wmmove;   {Отслеживает движение формы}

begin

inherited;

if bbb then  begin

if (form8.active<>false)and(form1.visible=true) then

begin

form1.left:=form8.left+415;

form1.top:=form8.top;

end;

if (form8.active<>false)and(form2.visible=true) then

begin

form2.left:=form8.left+415;

form2.top:=form8.top;

end;

if (form8.active<>false)and(form3.visible=true) then

begin

form3.left:=form8.left+415;

form3.top:=form8.top;

end;

if (form8.active<>false)and(form5.visible=true) then

begin

form5.left:=form8.left+415;

form5.top:=form8.top;

end;

if (form8.active<>false)and(form6.visible=true) then

begin

form6.left:=form8.left+415;

form6.top:=form8.top;

end;

if (form8.active<>false)and(form7.visible=true) then

begin

form7.left:=form8.left+415;

form7.top:=form8.top;

end;

end;

end;

procedure tabledisk;  {Вывод информации о состоянии жесткого диска в виде таблицы}

var i:byte;

begin

form8.stringgrid1.RowCount:=2;

form8.stringgrid1.cells[4,0]:='  Начало';

form8.stringgrid1.Cells[8,0]:='  Конец';

form8.stringgrid1.Cells[0,0]:='Тип Раздела';

form8.stringgrid1.cells[3,1]:='H';

form8.stringgrid1.cells[4,1]:='        C';

form8.stringgrid1.cells[5,1]:='S';

form8.stringgrid1.cells[7,1]:='    H';

form8.stringgrid1.cells[8,1]:='       C';

form8.stringgrid1.cells[9,1]:='    S';

form8.stringgrid1.cells[11,0]:='Размер';

if ePri<>false then begin

form8.stringgrid1.RowCount:=form8.stringgrid1.RowCount+1;

form8.StringGrid1.Cells[0,2]:='Primary Dos';

form8.StringGrid1.Cells[1,2]:='   MBR';

form8.StringGrid1.Cells[3,2]:='1';

form8.StringGrid1.Cells[4,2]:='        0';

form8.stringGrid1.Cells[5,2]:='1';

form8.stringgrid1.cells[7,2]:='   '+inttostr(Nhead);

form8.stringgrid1.cells[8,2]:='  '+inttostr(prim.Numcyl-1);

form8.stringgrid1.cells[9,2]:='   '+inttostr(Nsect);

form8.stringgrid1.cells[11,2]:='   '+inttostr(Prim.pc)+'%';

end;

if eExt=true then begin

form8.stringgrid1.RowCount:=form8.stringgrid1.RowCount+1;

form8.StringGrid1.Cells[0,3]:='Extended Dos';

form8.StringGrid1.Cells[3,3]:='0';

form8.StringGrid1.Cells[4,3]:='   '+inttostr(prim.Numcyl);

form8.StringGrid1.Cells[5,3]:='1';

form8.stringgrid1.cells[7,3]:='   '+inttostr(Nhead);

form8.stringgrid1.cells[8,3]:='  '+inttostr(ExtCyl+Prim.Numcyl-1);

form8.stringgrid1.cells[9,3]:='   '+inttostr(Nsect);

if numld>0 then begin

for i:=1 to numld do begin

form8.stringgrid1.RowCount:=form8.stringgrid1.RowCount+1;

form8.StringGrid1.Cells[0,2+2*i]:='Primary Dos';

form8.StringGrid1.Cells[1,2+2*i]:='SMBR'+inttostr(i);

form8.StringGrid1.Cells[3,2+2*i]:='1';

form8.StringGrid1.Cells[4,2+2*i]:='   '+inttostr(Ldisks[i].StCyl);

form8.StringGrid1.Cells[5,2+2*i]:='1';

form8.stringgrid1.cells[7,2+2*i]:='   '+inttostr(Nhead);

form8.stringgrid1.cells[8,2+2*i]:='  '+inttostr(Ldisks[i].StCyl+Ldisks[i].NumCyl-1);

form8.stringgrid1.cells[9,2+2*i]:='   '+inttostr(Nsect);

form8.stringgrid1.cells[11,2+2*i]:='   '+inttostr(Ldisks[i].Rsize div (DiskSIze div 100))+'%';

if Ldisks[i].StCyl+Ldisks[i].NumCyl-1<ExtCyl+Prim.Numcyl-1 then begin

form8.stringgrid1.RowCount:=form8.stringgrid1.RowCount+1;

form8.StringGrid1.Cells[0,3+2*i]:='Extended Dos';

form8.StringGrid1.Cells[3,3+2*i]:='0';

form8.StringGrid1.Cells[4,3+2*i]:='   '+inttostr(Ldisks[i].StCyl+Ldisks[i].NumCyl);

form8.StringGrid1.Cells[5,3+2*i]:='1';

form8.stringgrid1.cells[7,3+2*i]:='   '+inttostr(Nhead);

form8.stringgrid1.cells[8,3+2*i]:='  '+inttostr(ExtCyl+Prim.Numcyl-1);

form8.stringgrid1.cells[9,3+2*i]:='   '+inttostr(Nsect);

end;

end;

end;

end;

end;

procedure risunok;         {Вывод информации о состоянии жесткого диска в виде рисунка}

var onec:real;i,nach,kon:integer;

begin

onec:=360/ncyl;

form8.Image1.picture:=form8.Image2.picture;

form8.image1.Canvas.brush.color:=clred;

form8.image1.Canvas.rectangle(325,20,335,30);

form8.image1.Canvas.brush.color:=clblue;

form8.image1.Canvas.rectangle(325,40,335,50);

form8.image1.Canvas.brush.style:=bsdiagcross;

form8.Image1.Canvas.brush.color:=clblack;

form8.image1.Canvas.rectangle(325,60,335,70);

form8.image1.canvas.Brush.style:=bsclear;

form8.Image1.Canvas.textout(338,18,'- MBR');

form8.Image1.Canvas.textout(338,38,'- SMBR');

form8.Image1.Canvas.textout(338,58,'- NOT USE');

form8.Image1.Canvas.brush.color:=clred;

form8.Image1.Canvas.rectangle(163,345,223,365);

form8.Image1.Canvas.brush.style:=bsclear;

form8.Image1.Canvas.textout(183,350,'MBR');

form8.Image1.canvas.brush.color:=clblack;

form8.Image1.canvas.brush.style:=bsdiagcross;

form8.image1.Canvas.Rectangle(163,5,223,345);

if epri=true then

begin

form8.Image1.picture:=form8.Image2.picture;

form8.image1.Canvas.brush.color:=clred;

form8.image1.Canvas.rectangle(325,20,335,30);

form8.image1.Canvas.brush.color:=clblue;

form8.image1.Canvas.rectangle(325,40,335,50);

form8.image1.Canvas.brush.style:=bsdiagcross;

form8.Image1.Canvas.brush.color:=clblack;

form8.image1.Canvas.rectangle(325,60,335,70);

form8.image1.canvas.Brush.style:=bsclear;

form8.Image1.Canvas.textout(338,18,'- MBR');

form8.Image1.Canvas.textout(338,38,'- SMBR');

form8.Image1.Canvas.textout(338,58,'- NOT USE');

form8.Image1.canvas.rectangle(163,365-round(onec*prim.numcyl),223,365);

form8.Image1.canvas.brush.color:=clblack;

form8.Image1.canvas.brush.style:=bsdiagcross;

form8.Image1.canvas.rectangle(163,365-round(onec*prim.numcyl/5),223,365);

form8.Image1.canvas.brush.style:=bssolid;

form8.Image1.canvas.brush.color:=clred;

form8.Image1.canvas.rectangle(163,365-round(onec*prim.numcyl/10),223,365);

form8.Image1.canvas.brush.color:=clblack;

form8.Image1.canvas.brush.style:=bsclear;

form8.Image1.canvas.pen.style:=psDash;

form8.Image1.canvas.moveto(163,365);

form8.Image1.canvas.lineto(113,365);

form8.Image1.canvas.moveto(113,365);

form8.Image1.canvas.lineto(113,365-round(onec*prim.numcyl));

form8.Image1.canvas.moveto(113,365-round(onec*prim.numcyl));

form8.Image1.canvas.lineto(163,365-round(onec*prim.numcyl));

form8.Image1.canvas.moveto(113,365-round(onec*prim.numcyl/2));

form8.Image1.canvas.pen.style:=pssolid;

form8.Image1.canvas.lineto(13,365-round(onec*prim.numcyl/2));

form8.Image1.canvas.textout(13,365-round(onec*prim.numcyl/2)-12,'Primary DOS');

form8.Image1.canvas.pen.style:=psdashdot;

form8.Image1.canvas.moveto(163,365-round(onec*prim.numcyl/5));

form8.Image1.canvas.lineto(153,365-round(onec*prim.numcyl/5));

form8.Image1.canvas.moveto(153,365-round(onec*prim.numcyl/5));

form8.Image1.canvas.lineto(153,365-round(onec*prim.numcyl));

form8.Image1.canvas.moveto(153,365-round(onec*prim.numcyl));

form8.Image1.canvas.lineto(163,365-round(onec*prim.numcyl));

form8.Image1.canvas.moveto(153,365-round(onec*prim.numcyl/5)-round((365-round(onec*prim.numcyl/5)-(365-onec*prim.numcyl))/2));

form8.Image1.canvas.pen.style:=pssolid;

form8.Image1.canvas.lineto(133,365-round(onec*prim.numcyl/5)-round((365-round(onec*prim.numcyl/5)-(365-onec*prim.numcyl))/2));

form8.Image1.canvas.textout(123,365-round(onec*prim.numcyl/5)-round((365-round(onec*prim.numcyl/5)-(365-onec*prim.numcyl))/2)-6,'C');

form8.image1.canvas.MoveTo(223,365);

form8.image1.canvas.lineto(298,365);

form8.image1.Canvas.TextOut(233,353,'h=0 c=0 s=1');

if eext=true then

begin

form8.Image1.canvas.rectangle(163,365-round(onec*prim.numcyl)-round(onec*extcyl),223,365-round(onec*prim.numcyl));

if numld=0 then

begin

form8.Image1.canvas.brush.color:=clblack;

form8.Image1.canvas.brush.style:=bsdiagcross;

form8.Image1.canvas.rectangle(163,365-round(onec*prim.numcyl)-round(onec*extcyl/5),223,365-round(onec*prim.numcyl));

form8.Image1.canvas.brush.style:=bssolid;

form8.Image1.canvas.brush.color:=clblue;

form8.Image1.canvas.rectangle(163,365-round(onec*prim.numcyl)-round(onec*extcyl/10),223,365-round(onec*prim.numcyl));

form8.Image1.canvas.brush.style:=bsclear;

form8.image1.canvas.MoveTo(223,365-round(onec*prim.numcyl));

form8.image1.canvas.lineto(298,365-round(onec*prim.numcyl));

form8.image1.Canvas.TextOut(233,353-round(onec*prim.numcyl),'h=0 '+'c='+inttostr(prim.numcyl)+' s=1');

end;

form8.Image1.canvas.pen.style:=psDash;

form8.Image1.canvas.moveto(163,365-round(onec*prim.numcyl));

form8.Image1.canvas.lineto(113,365-round(onec*prim.numcyl));

form8.Image1.canvas.moveto(113,365-round(onec*prim.numcyl));

form8.Image1.canvas.lineto(113,365-round(onec*prim.numcyl)-round(onec*extcyl));

form8.Image1.canvas.moveto(113,365-round(onec*prim.numcyl)-round(onec*extcyl));

form8.Image1.canvas.lineto(163,365-round(onec*prim.numcyl)-round(onec*extcyl));

form8.Image1.canvas.moveto(113,365-round(onec*prim.numcyl)-round(onec*extcyl/2));

form8.Image1.canvas.pen.style:=pssolid;

form8.Image1.canvas.lineto(13,365-round(onec*prim.numcyl)-round(onec*extcyl/2));

form8.Image1.canvas.textout(13,365-round(onec*prim.numcyl)-round(onec*extcyl/2)-12,'Extended DOS');

if numld>0 then

begin

form8.Image1.canvas.rectangle(163,365-round(onec*prim.numcyl)-round(onec*extcyl),223,365-round(onec*prim.numcyl));

nach:=round(-1*onec*prim.numcyl);

kon:=-1*round(onec*prim.numcyl);

for i:=1 to numld do begin

nach:=nach-round(onec*ldisks[i].numcyl);

form8.Image1.canvas.rectangle(163,365+nach,223,365+kon);

form8.Image1.canvas.brush.color:=clblack;

form8.Image1.canvas.brush.style:=bsdiagcross;

form8.image1.Canvas.rectangle(163,365+nach+round(onec*ldisks[i].numcyl)-round((kon-nach)/5),223,365+kon);

form8.Image1.canvas.brush.style:=bssolid;

form8.Image1.canvas.brush.color:=clblue;

form8.image1.Canvas.rectangle(163,365+nach+round(onec*ldisks[i].numcyl)-round((kon-nach)/10),223,365+kon);

form8.Image1.canvas.brush.style:=bsclear;

form8.Image1.canvas.pen.style:=psdashdot;

form8.Image1.canvas.moveto(163,365+nach+round(onec*ldisks[i].numcyl)-round((kon-nach)/5));

form8.Image1.canvas.lineto(153,365+nach+round(onec*ldisks[i].numcyl)-round((kon-nach)/5));

form8.Image1.canvas.moveto(153,365+nach+round(onec*ldisks[i].numcyl)-round((kon-nach)/5));

form8.Image1.canvas.lineto(153,365+nach);

form8.Image1.canvas.moveto(153,365+nach);

form8.Image1.canvas.lineto(163,365+nach);

form8.Image1.canvas.moveto(153,365+kon-round((kon-nach)/5)-round((-1*(365+nach)+(365+kon-round((kon-nach)/5)))/2));

form8.Image1.canvas.pen.style:=pssolid;

form8.Image1.canvas.lineto(133,365+kon-round((kon-nach)/5)-round((-1*(365+nach)+(365+kon-round((kon-nach)/5)))/2));

form8.Image1.canvas.textout(123,365+kon-round((kon-nach)/5)-round((-1*(365+nach)+(365+kon-round((kon-nach)/5)))/2)-6,ldisks[i].name);

form8.image1.canvas.MoveTo(223,365+kon);

form8.image1.canvas.lineto(298,365+kon);

form8.image1.Canvas.TextOut(233,353+kon,'h=0 '+'c='+inttostr(ldisks[i].stcyl)+' s=1');

kon:=nach;

end;

end;

end;

if prim.numcyl+extcyl<ncyl then

begin

form8.Image1.canvas.brush.style:=bsdiagcross;

form8.Image1.canvas.brush.color:=clblack;

form8.Image1.canvas.rectangle(163,5,223,365-round(onec*(prim.numcyl+extcyl)));

form8.Image1.canvas.brush.style:=bsclear;

form8.image1.canvas.MoveTo(223,365-round(onec*(prim.numcyl+extcyl)));

form8.image1.canvas.lineto(298,365-round(onec*(prim.numcyl+extcyl)));

form8.image1.Canvas.TextOut(233,353-round(onec*(prim.numcyl+extcyl)),'h=0'+' c='+inttostr(prim.numcyl+extcyl)+ ' s=1');

end;

end;

end;

procedure TForm8.SpeedButton1Click(Sender: TObject);  {Переключение в режим таблицы}

begin

image1.visible:=false;

stringgrid1.visible:=true;

form8.color:=clblack;

sost:='1';

tabledisk;

end;

procedure TForm8.SpeedButton2Click(Sender: TObject);  {Переключение в режим рисунка}

begin

image1.visible:=true;

stringgrid1.visible:=false;

sost:='2';

risunok;

end;

procedure TForm8.FormCreate(Sender: TObject);  {Начальное состояние формы}

begin

sost:='1';

tabledisk;

bbb:=true;

end;

procedure TForm8.FormActivate(Sender: TObject);  {Реагирует на изменение информации о диске}

begin

if sost='1' then tabledisk;

if sost='2' then risunok;

end;

end.


 

А также другие работы, которые могут Вас заинтересовать

23583. ЯЗЫК И БЕССОЗНАТЕЛЬНОЕ 2.05 MB
  Тексты собранные в книге последовательно представляют анализы общей проблематики бессознательного лингвистической структурированности афатических расстройств речи ребенка поэтической речи проблем семиотики структур языка как такового и его наименьшей смысловой единицы фонемы. Хайдеггером и наоборот спор Хайдеггера с семиотическим представлением языка встречи с Жаком Лаканом совершенно поновому осмыслившем 5 наследие Фрейда проштудировавшем и Хайдеггера и Якобсона вес это тот новый круг внутри которого вновь и вновь можно...
23584. ВЕЩЬ И ИМЯ 697.22 KB
  И физическая материя кресла и его отвлеченная идея не суть вещи реального обихода но исключительно предмет мыслительных операций. А вот помоему имя вовсе не есть звук имя вещи есть сила самой вещи. Поэтому я прямо утверждаю что имя неотделимо от вещи что оно есть оформление самой вещи в ее объективном существовании. Получается типичный для всякой абстрактной метафизики дуализм: вещи сами по себе без всякого имени а имена наши субъективные звуки сами по себе.
23585. ВЫСКАЗЫВАНИЯ, ЭКСПЛИЦИРУЮЩИЕ УСТАНОВКУ НА РАЗЛИЧНЫЕ СТОРОНЫ ЛИЧНОСТИ АДРЕСАТА - (лингвистический и философско-антропологический аспекты) 1.74 MB
  Близки к высказываниям подобным примеру 9 Ассертивы оценивающие знания собеседника вообще его эрудицию уровень образования начитанность: You know more than you think.Волошинова посвященные философии языкознания и Теория речи и языка английского исследователя А.Серля для директявов следующие: 1па speaker is not interested говорящий Нб Заинтересован е совершении действия; Benfaavoid Dh benefit for the _ польза слушающего Б ТОМhearer is in avoiding danger чтобы избежать опасности; KsDh speaker'...
23586. Язык как деятельность. Опыт интерпретации концепции 1.38 MB
  Дается характеристика этого принципа и его места в философии и методологии рассматривается типология деятельностных представлений языка в лингвистике. Деятельностная ориентация в построении картины языка в ходе исторического пути лингвистической науки сменялась нередко прямо противоположной а иногда и сосуществовала с ней. После блистательного опыта деятельностной трактовки языка у Гумбольдта в лингвистике наблюдается охлаждение к деятельностному видению языка и попыткам построения теоретических концепций исходящих из понимания языка как...
23587. СЕМИОТИЧЕСКИЕ ИССЛЕДОВАНИЯ (знак, схема, знание, семиотический организм, феномен человека). 440 KB
  Розин СЕМИОТИЧЕСКИЕ ИССЛЕДОВАНИЯ знак схема знание семиотический организм феномен человека. Действительно возражая против социальнопсихологического подхода в семиотике ставящего природу знака в зависимость от понимания и других психических процессов человека Г. Дело в том что оно никак не учитывает роль актанта человека интерпретирующего и действующего. Это определение вызывает массу вопросов например стало ли нам понятнее от замены €œсходства€ на €œизоморфизм€ почему семиотические понятия Эко заменяет математическими и...
23588. Стереотипность и творчество в тексте: Межвузовский сборник С 79 научных трудов 934.5 KB
  ISBN 5794401192 Межвузовский тематический сборник посвящен актуальной и малоразработанной в функциональной стилистике проблеме стереотипности проявляющейся в разных функциональных стилях речи в частности конкретизации экстралингвистической основы развертывания текста некоторых подходов к изучению речевых жанров в текстах целых произведений а также средств и способов выражения устойчивых типов речи текстовых единиц и категорий в научных художественных публицистических разговорных и религиозных текстах. Сборник рассчитан на...
23589. Автоматизированные переводные словари. Принципы построения 11.5 KB
  Зона лексического грамматического класса ЛЕ по частям речи далее категоризация. Зона морфологической информации 4. Зона индекса надежности отражает степень общепринятости данного ПЭ: А официальный стандарт Б уважаемые словари В тетради новых терминов Г плавающие 6. Зона ПЭ при нескольких ПЭ у каждого свой номер 7.
23590. Лексикография как прикладная дисциплина. Внутренняя и внешняя типология словарей 19.5 KB
  Внутренняя и внешняя типология словарей. Лексикография прикладная лингвистическая дисциплина занимающаяся практикой и теорией составления словарей. Все многообразие различных типов словарей нормативные учебные переводные терминологические идеологические этимологические . Главная проблема в разработке оптимальной стратегии новых словарей проблема обоснованности словарей как с точки зрения их состава так и в плане адекватности подаваемой в них информации.
23591. Назначение и принципы организации Субд на ПЭВМ 19.5 KB
  Назначение и принципы организации Субд на ПЭВМ СУБД состоит из совокупности взаимосвязанных данных и набора программ обеспечивающих доступ к данным и манипуляцию ими. Совокупность взаимосвязанных данных принято называть БД. Концептуальный уровень содержит описание данных хранящихся в БД и отношений между ними. Модель данных представляет собой набор концептуальных инструментов для описания данных отношений между ними семантики данных и ограничений их целостности consistency constraints.