Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Нестандартные приемы программирования Delphi - Ревич Ю.

Ревич Ю. Нестандартные приемы программирования Delphi — Спб.: БХВ-Петербург, 2005. — 560 c.
ISBN 5-94157-686-2
Скачать (прямая ссылка): nestandartniepriemiprogrammirovanie2005.djvu
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 218 >> Следующая

PCharEngRus:=LockResource(LoadResource(hlnstance,
(EindResource(hlnstance, 'CharEngRus', RT_RCDATA)))); if PCharEngRus =
nil then снеправильный pecypc> else CharEngRus:=PCharEngRusA; end.
Метод загрузки для произвольного ресурса, как видите, несколько сложнее,
чем в случае BitMap или строки. Переменная PCharEngRus будет указывать на
начало ресурса в исполняемом файле. Чтобы не мучиться потом с
указателями, мы соорудили в программе переменную подходящего типа
CharEngRus, которая сразу при запуске инициализируется значением массива
из ресурса. Переменную можно заменить и на типизируемую константу, т. к.
я уже говорил, что в Delphi различие между типизируемыми константами и
переменными совершенно гомеопатическое.
ГЛАВА 12
Бабушка в окошке
Нестандартные окна
Сложный ремонт оконных переплетов может произволИТ1> только тот, кто
хорошо овладел основами столярного дела, умеет выстругать бруски
заданного размера и профиля, хорошо подгонять их и склеивать.
С. Нвапчикоо. "Учись делать сам"
Прежде чем приступать к увлекательному занятию по созданию окон
нетрадиционной формы, как следует подумайте над аопросом: а оно вам надо?
Одной из причин (но, конечно, не единственной), по которой я никогда не
пользуюсь программами из пакета Norton Utilities for Windows, было
совершенно отталкивающее впечатление, произведенное на меня главным окном
этой программы. На кого рассчитана эта картинка в стиле иллюстраций к
Толкие-ну? Напомним, что речь идет не о Media Player, а о чисто
вспомогательных программах, которые просто обязаны быть как можно
незаметнее. Не рискуя сильно ошибиться, могу предположить, что
разработчики из Symantec серьезно больны весьма распространенной
болезнью- показать всему миру, какие они крутые программисты. Не дай бог
вам, читатель, заболеть этим недугом - вылечиться бывает весьмв трудно.
Конечно, на вкус и цвет, как говорится... но на всякий случай я обхожу
как можно дальше продукцию этой фирмы, представив себе, что они могут
наворотить, например, в Norton Antivirus, когда программа скрыта с глаз
пользователя.
Но в других случаях украшательства в программе вполне уместны - и мы с
вами именно для этого и использовали заставку при запуске SlideShow. На
ее примере мы далее покажем, как можно делать окна нестандартной формы и
с нестандартным поведением, а пока остановимся на том, как это вообще
делается.
Для того чтобы менять форму окна, в Windows есть специально
предусмотренный механизм создания регионов (regions). Регионы могут быть
квадрат-
274
Глава 12
ные (CreateRectRgn), с закругленными краями (сгс-аteRoundRectRgn),
эллиптические (CreateEllipticRgn), ПРОИЗВОЛЬНОЙ формы (CreatePolygonRgn)
И даже составленными из набора произвольных полигонов либо стандартных
форм (CreatePolyPolygonRgn, CombineRgn). Как ВЫ догадались, В скобках ДЛЯ
каЖДОГО случая приведены функции, с помощью которых такой регион
создается. Позже вы увидите практические примеры использования некоторых
из них, а пока заметим, что параметры функций, естественно, для разных
случаев разные, но общим для них остается указание дескриптора объекта,
форму которого предполагается изменить. Вот общий порядок использования
функций на примере создания круглого окна диаметром 400 пикселов:
var fReg:hRGN;
fReg:"CreateEllipticRgn(0,0,400, 400);
SetWindowRgn<Formi.handle,fReg,True);
Если вставить эту процедуру В обработчик события, например, Formi.Create,
то при создании окно главной формы сразу станет круглым. Причем в
качестве первого параметра необязательно использовать дескриптор именно
формы, это может быть любой компонент, и даже канва формы
(Formi.canvas.Handle) или другого компонента. Если вы зададите для канвы
заставки в проекте SlideShow такую форму, то получите круглую картинку в
прямоугольном окне. Только имейте в виду, что если объект, для которого
задается конфигурация, изначально меньше по размерам, чем заданная
область, то или ничего не произойдет вообще, или отрежется только часть
компонента. Тут мы пришли к крупнейшему недостатку данного механизма:
реально все эти функции управляют только отображением заданной области,
деформировать регион нельзя. Нельзя, например, встввить картинку в
непрямоугольный компонент так, чтобы она должным образом изменила свою
форму. Нельзя создать круглую кнопку только с использованием этих функций
- ее сначала придется отдельно нарисовать. Заголовок полукруглого окна
также придется рисовать самостоятельно. Мало того, нельзя даже
автоматически задать вывод текста в фигурный компонент так, чтобы текст
не обрезался, придется придумывать собственные сложные процедуры. Если
поразмыслить, то все это отчасти оправданно тем, что деформация любого
изображения требует использования специальных алгоритмов и довольно
значительного количества вычислительных ресурсов, но все же это
ограничение намного снижает потенциал метода.
И все же указанные функции позволяют получить многие полезные эффекты.
Предыдущая << 1 .. 108 109 110 111 112 113 < 114 > 115 116 117 118 119 120 .. 218 >> Следующая