Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Листинг 10.1. Стили заполнения областейСтр 1 из 3Следующая ⇒
Глава 10 Графические возможности Delphi Например, инструкция Form1.Canvas.Rectangle (10, 10, 100, 100) вычерчивает в окне программы прямоугольник. Холст canvas — это объект типа TCanvas . Рис. 10.1. Координаты точек холста Height и width ClientHeight и Clientwidth. Карандаш и кисть Реn (карандаш) и Brush (кисть), которые представляют собой объекты типа TPеп и TBrush, соответственно. Карандаш Таблица 10.1. Свойства объекта треп (карандаш)
Таблица 10.2. Значение свойства Color определяет цвет линии
Таблица 10.3. Значение свойства Реn. Style определяет вид линии
Таблица 10.4. Значение свойства Реп. Mode влияет на цвет линии
Кисть (canvas.Brush) Таблица 10.5. Свойства объекта TBrush (кисть)
Таблица 10.6. Значения свойства Brush. style определяют тип закрашивания
Рис. 10.2. Окно программы Стили заполнения областей Листинг 10.1. Стили заполнения областей unit brustyle_; Interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; Type TForm1 = class (TForm) procedure FormPaint(Sender: TObject); private { Private declarations} public { Public declarations ) end; var Form1: TForm1; Implementation {$R *.DFM} // перерисовка формы procedure TForm1.FormPaint(Sender: TObject); Const bsName: array [1..8] of string = ('bsSolid', 'bsClear', 'bsHorizontal', 'bsVertical', 'bsFDiagonal', 'bsBDiagonal', 'bsCross', 'bsDiagCross'); Var x, y: integer; // координаты левого верхнего угла прямоугольника w, h: integer; // ширина и высота прямоугольника bs: TBrushStyle; // стиль заполнения области k: integer; // номер стиля заполнения i, j: integer; Begin w: =40; h: =40; // размер области(прямоугольника) у: =20; for i: = 1 to 2 do Begin х: =10; for j: =1 to 4 do Begin k: =j+(i-1)*4; // номер стиля заполнения case k of 1: bs = bsSolid; 2: bs = bsClear; 3: bs = bsHorizontal; 4: bs = bsVertical; 5: bs = bsFDiagonal; 6: bs = bsBDiagonal; 7: bs = bsCross; 8: bs = bsDiagCross; end; // вывод прямоугольника Canvas.Brush.Color: = clGreen; // цвет закрашивания — зеленый Canvas.Brush.Style: = bs; // стиль закрашивания Canvas.Rectangle(x, y, x+w, y-t-h); // вывод названия стиля Canvas.Brush.Style: = bsClear; Canvas.TextOut(x, y-15, bsName[k]); // вывод названия стиля x: = x+w+30; end; у: = y+h+30; End; end; end. Вывод текста Объект.Canvas.TextOut(x, у, Текст) где:
Рис. 10.3. Координаты области вывода текста Таблица 10.7. Свойства объекта TFont
Внимание! Область вывода текста закрашивается текущим цветом кисти. Поэтому перед выводом текста свойству Brush.Color нужно присвоить значение bsClear или задать цвет кисти, совпадающий с цветом поверхности, на которую выводится текст. Следующий фрагмент программы демонстрирует использование функции TextOut для вывода текста на поверхность формы: with Form1.Canvas do begin // установить характеристики шрифта Font.Name: = 'Tahoma'; Font.Size: = 20; Font.Style: = [fsItalic, fsBold]; Brush.Style: = bsClear; // область вывода текста не закраш. TextOut(0, 10, 'Borland Delphi 7'); end; После вывода текста методом Textout указатель вывода (карандаш) перемещается в правый верхний угол области вывода текста. Следующий фрагмент программы демонстрирует возможность вывода строки текста при помощи двух инструкций TextOut. with Form1.Canvas do begin TextOut(0, 10, 'Borland '); TextOut(PenPos.X, PenPos.Y, 'Delphi 7'); end; Линия Компонент.Canvas.LineTo(x, у) MoveTo(x, y), указав в качестве параметров координаты нового положения карандаша. Рис. 10.4. Форма приложения Координатная сетка Interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Implementation {$R *.DFM} procedure TForm1.FormPaint(Sender: TObject); Var x0, y0: integer; // координаты начала координатных осей dx, dy: integer; // шаг координатной сетки (в пикселах) h, w: integer; //высота и ширина области вывода координатной сетки х, у: integer; lx, ly: real; // метки (оцифровка) линий сетки по X и Y dlx, dly: real; // шаг меток (оцифровки) линий сетки по X и Y cross: integer; // счетчик неоцифрованных линий сетки dcross: integer; // количество неоцифрованных линий между //оцифрованными Begin х0: =30; у0: =220; // оси начинаются в точке (40, 250) dx: =40; dy: =40; // шар координатной сетки 40 пикселов dcross: =1; // помечать линии сетки X: 1 — каждую; // 2 — через одну; 3 — через две; dlx: =0.5; // шаг меток оси X dly: =1.0; // шаг меток оси Y, метками будут: 1, 2, 3 и т. д. h: =200; w: =300; with form1.Canvas do begin cross: =dcross; MoveTo(x0, v0); LineTo(x0, y0-h); // ось X MoveTo(x0, y0); LineTo(x0+w, y0); // ось Y // засечки, сетка и оцифровка по оси X x: =x0+dx; lx: =dlx; Repeat MoveTo(x, y0-3); LineTo(x, yO+3); // засечка cross: =cross-l; if cross = 0 then // оцифровка Begin TextOut(x-8, y0+5, FloatToStr(lx)); cross: =dcross; end; Pen.Style: =psDot; MoveTo(x, y0-3); LineTo(x, y0-h); // линия сетки Pen.Style: =psSolid; lx: =lx+dlx; x: =x+dx; until (x> x0+w); // засечки, сетка и оцифровка по оси Y y: =y0-dy; ly: =dly; Repeat MoveTo(х0-3, у); LineTo(х0+3, у); // засечка TextOut(х0-20, у, FloatToStr(1у)); // оцифровка Pen.Style: =psDot; // пунктирная(короткая) линия MoveTo(х0+3, у); LineTo(x0+w, у); // линия сетки Pen.Style: =psSolid; // сплошная линия y: =y-dy; ly: =ly+dly; until (y< y0-h); end; end; End. Ломаная линия Метод polyline вычерчивает ломаную линию. В качестве параметра метод получает массив типа TPoint. Каждый элемент массива представляет собой запись, поля х и у которой содержат координаты точки перегиба ломаной. Метод Polyline вычерчивает ломаную линию, последовательно соединяя прямыми точки, координаты которых находятся в массиве: первую со второй, вторую с третьей, третью с четвертой и т. д. Var gr: array[1..50] of TPoint; // график — ломаная линия x0, y0: integer; // координаты точки начала координат dx, dy: integer; // шаг координатной сетки по осям X и Y i: integer; Begin х0: = 10; у0: = 200; dx: = 5; dy: = 5; // заполним массив gr for i: =l to 50 do begin gr[i].x: = x0 + (i-l)*dx; gr[i].y: = y0 - Data[i]*dy; end; // строим график with forml.Canvas do begin MoveTo(x0, y0); LineTo(x0, 10); // ось Y MoveTo(x0, y0); LineTo(200, y0); // ось X Polyline(gr); // график end; end; Метод Polyline можно использовать для вычерчивания замкнутых контуров. Для этого надо, чтобы первый и последний элементы массива содержали координаты одной и той же точки. Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = class (TForm) procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Forml: TForml; Implementation {$R *.dfm} // вычерчивает звезду procedure StarLine(x0, y0, r: integer; Canvas: TCanvas); // x0, y0 — координаты центра звезды //r — радиус заезды Var р: array [1.. 11] of TPoint; // массив координат лучей и впадин a: integer; // угол между осью ОХ и прямой, соединяющей // центр звезды и конец луча или впадину i: integer; Begin а: = 18; // строим от правого гор. луча for i: =l to 10 do begin if (i mod 2=0) then begin // впадина p[i].x: = x0+Round(r/2*cos(a*pi/180) ); p[i].y: =y0-Round(r/2*sin(a*pi/180) ); End else begin // луч [i].x: =x0+Round(r*cos (a*pi/180) ); [i].y: =y0-Round(r*sin(a*pi/180) ); end; a: = a+36; end; p[ll].X: = p[l].X; // чтобы замкнуть контур звезды Canvas.Polyline(р); // начертить звезду end; // нажатие кнопки мыши procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin if Button = mbLeft // нажата левая кнопка? then Form1.Canvas.Pen.Color: = clRed else Form1.Canvas.Pen.Color: = clGreen; StarLine(x, y, 30, Forml. Canvas ); end; End. Рис.10.5. Звезда Примечание Обратите внимание, что размер массива р на единицу больше, чем количество концов и впадин звезды, и что значения первого и последнего элементов массива совпадают. Окружность и эллипс Объект.Canvas.Ellipse(x1, y1, х2, у2) где:
Рис. 10.6. Значения параметров метода Ellipse определяют вид геометрической фигуры Дуга Объект.Canvas.Arc(x1, y1, х2, у2, х3, у3, х4, у4) где:
Дуга вычерчивается против часовой стрелки от начальной точки к конечной (рис. 10.7). Рис. 10.7. Значения параметров метода Arc определяют дугу как часть эллипса (окружности) Прямоугольник Объект.Canvas.Rectangle(x1, y1, x2, y2) где:
Метод RoundRec тоже вычерчивает прямоугольник, но со скругленными углами. Объект.Canvas.RoundRec(x1, y1, х2, у2, х3, у3) где:
Рис. 10.8. Метод RoundRec вычерчивает прямоугольник со скругленными углами procedure TForm1.Button1Click(Sender: TObject); Var r1, r2: TRect; // координаты углов прямоугольников Begin // заполнение полей структуры // зададим координаты углов прямоугольников r1: = Rect(20, 20, 60, 40); r2: = Rect(10, 10, 40, 50); with fоrm1.Canvas do begin Brush.Color: = clRed; FillRect(r1); // закрашенный прямоугольник Brush.Color: = clGreen; FrameRect(r2}; // только граница прямоугольника end; end; Многоугольник Метод Polygon вычерчивает многоугольник Ниже приведена процедура, которая, используя метод polygon, вычерчивает треугольник: procedure TForm1.Button2Click(Sender: TObject); Var pol: array[1..3] of TPoint; // координаты точек треугольника Begin pol[1].x: = 10; polf1].y: = 50; pol[2].x: = 40; pol[2].y: = 10; pol[3].х: = 70; pol[3].у: = 50; Forml.Canvas.Polygon(pol); end; Сектор Объект. Canvas.Pie(x1, y1, x2, y2, х3, у3, х4, у4) где:
Рис. 10.9. Значения параметров метода Pie определяют сектор как часть эллипса (окружности) Точка Form1.Canvas.Pixels[10, 10]: =clRed окрашивает точку поверхности формы в красный цвет. Размерность массива pixels определяется размером графической поверхности. Размер графической поверхности формы (рабочей области, которую также называют клиентской) задается значениями свойств ClientWidth и ClientHeight, а размер графической поверхности компонента image — значениями свойств Width и Height. Левой верхней точке рабочей области формы соответствует элемент pixels [0, 0], а правой нижней - Pixels[Clientwidth - 1, ClientHeight - 1]. Например, если некоторая функция f(x) может принимать значения от нуля до 1000, и для вывода ее графика используется область формы высотой в 250 пикселов, то масштаб оси Y вычисляется по формуле: т = 250/1000. Таким образом, значению f(x) = 70 будет соответствовать точка с координатой Y =233. Значение координаты Y вычислено по формуле Y= h -f(x) ´ m = 250 – 70 ´ (250/1000), где h - высота области построения графика. Примеры построения графиков функций у = 2 sin(x) ex/5. Interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; Type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); private { Private declarations } public {Public declarations } end; var Form1: TForm1; Implementation {$R *.DFM} // Функция, график которой надо построить Function f(x: real): real; Begin f: =2*Sin(x)*exp(x/5); end; // строим график функции procedure GrOfFunc; Var x1, x2: real; // границы изменения аргумента функции y1, y2: real; // границы изменения значения функции х: real; // аргумент функции у: real; // значение функции в точке х dx: real; // приращение аргумента l, b: integer; // левый нижний угол области вывода графика w, h: integer; // ширина и высота области вывода графика mx, my: real; // масштаб по осям X и Y х0, у0: integer; // точка — начало координат Begin // область вывода графика l: =10; // X — координата левого верхнего угла b: =Form1.ClientHeight-20; //У — координата левого верхнего угла h: =Form1.ClientHeight-40; // высота w: =Form1.Width-40; // ширина x1: =0; // нижняя граница диапазона аргумента х2: =25; // верхняя граница диапазона аргумента dx: =0.01; // шаг аргумента // найдем максимальное и минимальное значения // функции на отрезке [x1, x2] y1: =f(x1); // минимум y2: =f(x1); //максимум x: =x1; Repeat У: = f (х); if у < y1 then y1: =y; if у > у2 then y2: =y; х: =x+dx; until (x > = х2); // вычислим масштаб my: =h/abs(y2-y1); // масштаб по оси Y mx: =w/abs(x2-x1); // масштаб по оси X х0: =1; у0: =b-Abs(Round(y1*my)); with form1.Canvas do Begin // оси MoveTo(l, b); LineTo(l, b-h); MoveTo(x0, y0); LineTo(x0+w, y0); TextOut(l+5, b-h, FloatToStrF(y2, ffGeneral, 6, 3)); {универсальный формат} TextOut(l+5, b, FloatToStrF(y1, ffGeneral, 6, 3)); // построение графика x: =x1; Repeat y: =f(x); Pixels[x0+Round(x*mx), y0-Round(y*my)]: =clRed; x: =x+dx; until (x > = x2); end; end; procedure TForm1.FormPaint(Sender: TObject); begin GrOfFunc; end; // изменился размер окна программы procedure TForm1.FormResize(Sender: TObject); Begin // очистить форму form1.Canvas.FillRect(Rect(0, 0, ClientWidth, ClientHeight)); // построить график GrOfFunc; end; End. Основную работу выполняет процедура GrOfFunc, которая сначала вычисляет максимальное (у2) и минимальное (yl) значения функции на отрезке [x1, x2]. Затем, используя информацию о ширине (Forml.Clientwidth -40) и высоте (Form1.ClientHeight - 40) области вывода графика, вычисляет масштаб по осям X (mх) иY(mу). Высота и ширина области вывода графика определяется размерами рабочей (клиентской) области формы, т. е. без учета области заголовка и границ. После вычисления масштаба процедура вычисляет координату у горизонтальной оси (уо) и вычерчивает координатные оси графика. Затем выполняется непосредственное построение графика (рис. 10.10). Вызов процедуры GrOfFunc выполняют процедуры обработки событий OnPaint и OnFormResize. Процедура TForm1.FormPaint обеспечивает вычерчивание графика после появления формы на экране в результате запуска программы, а также после появления формы во время работы программы, например, в результате удаления или перемещения других окон, полностью или частично перекрывающих окно программы. Процедура TForm1.FormResize обеспечивает вычерчивание графика после изменения размера формы. Рис. 10.10. График, построенный процедурой GrOfFunc Примечание Рассмотренная программа работает корректно, если функция, график которой надо построить, принимает как положительные, так и отрицательные значения. Если функция во всем диапазоне только положительная или только отрицательная, то в программу следует внести изменения. Программа вывода графика любой функции, используя компоненту Image unit Unit1; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ExtCtrls; Type TForm1 = class(TForm) Image1: TImage; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; Button1: TButton; Edit1: TEdit; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N2Click(Sender: TObject); procedure N1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Var Form1: TForm1; Implementation {$R *.dfm} function www(x: real): real; Begin result: =x*x-3*x+2; end; procedure TForm1.Button1Click(Sender: TObject); var x, y: real; i: integer; Begin if Edit1.Text< > '' then Begin Image1.Canvas.Brush.Color: =clWhite; Image1.Canvas.Rectangle(0, 0, 501, 501); Image1.Canvas.MoveTo(0, 251); Image1.Canvas.LineTo(501, 251); Image1.Canvas.MoveTo(251, 0); Image1.Canvas.LineTo(251, 501); Image1.Canvas.MoveTo(241, 20); Image1.Canvas.LineTo(251, 0); Image1.Canvas.LineTo(261, 20); Image1.Canvas.MoveTo(481, 241); Image1.Canvas.LineTo(501, 251); Image1.Canvas.LineTo(481, 261); for i: =1 to 21 do begin Image1.Canvas.MoveTo(i*25+1, 246); Image1.Canvas.LineTo(i*25+1, 254); Image1.Canvas.TextOut(i*25+1, 255, FloatToStr(StrToInt(edit1.Text)/250*(i*25-250))); Image1.Canvas.MoveTo(246, i*25+1); Image1.Canvas.LineTo(254, i*25+1); Image1.Canvas.TextOut(255, i*25+1, FloatToStr(- StrToInt(edit1.Text)/250*(i*25-250))); end; Image1.Canvas.TextOut(240, 10, 'y'); Image1.Canvas.TextOut(480, 230, 'x'); x: =StrToInt(edit1.Text)/250*(-250); y: =www(x); Image1.Canvas.MoveTo(round(X/Strtoint(Edit1.Text)*250+251), round(-Y/StrToInt(Edit1.Text)*250+251)); for i: =2 to 501 do begin x: =StrToInt(edit1.Text)/250*(i-251); y: =www(x); Image1.Canvas.LineTo(round(X/Strtoint(Edit1.Text)*250+251), round(- Y/StrToInt(Edit1.Text)*250+251)); end End else ShowMessage('введите масштаб'); end; procedure TForm1.FormCreate(Sender: TObject); Begin Image1.Canvas.Brush.Color: =clWhite; Image1.Canvas.Rectangle(0, 0, 501, 501); Image1.Canvas.MoveTo(0, 251); Image1.Canvas.LineTo(501, 251); Image1.Canvas.MoveTo(251, 0); Image1.Canvas.LineTo(251, 501); Image1.Canvas.MoveTo(241, 20); Image1.Canvas.LineTo(251, 0); Image1.Canvas.LineTo(261, 20); Image1.Canvas.MoveTo(481, 241); Image1.Canvas.LineTo(501, 251); Image1.Canvas.LineTo(481, 261); Image1.Canvas.TextOut(240, 10, 'y'); Image1.Canvas.TextOut(480, 230, 'x'); end; procedure TForm1.N2Click(Sender: TObject); begin close; end; procedure TForm1.N1Click(Sender: TObject); Begin MessageDlg('программа рисует функцию, заданную в подпрограмме-функция. В окне масштаб вводится число отрезков на которые разбиваются координатные прямые', mtinformation, [mbok], 0) End; end.
Вывод иллюстраций Наиболее просто вывести иллюстрацию, которая находится в файле с расширением bmp, jpg или ico, можно при помощи компонента image, значок которого находится на вкладке Additional палитры (рис. 10.11). Рис. 10.11. Значок компонента Image В табл. 10.8 перечислены основные свойства компонента image. Таблица 10.8. Свойства компонента image
Иллюстрацию, которая будет выведена в поле компонента image, можно задать как во время разработки формы приложения, так и во время работы программы. Во время разработки формы иллюстрация задается установкой значения свойства picture путем выбора файла иллюстрации в стандартном диалоговом окне, которое появляется в результате щелчка на командной кнопке Load окна Picture Editor (рис. 10.12). Чтобы запустить Image Editor, нужно в окне Object Inspector выбрать свойство Picture и щелкнуть на кнопке с тремя точками. Если размер иллюстрации больше размера компонента, то свойству strech нужно присвоить значение True и установить значения свойств width и Height пропорционально реальным размерам иллюстрации. Чтобы вывести иллюстрацию в поле компонента image во время работы программы, нужно применить метод LoadFromFile к свойству Picture, указав в качестве параметра имя файла иллюстрации. Например, инструкция Form1.Image1.Picture.LoadFromFile('e: \temp\bart.bmp') загружает иллюстрацию из файла bart.bmp и выводит ее в поле вывода иллюстрации (image1). Метод LoadFromFile позволяет отображать иллюстрации различных графических форматов: BMP, WMF, JPEG (файлы с расширением jpg). Следующая программа, ее текст приведен в листинге 10.6, использует компонент image для просмотра иллюстраций, которые находятся в указанном пользователем каталоге. Диалоговое окно программы приведено на рис. 10.13. Рис. 10.12. Окно Picture Editor
Рис. 10.13. Слайд-проектор Interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menu Type TForm1 = class (TForm) Image1: ТImage; Button1: TButton; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Var Form1: TForm1; aSearchRec: TSearchRec; aPath: String; // каталог, в котором находятся иллюстрации aFile: String; // файл иллюстрации iw, ih: integer; // первоначальный размер компонента Image Implementation {$R *.DFM} // изменение размера области вывода иллюстрации // пропорционально размеру иллюстрации Procedure ScaleImage; Var pw, ph: integer; // размер иллюстрации scaleX, scaleY: real; // масштаб по Х и Y scale: real; // общий масштаб Begin // иллюстрация уже загружена // получим ее размеры pw: = Form1.Image1.Picture.Width; ph: = Form1.Image1.Picture.Height; if pw > iw // ширина иллюстрации больше ширины компонента Image then scaleX: = iw/pw // нужно масштабировать else scaleX: = 1; if ph > ih // высота иллюстрации больше высоты компонента then scaleY: = ih/ph // нужно масштабировать else scaleY: = 1; // выберем наименьший коэффициент if scaleX < scaleY then scale: = scaleX else scale: = scaleY; // изменим размер области вывода иллюстрации Form1.Image1.Height: = Round(Form1.Image1.Picture.Height*scale) Form1.Image1.Width: = Round(Form1.Image1.Picture.Width*scale); // т. к. Strech = True и размер области пропорционален // размеру картинки, то картинка масштабируется без искажений end; // вывести первую иллюстрацию procedure FirstPicture; Var r: integer; // результат поиска файла Begin aPath: = 'f: \temp\'; r: = FindFirst(aPath+'*.bmp', faAnyFile, aSearchRec); if r = 0 then begin // в указанном каталоге есть bmp-файл aFile: = aPath + aSearchRec.Name; Form1.Image1.Picture.LoadFromFile(aFile); // загрузить // иллюстрацию ScaleImage; //-установить размер компонентаImage r: = FindNext(aSearchRec); // найти следующий файл if r = 0 then // еще есть файлы иллюстраций Form1.Button1.Enabled: = True; end; end; // вывести следующую иллюстрацию Procedure NextPicture(); Var r: integer; Begin aFile: = aPath + aSearchRec.Name; Forml.Image1.Picture.LoadFromFile(aFile); ScaleImage; // подготовим вывод следующей иллюстрации r : = FindNext(aSearchRec); // найти следующий файл if r< > 0 then // больше нет иллюстраций Forml.Button1.Enabled: = False; end; procedure TForm1.FormActivate(Sender: TObject); Begin Image1.AutoSize: =False; //запрет автоизменения размера //компонента Image1.Stretch: = True; // разрешим масштабирование // запомним первоначальный размер области вывода иллюстрации iw: = Image1.Width; in: = Image1.Height; Button1.Enabled: = False; // сделаем недоступной кнопку Дальше FirstPicture; // вывести первую иллюстрацию end; //щелчок на кнопке Дальше procedure TForm1.Button1Click(Sender: TObject); Begin NextPicture; end; End. Программа выполняет масштабирование выводимых иллюстраций без искажения, чего нельзя добиться простым присвоением значения True свойству strech. Загрузку и вывод первой и остальных иллюстраций выполняют соответственно процедуры FirstPicture и NextPicture. Процедура FirstPicture использует функцию FindFirst для того, чтобы получить имя первого BMP-файла. В качестве параметров функции FindFirst передаются:
Если в указанном при вызове функции FindFirst каталоге есть хотя бы один BMP-файл, значение функции будет равно нулю. В этом случае метод LoadFromFiie загружает файл иллюстрации, после чего вызывается функция ScaleImage, которая устанавливает размер компонента пропорционально размеру иллюстрации. Размер загруженной иллюстрации можно получить, обратившись к свойствамForm1.Image1.Picture.Width и Form1.Image1.Picture.Height, значения которых не зависят от размера компонента Image. Глава 10 Графические возможности Delphi Например, инструкция Form1.Canvas.Rectangle (10, 10, 100, 100) вычерчивает в окне программы прямоугольник. Холст canvas — это объект типа TCanvas . Рис. 10.1. Координаты точек холста Height и width ClientHeight и Clientwidth. Карандаш и кисть Реn (карандаш) и Brush (кисть), которые представляют собой объекты типа TPеп и TBrush, соответственно. Карандаш Таблица 10.1. Свойства объекта треп (карандаш)
Таблица 10.2. Значение свойства Color определяет цвет линии
Таблица 10.3. Значение свойства Реn. Style определяет вид линии Популярное:
|
Последнее изменение этой страницы: 2016-03-15; Просмотров: 1199; Нарушение авторского права страницы