Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторный практикум.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
742.09 Кб
Скачать

Лабораторная работа №8 Delphi. Страничные раскладки. Создание их и использование

Сегодня научимся работать с компонентом - Page Control.

Откройте Delphi, создайте форму, и киньте на форму PageControl (ищите в Tool Palette):

Немного исследовав объект, можно заметить, что можно создавать и удалять вкладки, еще перед запуском программы, но так ведь не интересно, верно?

Давайте создадим кнопку, которая будет создавать вкладки прямо во время работы программы. Киньте на форму любую кнопку (например Button 1, ищете в ToolPalette). И перейдите в процедуру, которая активизируется при нажатии кнопки. В var допишите ts:TTabSheet; Если нет Var добавьте. Затем в саму процедуру допишите: ts:= TTabSheet.Create(Self); ts.Caption:='Новая вкладка'; ts.PageControl:=PageControl1; ts.Visible:=true;

Первая строчка значит создание самой вкладки, вторая задаёт название, третья указывает, в каком компоненте вкладка будет жить, а последняя указывает на видимость новой вкладки. На самом деле непонятно зачем нужна невидимая вкладка, но кто знает, какая идея может родиться в головах разработчиков… Теперь можно маленько усложнить. Добавьте на наш компонент что-нибудь, например label.

Но теперь новая вкладка будет создаваться пустой… Дело в том что Ваш компонент (label) тоже нужно создать, вместе с новой вкладкой. Для этого дописываем такие строки: label1:=Tlabel.Create(Self); label1.Parent:=ts; label1.caption:='Это программа’;

Вот теперь вроде нормально, скажете Вы, но вот странность, координаты (0,0) а на первой вкладке по центру были…

Это потому что каждый параметр нужно прописывать вручную. За высоту и ширину отвечаю параметры label1.left:=«ваше число»; label1.top:=«ваше число»;

И если вы хотите развернуть вашу вкладку на весь экран, то рекомендую воспользоваться параметром Align (в Object Inspector) и выставить там параметр alClient.

Лабораторная работа №9 Общие представления. Графика

Работа с графикой в Delphi это не только линии и рисунки, но также и и печать текстовых документов. Поэтому в Delphi работе с графикой нужно уделить немного времени. Работа с графикой в Delphi предполагает обращение к канве - свойству Canvas компонентов. Canvas Delphi это холст, который позволяет программисту иметь доступ к каждой своей точке (пикселу), и словно художнику отображать то, что требуется. Конечно, рисовать попиксельно для работы с графикой в Delphi не приходится, система Delphi предоставляет для мощные средства работы с графикой, облегчающие задачу программиста.

В работе с графикой в Delphi в распоряжении программиста находятся канва (холст, полотно - свойство Canvas Delphi компонентов), карандаш (свойство Pen), кисть (свойство Brush) того компонента или объекта, на котором предполагается рисовать. У карандаша Pen и кисти Brush можно менять цвет (свойство Color) и стиль (свойство Style). Доступ к шрифтам предоставляет свойство канвы Font. Эти инструменты позволяют отображать как текст, так и достаточно сложные графики математического и инженерного содержания, а также рисунки. Кроме этого, работа с графикой позволяет использовать в Delphi такие ресурсы Windows как графические и видеофайлы.

Конечно, не все компоненты в Delphi имеют эти свойства. На вкладке Additional расположен специализированный компонент TImage, специально предназначенный для рисования, но также свойство Canvas имеют, например, такие компоненты как ListBox, ComboBox, StringGrid, а также и сама Форма, которая размещает наши компоненты. Кроме того, для печати документов Delphi обращается к свойству Canvas такого объекта как принтер.

Основное свойство такого объекта как Canvas Delphi - Pixels[i, j] типа TColor, то есть это двумерный массив точек (пикселов), задаваемых своим цветом. Рисование на канве происходит в момент присвоения какой-либо точке канвы заданного цвета. Каждому пикселу может быть присвоен любой доступный для Windows цвет. Например, выполнение оператора 

Image1.Canvas.Pixels[100, 100]:=clRed;

приведёт к рисованию красной точки с координатами [100, 100]. Узнать цвет пиксела можно обратным присвоением:

Color:=Image1.Canvas.Pixels[100, 100];

Тип TColor определён как длинное целое (LongInt). Его четыре байта содержат информацию о долях синего (B), зелёного (G), и красного (R) цветов. В 16-ричной системе это выглядит так: $00BBGGRR. Доля каждого цвета может меняться от 0 до 255. Поэтому чтобы отобразить максимально красную точку, ей нужно присвоить цвет $000000FF.

