Прозрачность контролов

Для разработки прозрачных контролов нужно установить свойство BackStyle=0. Поставьте на контрол лэйбл с прозрачным фоном. Если теперь добавить второй проект и установить этот контрол на форму, то лэйбла не будет видно. Выберете для лэйбла шрифт TrueType (например Times New Roman). Теперь надпись будет видна. Правда регион вычисляется несколько коряво, поэтому лучше использовать крупный шрифт. Добавьте Shape со свойством BackStyle=1. Теперь если Вы на контроле нарисуете линию, то она будет видна в том месте, где находится Shape (правда лишь в том случае, если у контрола свойство AutuRedraw=False, иначе линии не будет видно). Помимо это можно делать прозрачные рисунки с помощью свойств Picture и MaskPicture. Для этого свойство Picture должно содержать изображение рисунка (т.е. когда прозрачная часть обозначена черным цветом, а непрозрачная - обычными цветами, которые содержит рисунок), свойство MaskPicture должно содержать маску (т.е. когда прозрачная часть обозначена белым цветом, а непрозрачная - черным). В свойстве MaskColor укажите белый цвет. Для примера можете использовать следующие рисунки:


Изображение

Маска

В прозрачных контролах есть один недостаток - прозрачная часть не реагирует на события (например на щелчок мыши). Это можно исправить, имитируя прозрачность путем копирования в контрол изображения родительской формы. Для примера поставьте на контрол 2 PictureBox с названиями PicImage и PicMask. Установите у них свойства BorderStyle=0, AutoSize=True, AutoRedraw=True, Visible=False. Загрузите в одно из них изображение, в другое - маску. Установите у контрола свойствa BackStyle=1 и AutoRedraw=True. Для наглядности поместите на форму, где будет находиться контрол какой-нибудь рисунок. Введите следующий код
Private Sub UserControl_Show()
' Подгоняем размер контрола к размеру картинки
UserControl.Width = PicImage.Width
UserControl.Height = PicImage.Height
' Для каждого контрола в родительской форме
For Each Control In Parent.Controls
' Если контрол соответствует нашему контролу
If Control.Name = Ambient.DisplayName Then
' Копируем изображение с родительской формы
PaintPicture Parent.Image, 0, 0, Width, Height, _
Control.Left, Control.Top, Width, Height
' Накладываем маску
PaintPicture PicMask.Picture, 0, 0, , , , , , , vbSrcAnd
' Накладываем изображение
PaintPicture PicImage.Picture, 0, 0, , , , , , , vbSrcPaint
Exit For
End If
Next
End Sub
Hosted by uCoz