Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

TListView для визуализации результатов моделирования



В разделе приведен пример использования компонента TListView для визуализации и анализа результатов моделирования. Работа модуля сводится к тому, что по мере выполнения расчетов с разными входными параметрами сохраняется история вычислений. При этом сохраняются интегральные результаты и графическое представление полученной выборки. Пользователь имеет возможность сравнивать результаты последнего эксперимента и выбранного в истории, а также изменять последовательность экспериментов в истории или удалять их (рис. 11).

Для хранения истории результатов в табличном виде используется компонент TListView, который находится на вкладке Win32 палитры компонентов Delphi. После размещения компонента на форме необходимо установить его свойства:

· ViewStyle à vsReport;

· ReadOnly, RowSelect à true;

· GridLines (линии таблицы) à true;

· в редакторе свойства Columns указать подписи для всех столбцов.

Компоненты TChart

 
 


Рис. 11. Форма для визуализации результатов

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

TExper = class(TObject)

Public

//различные интегральные результаты

disp: TBitmap; //графики

selected: boolean; //нужно ли записывать в отчет

//конструктор класса

constructor Create(результаты);

end;

После расчета программа визуализирует полученную выборку на графике и сохраняет результаты в глобальной переменной TempExper – экземпляре класса TExper. Для сохранения в объектной переменной битового образа графика используются следующие фрагменты кода:

Form1.Chart1.CopyToClipboardBitmap; //Копируем в буфер обмена

...

//из буфера обмена в битовый массив

var i:integer;

bmp: TBitmap;

begin

if Clipboard.HasFormat(CF_BITMAP) then

begin

bmp:= TBitmap.Create; bmp.LoadFromClipBoardFormat(cf_BitMap,

ClipBoard.GetAsHandle(cf_Bitmap),0);

TempExper.disp:= bmp;

end;

end;

Для хранения информации о расчетах в программе используется «разреженный массив» ExperList, реализованный как массив указателей. После сохранения результатов в переменной TempExper, в массив ExperList добавляется указатель ExperList.Add(TempExper). Теперь заполним записями элемент TListView.

procedure TForm1.ListRefresh;

var

i: Integer;

ListItem: TListItem;

Temp: TExper; // переменная класса записи

begin

with ListView1 do

begin

Clear;//очищаем все записи

Checkboxes:= true;//разрешаем CheckBox в 1 столбце

ViewStyle:= vsReport;

for i:=0 to ExperList.Count - 1 do

begin

Temp:= ExperList[i];//Массив записей

ListItem:= Items.Add;//создаем новую запись в ListView

ListItem.SubItems.Add(IntToStr(Temp.statistics));

//Тут добавляем столько данных, сколько столбцов

ListItem.Checked:= Temp.selected;

ListItem.ImageIndex:= i;//номер записи будет полезен //при работе с функциями перемещения и удаления.

end;

end;

end;

Первый столбец содержит поле CheckBox, это дает возможность пользователю отмечать интересующие записи для формирования отчета. На рис. 11 видно, что на двух верхних графиках представлены результаты последнего расчета, а на двух нижних графиках – результаты выделенного из списка расчета. Пользователь щелчком мыши на интересующей строке списка выделяет результаты для визуализации на нижних графиках. Для реакции на это действие пользователя необходимо создать обработчик события OnSelectItem компонента TListView.

procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);

var Temp: TExper;

i: integer;

begin

//если выделили существующую запись – делаем все

//строки списка активными, иначе нет

GroupBox1.Visible:= Selected;//вывод интегр.результатов

SpeedButton1.Enabled:= Selected;//кнопка переместить вверх

SpeedButton2.Enabled:= Selected;//кнопка переместить вниз

SpeedButton3.Enabled:= Selected;//кнопка удалить

Temp:= ExperList[Item.Index];

RedrawIntegralRes(1, Temp); //рисуем скриншот графика

Image1.Picture.Assign(Temp.disp);

end;

Если в список результатов будет занесено большое количество записей, может быть удобным перемещение записей по списку и возможность удаления записи. Обработчик события нажатие кнопки «Переместить вверх»:

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

if(ListView1.Selected.ImageIndex > 0) then

begin

//iSelected глобальная перем. –номер выделенной записи

iSelected:= ListView1.Selected.ImageIndex;

SaveList;//если в поле CheckBox выставлен флажок – надо //сохранить его, т.к. при перерисовке все будет утеряно

ExperList.Move(ListView1.Selected.ImageIndex, ListView1.Selected.ImageIndex - 1);

ListRefresh; //обновляем список

ListView1.ItemIndex:= iSelected - 1;

//выделенная запись переместилась вверх

end;

end;

//процедура сохранения списка

procedure TForm1.SaveList;

var i:integer;

Temp: TExper;

begin

with ListView1 do

begin

for i:=0 to Items.Count-1 do

begin

Temp:= ExperList[i];

Temp.selected:= ListView1.Items[i].Checked;

end;

end;

end;

Аналогичным образом работают процедуры перемещения записи вниз и удаления.





Дата публикования: 2014-11-03; Прочитано: 435 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...