Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Ishodniki.Ru » Online книги » C++ Builder по шагам Шаг 35 - Выведение внеэкранных образов. Есть две канвы. Надо с одной канвы на другую перебросить изображение. Что для этого надо? Подходящий метод! На самом деле копирование канвы гораздо более эффективная операция, чем динамическое построение графики. Если кто обращал внимание, при выведении сложных объектов экран мерцает. Казалось бы, подумаешь - пусть пользователь глаза себе порет ;). Но все же лучше такого не делать. Поэтому общая методика 2d графики приложений такова - строится внеэкранный образ на какой-нибудь канве (невидимой), а затем перебрасывается на канву формы или PaintBox'а. Кстати о PaintBox'е. Вообще-то считается, что лучше рисовать на PaintBox'е. В Хелпе на это дается ряд причин. Этот компонент еще будет рассмотрен - он с палитры System. Если кто обращал внимание, при минимизации формы, или закрытия ее окна другим приложением, то, что нарсовано на канве стирается. Скажете вы - а как же сделать, чтобы не стиралось. Дело в том, что у видимых компонентов есть такое событие - OnPaint, которое соответствует редмондовскому WM_PAINT. Туда-то и надо писть обработчик выведения рисунка на канву. Тогда он каждый раз будет обновляться. Ушел я от темы. Для копирования внеэкранных образов существуют методы. DrawСамый простой вариант. На заданных координатах X,Y выводится объект типа TGraphic. TGraphic - абстрактный (со всеми виртуальными методами) класс который не может быть прямо использован в программе. От него только наследуют. А именно наследуют - TBitmap, TIcon, TMetaFile и прочее. Это всем знакомые картинки, иконки и метафайлы. То есть - .bmp, .ico, .wmf, .emf. Еще есть такой класс, как TJPEGImage, позволяющий отображать сжатые в JPEG изображения, и уж совсем замечательный класс TOleGraphic, позволяющий воспроизводить OLE-изображения. Правда, прямо его использовать нельзя, можно только наследовать. StretchDrawТо же самое, что и предыдущее, только графический объект автоматически масштабируется по параметру TRect. Учтите, что объекты типа TIcon не масштабируются, так что, скорее всего, вылетит ошибка, если Вы попробуете это сотворить. Как пример: Canvas->StretchDraw(TRect(0,0,40,40),MyGraphic); Это стандартный вариант обращения к функции. CopyRectКопирует участок другой канвы на данную канву. Область-получатель - первый параметр, другая канва - второй, а область, из которой копируется участок - третий. CopyModeЭто собственно - способ копирования, напоминает свойство Mode пера. Правда, значения у него совсем другие. Я не буду на этом свойстве останавливаться, а то слишком много времени уйдет. Хочу только сказать, что оно относится ко всем вышеперечисленным функциям. |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь
Самая свежая информация uniqlo тут.
Рейтинги
|