Давайте попробуем нарисовать по пикселям график синусоиды на канве формы.
Для этого в обработчик события формы OnPaint (прорисовка) можно вставить следующий код: procedure TForm1.FormPaint(Sender: TObject); var X,Y: real; // координаты функции PX,PY: longint; // координаты пикселей begin Color:= clWhite; for PX:= 0 to ClientWidth do begin {X — аргумент графика, соответствующий пикселю с координатой РХ} X:= PX*4*Pi/ClientWidth; Y:=Sin(X); {PY — координата пикселя, соответствующая координате Y} PY:=trunc(ClientHeight - (Y+1)*ClientHeight/2); {Устанавливается черный цвет выбранного пикселя (О яркости)} Canvas.Pixels [PX, PY]:= 0; end; end;
Выполните это тестовое приложение и вы увидите результат, представленный на рис. 1 а. График синусоиды получился, хотя и не очень хороший, т.к. разбивается на отдельные точки — пиксели. Рис. 1а Попробуйте сделать сами простенькую мультипликацию — движущуюся окружность. Начните новое приложение и в раздел implementation вставьте объявление var X,Y: integer; Тем самым вы введете глобальные переменные X и Y — текущие координаты изображения. В событие формы OnPaint вставьте операторы Canvas.Brush.Color:= clWhite; Color:= clWhite; Canvas.Pen.Mode:= pmNotXor; Первый из этих операторов задает белый цвет кисти Brush. Значит ваша окружность будет закрашена внутри белым цветом. Второй оператор задает белый цвет фона поверхности формы. Третий оператор устанавливает режим пера pmNotXor, который позволит вам стирать прежнее изображение прежде, чем нарисовать новое. Даже самая простая мультипликация нуждается в синхронизации. Иначе скорость движения будет определяться быстродействием компьютера. Поэтому перенесите на форму компонент Timer (не визуальный компонент, поэтому на форме изображаться не будет)— таймер со страницы "System". Задайте его свойство Interval равным, например, 30 (это время выдержки в миллисекундах, но реальное время выдержки будет больше) и установите свойство Enabled равным false (это означает, что таймер не будет запускаться автоматически в момент запуска приложения).
В обработчик события этого компонента OnTimer вставьте операторы Canvas.Ellipse(Х-5, Y, X+5, Y-10); // Стирание прежнего изображения Inc(X); Canvas.Ellipse(Х-5, Y, X+5, Y-10); // Рисование нового изображения if (X >= ClientWidth-20) then Timer1.Enabled:= false; // Останов при достижении конца формы Первый из этих операторов рисует окружность в том месте, где она была нарисована ранее, т.е. стирает прежнее изображение. Далее увеличивается на единицу функцией Inc текущая координата X и изображение окружности рисуется в новой позиции. Последний оператор останавливает изображение у края формы. Теперь перенесите на форму кнопку Button и в обработчик щелчка на ней поместите операторы: Х:=10; Y:=100; Canvas.Ellipse(X-5, Y, X+5, Y-10); Timer1.Enabled:=true; Первые два оператора задают начальные координаты окружности. Третий оператор рисует окружность в ее начальном положении, а четвертый — запускает таймер. (Чтобы запустить анимацию без кнопки можно поместить вышеописанный код в событие OnCreate формы) Оттранслируйте приложение, запустите его на выполнение, щелкните на кнопке. Вы увидите изображение окружности, перемещающееся по форме слева направо.
На канве можно отображать не только программно создаваемые изображения, но и изображения, хранящиеся в графических файлах. Сама канва не имеет метода загрузки изображения из файла. Поэтому загружать файл надо в какой-нибудь другой графический объект, способный воспринимать информацию графических файлов. А затем переписывать изображение из этого объекта на канву с помощью метода канвы Draw. Его описание: procedure Draw(X, Y: Integer; Graphic: TGraphic); Здесь параметры Х и Y определяют координаты левого верхнего угла размещения изображения на канве, a Graphic — объект, хранящий информацию. В качестве такого объекта может выступать, например, объект типа TBitMap, предназначенный для хранения битовых матриц. Давайте посмотрим, как все это выглядит на практике.
Откройте новое приложение, перенесите на форму компонент OpenPictureDialog со страницы "Dialogs" (это компонент диалога открытия графических файлов) и кнопку Button. Разместите OpenPictureDialog в любом месте формы, так как этот компонент не визуальный, а кнопку разместите внизу формы. В обработчик щелчка на кнопке занесите код: procedure TForm1.Button1Click(Sender: TObject); Var BitMap:TBitMap; Begin // Выбор пользователем графического файла
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|