В 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
Рис. 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;