i:integer;
begin
dV:=0;
for i:=1 to ListBox1.Items.Count do
begin
Kanal:=ListBox1.Items.Objects[i-1] as TKanal;
if Kanal.key then dV:=dV+Kanal.V
else
begin
poz:=Kanal.poz/10;
r:=Kanal.V/20;
if (h>poz) and (h<(poz+2*r)) then
begin
x:=h-Poz;
y:=abs(r-x);
z:=sqrt(sqr(r)-sqr(y));
St:=y*z;
Ss:=sqr(r)*arctan(z/y);
if r>x then S:=Ss-St else S:=Ss+St;
dV:=dV- S*sqrt(2*98.1*(h-poz))
end
else if h>=poz+2*r then
dV:=dV-Pi*sqr(r)*sqrt(2*98.1*(h-poz));
end;
end;
V:=V+dV*0.01;
h:=(V/SpinEdit1.Value)*10;
if h<0 then h:=0;
if h>299 then h:=299;
Image1.Canvas.Brush.Color:=clwhite;
Image1.Canvas.Pen.Color:=clWhite;
Image1.Canvas.Rectangle(51,51,249,349);
Image1.Canvas.Brush.Color:=clBlue;
Image1.Canvas.Pen.Color:=clBlue;
Image1.Canvas.Rectangle(51,350,249,349-round(h));
h:=h/10
end;
Обоснование
выбора визуальных компонентов. Для отображения текущего состояния
программы и управление ее поведением воспользовался следующими компонентами:
- Два компонента класса TListBox для отображения
текущего списка подводимых и отводимых каналов, обеспечивающий также выбор
канала для удаления или редактирования. Для данной задачи наиболее
удобен, поскольку совмещает в себе как свойства отображения так и свойства
выбора, занимая при этом фиксированный размер на экране независимо от
количества отображаемых элементов. Вместо компонента класса TListBox возможным было также использование
компонента класса TStringGrid.
- Компоненты класса TButton для активизации
действий по удалению, добавлению и редактированию свойств каналов. Данные
компоненты являются наиболее простыми и часто используемыми для выполнения
действий подобного рода.
- Компонент класса TImage используется как поверхность для графического
отображения задачи. По сравнению с компонентами, также имеющими
поверхность рисования (сама форма, компонент класса TPainBox)
не требует описания полного отображения текущего состояния задачи, и
самостоятельно сохраняет все изменения, вносимые в ходе работы программы.
- Компонент класса TGroupBox используется для
выбора типа канала для добавления, удаления или редактирования.
Используется в программе поскольку наиболее прост и удобен в обращении, по
сравнению с другими компонентами выполняющих похожую функцию.
- Компоненты класса TEdit используется для ввода
и редактирования данных каждого канала. Данные компоненты являются
наиболее простыми и часто используемыми для выполнения действий подобного
рода.
- Компоненты класса TLabel используются для
подписи других компонентов на форме. Данные компоненты являются наиболее
простыми и часто используемыми для выполнения действий подобного рода.
- Компонент класса TActionList используется для
создания механизма действия. Служит для упрощения записи повторяющихся
действий. Используется в программе поскольку наиболее прост и удобен в
обращении, по сравнению с другими компонентами выполняющих похожую
функцию.
- Компонент класса TMainMenu используется в
качестве наглядности программы и для визуальной красоты программы.
- Компонент класса TImageList используется для
хранения иконок отображаемых на кнопках и компоненте класса TMainMenu. Служит для визуальной красоты программы.
- Компонент класса TTimer используется для организации непрерывного
отображения изменения уровня воды в сосуде. Данные компоненты являются
наиболее простыми и часто используемыми для выполнения действий подобного
рода. Используется в программе поскольку наиболее удобен в обращении, по
сравнению с другими компонентами выполняющих похожую функцию.
- Компонент класса TSaveDialog используется для
сохранения текущего состояния программы. Данный компонент является
наиболее простым и часто используемыми для выполнения действий подобного
рода.
- Компонент класса TOpenDialog используется для
загрузки ранее сохраненного состояния программы. Данный компонент является
наиболее простым и часто используемым для выполнения действий подобного
рода.
- Компонент класса TToolBar используется для
быстрого доступа к управлению программой и визуальной красоты программы. Данный
компонент является наиболее простым и часто используемым для выполнения
действий подобного рода.
- Компонент класса TXPManifest служит только для визуальной красоты
программы.
- Компонент класса TSpinEdit используется для
изменения площади сосуда, как наиболее простой и удобный компонент.