- •Глава 12. Обработка ошибок с помощью исключений
- •Глава 13. Перегрузка операторов и нестандартные преобразования
- •Глава 14. Делегаты и обработчики событий
- •Глава 15. Программирование многопоточности
- •Получение метаданных с помощью отражения
- •Глава 17. Взаимодействие с неуправляемым кодом
- •Глава 18. Работа со сборками
- •Чтение полей разных типов
- •Выполнение sql-команд
- •Настройки
- •Страницы
- •Примеры
- •Клиентские приложения
- •Влияние Microsoft
- •Влияние vb.Net
- •Разработка gui
- •Разработка веб-приложений
- •Влияние платформы на самосознание программистов
- •Тигры рвутся вперёд
- •Благодарности
- •Введение
- •Предыстория
- •Использование кода
- •Устанавливаем любимое соединение
- •Обзор команд
- •Не забывайте закрыть, когда вы закончили!
- •Когда хорошие соединения становятся плохими
- •Свободные концы
- •Введение
- •Использование кода
- •Пример вывода
- •Интересующие моменты
- •Не много теории...
- •Прозрачность (Transparency)
- •Пользовательские редакторы стадии проектирования
- •Расширение функциональности контрола Shape
- •Пример - Демо Приложение
- •Возможные улучшения
- •Заключение
Не много теории...
В VB6 элемент Shape представляет из себя графический и в то же время не большой по размеру контрол. На самом деле он является не настоящим контролом и не обладает таким свойством как Hwnd . В .NET все подобные элементы являются полноценными контролами имеющими свойство Hwnd. В то же время, в Visual Studio .NET не существует контрола эквивалентного Shape, зато есть различные другие классы в библиотеке .NET library, которые при использовании в совокупности могут быть использованы для реализации контрола Shape.
В общих чертах контрол Shape - это некое изображение, которое имеет строго определенную форму. Для управления функциональностью изображения предусмотрены классы Image и Bitmap. Для фигур предусмотрен класс GraphicsPath.
Данные классы являются ключевыми компонентами при реализации контрола Shape.
Прозрачность (Transparency)
В VB6 мы можем использовать свойство DrawMode контрола Shape для достижения эффекта прозрачности (чтобы видеть сквозь контрол). Свойство DrawMode все еще может быть реализовано с использованием GDI/GDI+ функций в .NET, но существует более простое и элегантное решение. .NET поддерживает 32 битную ARGB прорисовку. В VB6 так же поддерживаются 32 битные ARGB значение, которые могут быть назначены цветам, но компонент A (Alpha) такого значения никогда не используется.
Для многих стандартных контролов, порожденных от System.Windows.Form.Control, существуют по крайней мере два свойства, которые используют значения цвета Color: BackColor и ForeColor. Каждое из этих свойств мы можем связать со значением ARGB.
Как же мы можем провести тест для прозрачности? Ответ очевиден - использовать свойство background. Все контролы должны помещаться в контейнеры. Для большинства случаев таким контейнером является форма. В то же время есть контейнеры, которые сами содержат другие контейнеры, например, контрол панели Panel. Для испытания прозрачности мы можем установить в качестве фона контейнера какую-нибудь картинку, а для основного цвета контрола, находящегося в этом контейнере установить значение цвета с where the Alpha меньше, чем 255 (например 100). Теперь вы сможете увидеть картинку-подложку сквозь контрол. Чем ниже значение Alpha, тем отчетливее виден оригинальный фон (background).
Фигура
В VB6 мы так же можем создать пользовательский контрол с различными фигурами. Но это может быть сделано только посредством вызовов Win32 API функций. В .NET каждый контрол имеет свойство Region, которое может быть использовано для задания формы. Когда происходит отрисовка контрола, Windows будет рисовать пиксели только внутри такого региона. Region может быть создан путем определения внешней границы (контура элемента). Контур может быть создан при помощи объекта GraphicsPath. Код, приведенный ниже, создает объект GraphicsPath, добавляет фигуру "эллипс" к траектории, и потом использует эту траекторию для инициализации нового объекта Region, который будет связан со свойством Region контрола. В результате контрол примет форму соотнесенную с данным Region, которым в данном примере является эллипс.
GraphicsPath _outline=new GraphicsPath();
_outline.AddEllipse(0,0,
100,
100);
this.Region=new Region(_outline);
