Иво Салмре - Программирование мобильных устройств на платформе .NET Compact Framework


Программирование мобильных устройств на платформе .NET Compact Framework читать книгу онлайн
End Class
Листинг 13.4. Код формы для создания пользовательского элемента управления TextBox'-----------------------------------------------------------------
'Переменная для хранения нашего нового элемента управления TextBox
'-----------------------------------------------------------------
Private m_filteredTextBox As SocialSecurityTextBox
'-----------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Создать экземпляр нашего пользовательского элемента
' управления и поместить его в форму
'-----------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'Создать, позиционировать и разместить элемент управления
m_filteredTextBox = New SocialSecurityTextBox
m_filteredTextBox.Bounds = _
New System.Drawing.Rectangle(2, 2, 160, 20)
'Подключить обработчик событий
AddHandler m_filteredTextBox.TextChanged, _
AddressOf Me.textBox_TextChanged
'Задать родительский объект
m_filteredTextBox.Parent = Me
'Выделить элемент управления
m_filteredTextBox.Focus()
'Сделать данную кнопку недоступной, чтобы поверх данного объекта
'не был создан второй объект
SocialSecurityTextBox Button1.Enabled = False
End Sub
'----------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Этот обработчик подключается динамически при
' создании элемента управления
'----------------------------------------------------------------
Private Sub textBox_TextChanged(ByVal sender As Object, _
ByVal e As System.EventArgs)
If (m_filteredTextBox.IsFullValidInput = True) Then
label1.Text = "FULL SOCIAL SECURITY NUMBER!!!"
Else
Label1.Text = "Not full input yet..."
End If
End Sub
Листинг 13.5. код формы, демонстрирующий использование прозрачности ''----------------------------------------------------------------
'Размеры наших битовых образов и экранного изображения PictureBox
'----------------------------------------------------------------
Const bitmap_dx As Integer = 200
Const bitmap_dy As Integer = 100
'-------------------------------------------------
'Создает и прорисовывает изображение заднего плана
'-------------------------------------------------
Private m_backgroundBitmap As System.Drawing.Bitmap
Sub CreateBackground()
If (m_backgroundBitmap Is Nothing) Then
m_backgroundBitmap = New Bitmap(bitmap_dx, bitmap_dy)
End If
'Делаем битовую карту белой
Dim gfx As System.Drawing.Graphics
gfx = System.Drawing.Graphics.FromImage(m_backgrourdBitmap)
gfx.Clear(System.Drawing.Color.White)
'Рисуем текст черным
Dim myBrush As System.Drawing.Brush
myBrush = New System.Drawing.SolidBrush( _
System.Drawing.Color.Black)
Dim у As Integer
For у = 0 To bitmap_dy Step 15
gfx.DrawString("I am the BACKGROUND IMAGE...hello", Me.Font, myBrush, 0, y)
Next
'Очистить
myBrush.Dispose()
gfx.Dispose()
End Sub
'-------------------------------------------------
'Создает и прорисовывает изображение заднего плана
'-------------------------------------------------
Private m_foregroundBitmap As System.Drawing.Bitmap
Sub CreateForeground()
If (m_foregroundBitmap Is Nothing) Then
m_foregroundBitmap = New Bitmap(bitmap_dx, bitmap_dy)
End If
'Делаем всю битовую карту синей
Dim gfx As System.Drawing.Graphics
gfx = System.Drawing.Graphics.FromImage(m_foregroundBitmap)
gfx.Clear(System.Drawing.Color.Blue)
'Рисуем несколько фигур желтым
Dim yellowBrush As System.Drawing.Brush
yellowBrush = New System.Drawing.SolidBrush( _
System.Drawing.Color.Yellow)
gfx.FillEllipse(yellowBrush, 130, 4, 40, 70)
gfx.FillRectangle(yellowBrush, 5, 20, 110, 30)
gfx.FillEllipse(yellowBrush, 60, 75, 130, 20)
'Очистить
yellowBrush.Dispose()
gfx.Dispose()
End Sub
'-----------------------------------------------------------------
'Устанавливает размеры и местоположение PictureBox с левой стороны
'-----------------------------------------------------------------
Private Sub SetPictureBoxDimensions()
PictureBox1.Width = bitmap_dx
PictureBox1.Height = bitmap_dy
PictureBox1.Left = 20
End Sub
'---------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Отобразить изображение ЗАДНЕГО ПЛАНА в PictureBox
'---------------------------------------------------------------------
Private Sub buttonDrawBackground_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles buttonDrawBackground.Click
SetPictureBoxDimensions()
CreateBackground()
PictureBox1.Image = m_backgroundBitmap
End Sub
'-----------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Отобразить изображение ПЕРЕДНЕГО ПЛАНА в PictureBox
'-----------------------------------------------------------------------
Private Sub buttonDrawForeground_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles buttonDrawForeground.Click
SetPictureBoxDimensions()
CreateForeground()
PictureBox1.Image = m_foregroundBitmap
End Sub
'-----------------------------------------------------------------------
'ОБРАБОТЧИК СОБЫТИЙ: Наложить изображение ПЕРЕДНЕГО ПЛАНА на изображение
' ЗАДНЕГО ПЛАНА. Использовать МАСКУ ПРОЗРАЧНОСТИ, чтобы желтый
' цвет в изображении ПЕРЕДНЕГО ПЛАНА стал прозрачным и через
' него можно было видеть содержимое изображения
' ЗАДНЕГО ПЛАНА
'------------------------------------------------------------------------
Private Sub buttonDrawBackgroundPlusForeground_Click(ByVal _
sender As Object, ByVal e As System.EventArgs) _
Handles buttonDrawBackgroundPlusForeground.Click
SetPictureBoxDimensions()
CreateForeground()
CreateBackground()
'Получить объект Graphics изображения ЗАДНЕГО ПЛАНА, поскольку
'именно поверх него мы собираемся рисовать.
Dim gfx As System.Drawing.Graphics
gfx = System.Drawing.Graphics.FromImage(m_backgroundBitmap)
'-------------------------------------------------------
'Создать класс ImageAttributes. Этот класс позволяет нам
'задать прозрачный цвет на наших операций рисования
'-------------------------------------------------------
Dim trasparencyInfo As System.Drawing.Imaging.ImageAttributes
trasparencyInfo = New System.Drawing.Imaging.ImageAttributes
'----------------------
'Задать прозрачный цвет
'----------------------
trasparencyInfo.SetColorKey(System.Drawing.Color.Yellow, _
System.Drawing.Color.Yellow)
'Задать прямоугольник рисунка
Dim rect As System.Drawing.Rectangle = _
New System.Drawing.Rectangle(0, 0, _
m_backgroundBitmap.Width, m_backgroundBitmap.Height)
'-----------------------------------------------------------------------
'Нарисовать изображение ПЕРЕДНЕГО ПЛАНА поверх изображения ЗАДНЕГО ПЛАНА
'и использовать прозрачный цвет в ImageAttributes для создания окна
'прозрачности, через которое виден задний план
'-----------------------------------------------------------------------
gfx.DrawImage(m_foregroundBitmap, rect, 0, 0, _
m_foregroundBitmap.Width, m_foregroundBitmap.Height, _
System.Drawing.GraphicsUnit.Pixel, trasparencyInfo)
'Очистить
gfx.Dispose()
'Показать результат в виде растрового изображения
PictureBox1.Image = m_backgroundBitmap
End Sub
Листинг 13.6. Код формы, демонстрирующий загрузку встроенных ресурсов'-----------------------------------------------------------
'Загрузить изображение и отобразить его в объекте PictureBox
'-----------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
LoadImageFromResource()
PictureBox1.Image = m_myBitmapImage
End Sub
Private m_myBitmapImage As System.Drawing.Bitmap
'------------------------------------------------------------------
'Загрузить изображение, которое хранится в виде встроенного ресурса
'в нашей сборке
'------------------------------------------------------------------
Public Sub LoadImageFromResource()
'Если изображение уже загружено,
'то не имеет смысла делать это повторно.
If Not (m_myBitmapImage Is Nothing) Then
Return
End If
'----------------------------------------------------
'Получить ссылку на двоичную сборку нашего приложения
'----------------------------------------------------
Dim thisAssembly As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly()
'-------------------
'Получить имя сборки
'-------------------
Dim thisAssemblyName As System.Reflection.AssemblyName = _
thisAssembly.GetName()
Dim assemblyName As String = thisAssemblyName.Name
'-----------------------------------------------------------------------
'Извлечь поток изображения из нашей сборки и создать соответствующую ему
'битовую карту в памяти




