(см. Рис. 13), в который предварительно загружаются картинки – иконки, которые и используются по ImageIndex (раскрывается вся серия загрузок, из которых и выбирается простым указанием курсора). Изменение размера кнопки уменьшает иконку, увеличение – только до истинного размера иконки.

В Delphi 10, 11, имеется также компонент ImageControl (вместо обычного Image), который загружается уже через свойство Инспектора объектов Bitmap/Bitmap Editor. Простой рисунок используется, например, для вывода эмблемы в названии приложения и т. п.

Однако, Image Control имеет гораздо большие возможности и используется активно в ходе программирования для вывода различных картинок и для рисования на компоненте, для чего компонент имеет свойства загрузки из файла – LoadFromFile, диалога – ShowOpenDialog; для рисования Bitmap, Canvas и др. Изменение размеров компонента изменяет и размер выводимого изображения (качество изображения зависит от его размера, который может быть выше для компонента, чем для рисунка); при этом сам рисунок изменяется пропорционально.

Компонент ImageViewer также загружается через Bitmap и имеет свойство масштабирования BitmapScale, которое к тому же анимировано и позволяет изменять масштаб вывода картинки в ходе работы приложения. Также имеется свойство ShowScrollBars для невмещающейся части картинки (Обычно лучше отключить = false).


Рис. 27. Загрузка в ImageControl рисунка через Image Editor.


Рис. 28. Использование Image Control для стационарного изображения эмблемы.

11.2. Группа компонентов Shape

Все фигуры можно взять готовыми из группы Shapes, что значительно упрощает работу с ними через готовые свойства и настройки. В Delphi Android, однако, компонент TPath, удобный для линейного графика, конфликтует с TPathклассом, ответственным за работу с файлами, и System.IOUtils в Use.
Прямоугольник Rectagle подойдет для отображения столбчатых графиков. Компонент можно сделать цветным и окрасить градиентом, например, в красный или зеленый цвет, показывая границы нормы.

Рис. 29. Построение графиков из элементов Rectangle по данным таблицы.


Для линейногографика можно использовать компонент Path: TPath, рисующий полилинию, а также компонент PlotGrid, представляющий собой просто сетку. Чтобы координата Y шла вверх (а отсчет Y ведется от левого верхнего угла вниз), и находилась в пределах PlotGrid, можно координату Y задавать как:

y1:= Form1.Height – (Form1.Height – PlotGrid1.Height) – y;

var

p: TPointF;

i: Integer;

x,y,kX, kY, x1,x2,y1,y2:Double;

s: String;

begin

//Коэффициенты Х и Y

kX:= StrToFloat (Edit1.Text);

kY:= StrToFloat (Edit2.Text);

//Оси задаются

x:= 1; // Ось Y

y:= 1;

p.X:= x;

p.Y:= y;

Path1.Data.MoveTo (p);

x:= 1;

y:= 360;

p.X:= x;

p.Y:= y;

Path1.Data.LineTo (p);

x:= 1; // Ось Х

y:= 360;

p.X:= x;

p.Y:= y;

Path1.Data.MoveTo (p);

x:= 360;

y:= 360;

p.X:= x;

p.Y:= y;

Path1.Data.LineTo (p);

//Проверка наличия данных

if Memo1.Lines [0] = «» then

begin

ShowMessage («Введете данные X;Y!»);

Exit;

end;

//График

s:= Memo1.Lines [0];

s:= Copy (s,1,Pos (» -», s) -1); // Выделение Х из строки

x:= StrToFloat (s);

s:= Memo1.Lines [0]; // Выделение Y из строки

s:= Copy (s, Pos (» -», s) +1,100);

y:= StrToFloat (s);

x1:= kX*x; // Учет коэффициентов для данных

y1:= Form1.Height – (Form1.Height – PlotGrid1.Height) – kY*y;

p.X:= x1;

p.Y:= y1;

Path1.Data.MoveTo (p); //Начало графика

//График

for i:= 1 to Memo1.Lines.Count-1 do

begin

s:= Memo1.Lines [i];

s:= Copy (s,1,Pos (» -», s) -1);

x:= StrToFloat (s);

s:= Memo1.Lines [i];

s:= Copy (s, Pos (» -», s) +1,100);

y:= StrToFloat (s);

x1:= kX*x;

y1:= Form1.Height – (Form1.Height – PlotGrid1.Height) – kY*y;