Когда пользователь нажимает одну из кнопок мыши, указатель которой находится над формой  (или над компонентом), Windows посылает приложению несколько сообщений.  Для написания кода,  откликающегося на эти сообщения, Delphi  определяет несколько событий.  Основных событий два: OnMouseDown, которое происходит при нажатии одной из кнопок мыши, и OnMouseUp, которое происходит при освобождении кнопки.   Еще одно важное системное сообщение связано с перемещением мыши – сообщение OnMouseMove.
  В форме реализовать согласно варианту индивидуального задания рисование окружностей,  эллипсов и прямоугольников различных размеров и цветов с помощью мыши,  используя свойство Canvas  формы.   
Событие OnClick также доступно и в форме. Его основной смысл состоит в том, что левая кнопка мыши нажимается и отпускается над одним и тем же окном или компонентом. Однако в период между этими двумя действиями курсор может переместиться за пределы окна или компонента,  причем левая кнопка мыши будет удерживаться нажатой. Если вы в определенной позиции нажмете кнопку мыши, а затем переместите мышь в другое место и отпустите кнопку, то щелчок не произойдет.  В этом случае окно получает только сообщение о нажатии, несколько сообщений о перемещении и сообщение об освобождении.   
События, связанные с мышью 
Метод,  соответствующий событию OnMouseDown,  имеет несколько параметров:  procedure TForm1.FormMouseDown   (Sender : TObject ;  Button : TMouseButton ;    Shift : TShiftState ; X,Y : Integer ) ;  Кроме обычного параметра Sender, указывающего, на каком компоненте произошло нажатие, здесь присутствуют еще четыре: 
 1) Button – показывает, какая из трех кнопок мыши была нажата. Возможные значения: mbRight, mbLeft, mbCenter.  
2) Shift – показывает, какие влияющие на мышь клавиши были нажаты при возникновении события. Такой клавишей может быть Alt, Ctrl или Shift,  нажатая вместе с самой кнопкой мыши.  Данный параметр имеет тип множества, т.к. несколько клавиш могут быть нажаты одновременно. Это означает, что при анализе условия вы должны применять не проверку на равенство, а оператор in. 
3) X  и Y –  показывают координаты позиции мыши относительно клиентской области.  
Рисование в форме 
Canvas (холст) –  это область   в форме для рисунка и многих других графических компонентов.  Чтобы получить доступ к пикселям формы,  используйте свойство формы Canvas   и свойство Pixels  для Canvas. 
Свойство Pixels – это двумерный массив, соответствующий цветам отдельных пикселов в Canvas. Canvas.Pixels[10,20] соответствует цвету пикселя, который находится на 10 пикселов правее и на 20 пикселов ниже точки отсчета. Обращайтесь с массивом пикселов как с любым другим свойством; чтобы изменить цвет пикселя,  присвойте ему новое значение.  Чтобы определить цвет пикселя, – прочитайте значение.  
Этот класс создает  «канву», на которой можно рисовать чертежными инструментами - пером, кистью и шрифтом. Объекты класса  TСanvas автоматически создаются для всех видимых компонентов,  которые должны уметь нарисовать себя. Они инкапсулируют объекты Font, Pen, Brush, а также многочисленные методы, использующие эти объекты.  
Каждое свойство Canvas имеет воображаемое перо для рисования линий и контуров. Свойство Pen (перо) определяет цвет и размер линий и границ фигур. Свойствами пера являются его цвет, размер  (если это сплошная линия)  или стиль.  Работая с пером, вы можете прочитать  (но не изменить)  его текущую позицию  (свойство PenPos).  
Позиция пера определяет исходную точку следующей линии,  которую программа может нарисовать с помощью метода LineTo. Для изменения позиции вы можете применить метод MoveTo канвы.  
Свойство Brush (кисть)  определяет цвет очерченной поверхности.  Кисть используется для   закрашивания замкнутых фигур. Свойствами кисти являются ее цвет, стиль и иногда растровое изображение.  
Свойство Font  определяет шрифт,  который используется методом холста TextOut  для написания текста в форме. Шрифт имеет имя,  размер,  стиль, цвет и т.п.  
Черчение и рисование 
♦ Черчение –  вы обращаетесь к канве и вызываете некоторые ее методы.  Поскольку изображение не сохраняется, форма может частично или целиком потерять свое содержимое  (при закрытии окна формы другим окном или при уменьшении размера окна формы ).  
♦ Рисование – это технология, которая позволит приложению перерисовывать всю ее поверхность при любых возможных условиях.  Для вызова перерисовки можно использовать методы Invalidate, UpDate, ReFresh и Repaint.  
Порядок выполнения работы 
Задание № 1 
1. После запуска DELPHI необходимо создать новое приложение (если оно не создано автоматически)  с помощью меню File\New Application.  Далее необходимо создать свою папку, в которой нужно сохранить проект и модуль.    
2. Поместить в форму меню Color (на странице Standart Палитры Компонентов есть объект MainMenu) c командами PenColor и BrushColor,  которые будут соответственно изменять цвет пера и кисти с помощью стандартной диалоговой панели. 
Варианты индивидуальных заданий 
Вариант 1
Реализовать рисование так,  чтобы по нажатию мыши  (щелкая левой кнопкой и удерживая ее при перемещении мыши по горизонтали и вертикали)  рисовался эллипс нужного размера и цвета, а используя ту же технологию и удерживая клавишу SHIFT, можно было рисовать прямоугольники необходимого размера и цвета.  
Вариант 2  
Реализовать рисование так,  чтобы по нажатию мыши  (щелкая левой кнопкой и, удерживая ее при перемещении мыши по горизонтали и вертикали) рисовалась окружность произвольного радиуса и цвета, а используя ту же технологию и удерживая клавишу ALT,  можно было рисовать отрезки различной длины и цвета.   
Вариант 3 
Реализовать рисование так,  чтобы по нажатию мыши  (щелкая левой кнопкой и удерживая ее при перемещении мыши по горизонтали и вертикали) рисовалась окружность произвольного радиуса, а щелкая правой кнопкой мыши и удерживая ее, можно было нарисовать эллипс любого размера и цвета.  
Вариант 4  
Реализовать рисование так,  чтобы по нажатию мыши  (щелкая левой кнопкой и удерживая ее при перемещении мыши по горизонтали и вертикали)  рисовались отрезки произвольной длины и цвета,  а используя ту же технологию и удерживая клавишу CTRL, можно было рисовать прямоугольники различного размера и цвета.   
Вариант 5  
Реализовать рисование так,  чтобы по нажатию мыши  (щелкая левой кнопкой и удерживая ее при перемещении мыши по горизонтали и вертикали) рисовалась окружность произвольного радиуса, а щелкая правой кнопкой мыши и удерживая ее можно было нарисовать квадрат любого размера и цвета.  
Некоторые  подсказки для реализации этой задачи 
- Запишите следующий код для события OnMouseDown:
 
