русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Обновление изображения

Помимо объекта Image, рисовать можно непосредственно на форме или панели. Например, проведем белые диагональные полосы на форме, превратив ее в подобие Андреевского флага. Для этого напишем следующий обработчик нажатия на кнопку:

procedure TForm1.Button1Click(Sender: TObject);

begin

with Self.Canvas do

begin

Pen.Color:=clWhite;

Pen.Width:=20;

MoveTo(0,0);

LineTo(Self.ClientWidth,Self.ClientHeight);

MoveTo(Self.ClientWidth,0);

LineTo(0,Self.ClientHeight)

end

end;

Данный фрагмент проводит две белые полосы шириной в 20 пикселов по диагонали формы. Точка (0,0) формы находится в ее левом верхнем углу. Обратите внимание, что для определения размеров формы используются свойства формы ClientWidth и ClientHeight, а не просто Width и Height. Дело в том, что свойства Width и Height содержат полный размер формы, включая полоску заголовка, а ClientWidth и ClientHeight – лишь размеры так называемой клиентской части формы, на которой можно размещать другие объекты.

Если запустить нашу программу и щелкнуть по кнопке, полосы действительно отрисуются (Рис. 7.14, а). Но... Попробуем перетащить окно программы так, чтобы оно частично оказалось за пределами экрана, а потом вытащим его обратно. О, ужас! На части окна, побывавшей за границей экрана, линии стерлись! (Рис. 7.14, б). Причем при использовании объекта Image подобный эффект не наблюдается.

а) б)

Рис. 11.14 Потеря части изображения.

Как бороться с таким безобразием? Увы, единственный способ – перерисовывать картинку всякий раз, когда часть изображения затирается. Для этого вынесем все команды рисования в отдельную процедуру Draw:

procedure Draw;

begin

with Form1.Canvas do

begin

Pen.Color:=clWhite;

Pen.Width:=20;

MoveTo(0,0);

LineTo(Form1.ClientWidth,Form1.ClientHeight);

MoveTo(Form1.ClientWidth,0);

LineTo(0,Form1.ClientHeight)

end

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Draw

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

Draw

end;

В данном фрагменте добавлен обработчик события формы OnPaint. Это событие происходит всякий раз, когда форму надо перерисовывать. Соответственно в такие моменты и вызывается процедура Draw. Теперь с исчезновениями частей изображения покончено.

Просмотров: 580


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.