Отображение изменения уровня воды в цилиндрическом сосуде с применением средств графического отображения и компонента класса “TTimer”, страница 2

    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 используется для изменения площади сосуда, как наиболее простой и удобный компонент.