- •Лабораторная работа №2. Работа в delphi
- •Задание 2.1 Рисование мышью.
- •Задание 2.2 Будем изменять толщину и цвет рисуемых мышкой линий
- •Разместите их так как показано на рисунке 4.
- •Задание 2.3 Научимся работать с контекстным меню MainMenu в котором определим вкладки для очистки формы и закрытия приложения.
- •Задание 3.1 Иногда в Windows–приложениях присутствует что-то наподобие стандартного текстового блокнота (NotePad). Компонент Memo как раз во многом подобен такому блокноту.
Лабораторная работа №2. Работа в delphi
Работа с буфером обмена, рисование мышью,
контекстное меню, компонент Memo
Задание 1 Научимся работать с буфером обмена помещая и извлекая оттуда графические изображения.
Сбросьте на форму следующие компоненты: Image1 и Image2 (палитра Additional), OpenDialog1 (палитра Dialogs), а также 3 кнопки Button, с заголовками на них так как указано на рис. 1.
Назначение кнопок данного приложения будет следующим:
Обработчик щелчка Button1 – Откроет картинку в Image1.
Обработчик щелчка Button2 – Копирует картинку в буфер обмена – объект Clipboard.
Обработчик щелчка Button3 – Загрузит картинку в Image2.
Далее напишите имя подключаемого модуля, который описывает класс объекта Clipboard, т.е. буфера. Для этого в редакторе кода в самом верху после описания стандартных подключаемых модулей идущих после ключевого слова uses подпишите через запятую ClipBrd (для буфера) и Jpeg для возможности открытия файлов *.jpg (рис.2).
Также для обоих компонентов Image с помощью Object Inspector установите их свойство Stretch в значение True, чтобы рисунок подстраивался под их размер.
В обработчике щелчка Button1 напишите следующее:
opendialog1.execute; //запустить диалог выбора файлов
image1.Picture.LoadFromFile(opendialog1.FileName);
{Загрузить выбранный файл с именем opendialog1.FileName в свойство Picture
компонента Image1}
В обработчике щелчка Button2 напишите следующее:
ClipBoard.Assign(Image1.Picture);
// Метод Assign копирует в буфер обмена графические
//объекты классов TGraphic, TBitmap, TPicture и т.д.
И наконец в обработчике щелчка Button3 напишите следующее:
If Clipboard.HasFormat(cf_picture)=true
then Image2.Picture.Assign(ClipBoard);
{Метод HasFormat определяет тип содержимого буфера обмена, то есть содержит ли буфер графический объект типа cf_picture}
Запустите программу. Сначала щелкните на Button1, в появившемся диалоге выберите какой – нибудь графический файл с расширением *.bmp или *.jpg. После этого картинка из него отобразится на вашей форме в Image1. Далее щелкните на Button2 – скопировав картинку из Image1 в буфер. И как завершающий этап сделайте щелчок на Button3 – поместив изображение из буфера в Image2. Программа должна работать правильно. Вернитесь в режим программирования (РП).
Задание 2.1 Рисование мышью.
Достаточно часто представляет интерес обычное рисование мышью на форме, при этом с помощью рисунка иногда требуется выделить, некоторую область на форме, рядом с кнопкой и т.д. Покажем что рисование на форме в Delphi достаточно простая задача.
Создайте новый проект. Определим глобальную переменную булевского типа с именем Drug. Она будет иметь значение “Истина” если движение есть и “Ложь” в противном случае.
Для этого в редакторе кода объявите глобальной переменную Drug типа Boolean (рис.3). Она будет устанавливаться в True, когда будет выполняться операция щелкни и перетащи.
Установите начальное значение Drug:=False (движения нет) в обработчике события onCreate для формы.
Чтобы организовать операцию «щелкни и перетащи» требуется 3 последовательных события и соответственно 3 обработчика этих событий.
Первое событие “Нажать кнопку мыши” переходим в обработчик события onMouseDown нажатия кнопки мыши для формы, пишем:
Drug:=True; // устанавливаем что движение должно быть
Canvas.MoveTo(X,Y); // устанавливаем координаты начала рисования
Обратите внимание, что в этом обработчике
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Передаются X и Y:типа Integer – это координаты текущего указателя мыши на форме.
Все графические операции выполняются в контексте свойства Canvas, содержащемся в большинстве компонентов. Canvas является полноценным объектом имеющим свои методы (то есть функции и процедуры).
В метод MoveTo(X,Y) передаются координаты текущего указателя мыши на форме, сам данный метод устанавливает координаты, с которых начнется рисование на форме}
Второе событие “Движение мыши” переходим в обработчик события onMouseMove движения мыши на форме, и пишем там следующее:
if Drug=true then Canvas.LineTo(X,Y)
{ LineTo – рисует линию от предыдущей точки к текущей, здесь передаваемые X и Y будут уже другими так как указатель мыши уже на другой точке формы}
Третье событие “Отпускаем кнопку мыши”, и переходим в обработчик события
onMouseUp формы отпускания кнопки мыши и пишем там следующее:
Drug:=False; // устанавливаем что движения недолжно быть
Запустите программу. Убедитесь в правильности ее работы. Вернитесь в режим программирования.