if Button = mbLeft then
     begin
       Center.X := X;
       Center.Y := Y;
         if ssShift in Shift then
         Circle := False
       Else
         Circle := True;
     end;  
Переменна формы Circle типа Boolean определяет вид фигуры. Значения координат центра фигуры записываются в переменную формы Center  типа TPoint. 
Это будет выглядеть так:  
var    Form1: TForm1;
    Center, Radius: TPoint;
    Circle: Boolean;
2. Запишите следующий код для события OnMouseUp :
  Radius.X := abs(Center.X-X);
  Radius.Y := abs (center.Y-Y);
     if Circle then
         Canvas.Ellipse(Center.X-Radius.X, Center.Y-Radius.Y, Center.X+Radius.X, Center.Y+Radius.Y)
     Else
         Canvas.Rectangle(Center.X-Radius.X, Center.Y-Radius.Y, Center.X+Radius.X, Center.Y+Radius.Y);
3. Запишите следующий код для события  OnMouseMove:
  Caption: =Format ('Координаты: x=%d, y=%d ' , [X, Y]);
 Запустите приложение.  Если все сделано правильно,  то вы будете наблюдать изменение координат в заголовке формы при продвижении мыши, сможете рисовать окружности и эллипсы нужного размера  (щелкая кнопкой и удерживая ее при перемещении мыши по горизонтали и вертикали);  сможете рисовать прямоугольник нужного размера,  используя ту же технологию и удерживая клавишу Shift.
Задание № 2  
Начиная с оператора if,  код для события OnMouseUp  перенести в код для события OnPaint.  
1.  В код для события OnMouseUp вставить в конце вызов метода Invalidate ( который вызывает косвенно метод FormPaint, связанный с событием OnPaint).  
Это будет выглядеть так:  
begin  Radius.X:=abs(Center.X -X);  
Radius.Y:=abs(Center.Y-Y);
    Invalidate;
  end;  
2.  Запустить приложение.  При правильном выполнении всех инструкций, в форме будет рисоваться только одна фигура. 
3. Выполните первое задание для компонента PaintBox.     
На странице System Палитры Компонентов есть объект TPaintBox, который можно использовать для построения приложений типа графического редактора или,  например,  в качестве места построения графиков.  Никаких ключевых свойств, кроме Canvas,  TPaintBox не имеет, собственно, этот объект является просто канвой для рисования. Важно, что координаты указателя мыши,  передаваемые в обработчики соответствующих событий (OnMouseMove  и др.),  являются относительными,  т.е.  это смещение мыши относительно левого верхнего угла объекта TPaintBox,  а не относительно левого верхнего угла формы.  
4. Изучите возможности компонента Shape.    
На странице Additionally Палитры Компонентов есть объект TShape. TShape - простейшие графические объекты на форме типа круг, квадрат и т.п. Вид объекта указывается в свойстве Shape. Свойство Pen  определяет цвет и вид границы объекта. Brush  задает цвет и вид заполнения объекта.  Эти свойства можно менять как во время дизайна, так и во время выполнения программы.  
Немає коментарів:
Дописати коментар