Для стандартных цветов в Delphi определён набор текстовых констант. Увидеть его можно, открыв в Инспекторе Объектов свойство Color, например, той же Формы.

Следующая таблица содержит некоторые свойства и методы канвы:

Процедура TextOut(X, Y: Integer; const Text: WideString); Производит вывод строки Text начиная с (X, Y) - левого верхнего пиксела текста.

Свойство TextWidth(var Text: String): Integer; Содержит длину строки Text в пикселах.

Свойство TextHeight(var Text: String): Integer; Содержит высоту строки Text в пикселах.

Процедура MoveTo(X, Y: Integer); Производит перемещение позиции к пикселу с адресом (X, Y).

Процедура LineTo(X, Y: Integer); Производит рисование прямой линии из точки текущей позиции к пикселу с адресом (X, Y). Адрес (X, Y) становится точкой текущей позиции.

Процедура FillRect(const Rect: TRect); Заполняет прямоугольник Rect на холсте, используя текущую кисть. Может использоваться, в том числе, для стирания части изображения на холсте.

Напишем, используя только эти методы канвы, приложение для изображения на канве компонента Image текста, который вводится в компонент Memo:

Расположите на форме компоненты Memo, Image (находится на странице Additional), Edit, UpDown (находится на странице Win32). Свойство Associate компонента UpDown приравняйте в выпадающем списке нашему компоненту Edit. Этим компонентом мы будем изменять размер шрифта. Поскольку и Memo и Image находятся у нас на одном устройстве вывода - на нашем экране, размер пиксела у них одинаков, и поэтому размеры изображения будут равны.

Первое, что мы сделаем, это инициализацию переменных при старте программы. Необходимо определить размеры области рисования (создадим для этого глобальную переменную Rect типа TRect) и сделать цвет фона Image белым:

procedure TForm1.FormCreate(Sender: TObject); begin Rect.Left:=0; Rect.Top:=0; Rect.Right:=Image1.Width; Rect.Bottom:=Image1.Height; Image1.Canvas.Brush.Color:=clWhite; end;

Затем нарисуем рамку по сторонам Image: procedure TForm1.page; begin with Image1.Canvas do   begin     MoveTo(0, 0);     LineTo(Image1.Width-1, 0);     LineTo(Image1.Width-1, Image1.Height-1);     LineTo(0, Image1.Height-1);     LineTo(0, 0);   end; end;

Попробуем, что получилось. Всё работает, но рамка пока не выводится. Поэтому добавим процедуру page в в процедуру FormCreate. Теперь красиво. Далее напишем простую процедуру стирания, очищения Image. Её нужно будет вызывать перед любым обновлением изображения, иначе предыдущее и последующее изображения будут перекрываться.

procedure TForm1.clearing; begin Image1.Canvas.FillRect(Rect); //Прямоугольник Rect заполняется белым цветом, изображение стирается. end;

Теперь пришла очередь непосредственно процедуры вывода текста. Начнём выводить текст от точки (3, 3) - верхнего левого угла листа, с небольшим отступом в 3 пиксела. Каждую последующую строку будем смещать на высоту строки:

procedure TForm1.prn; var i: Integer; begin with Image1.Canvas do   for i:=1 to Memo1.Lines.Count do     TextOut(3, 3+(i-1)*TextHeight('A'), Memo1.Lines[i-1]); end;

Теперь всё готово для вывода текста. Делать это будем по событию OnChange:

procedure TForm1.Memo1Change(Sender: TObject); begin   clearing;   prn;   page; end; Ну и напоследок процедура изменения размера шрифта: procedure TForm1.Edit1Change(Sender: TObject); begin   Memo1.Font.Size:=UpDown1.Position;   Image1.Canvas.Font.Size:=UpDown1.Position;   Memo1Change(Sender); end;

Можно модифицировать эту программу для вывода текста на печать. Для работы с принтером нужно подключить модуль Printers: unit Unit1; Interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, Printers;

При работе с принтером как с полотном для начала печати вызывается метод BeginDoc, затем производится вывод документа, завершается печать вызовом метода EndDoc:

Printer.BeginDoc; with Printer.Canvas do   begin ... Печать документа ...   end; Printer.EndDoc;

Ширина и высота полотна принтера доступны через свойства Printer.PageWidth и Printer.PageHeight. Закончить печать на одной странице и начать печатать на другой можно с помощью метода Printer.NewPage.