Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Доброго времени суток ProgrammerPC
Да это возможно.
На похожий вопрос был ответ в 130 посте темы Visual Basic 2008
Там был вопрос про появляющийся фиолетовый цвет, при проектировки окна по изображению с альфа каналом (в последнем как раз и задаётся - что будет прозрачным).
На основе тех трёх строчек уже можно получить форму с произвольной формой, заданную в картинке с альфа каналом. Остаётся правда заголовок окна, его можно убрать задав регион отсекающий последний. Но после убирание заголовка формой затруднительно управлять, не говорю про команды свернуть, на весь экран и закрыть это и так надеюсь понятно, а элементарно передвинуть на экране. Для решение этого вопроса поможет вставка двух Win32 функции.
Код: Выделить весь код
Imports System
Imports System.Drawing
Imports System.Windows.Forms

Class Form1
    Inherits Form
    Private Declare Function ReleaseCapture Lib "user32" () As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Const WM_NCLBUTTONDOWN = &HA1, HTCAPTION = 2, HTLEFT = 10
    Const HTTOPRIGHT = 14, HTRIGHT = 11, HTTOP = 12, HTTOPLEFT = 13
    Const HTBOTTOM = 15, HTBOTTOMLEFT = 16, HTBOTTOMRIGHT = 17

    Shared Sub Main()
        Application.Run(New Form1)
    End Sub
    Sub New()
        Me.TransparencyKey = BackColor
        Dim Img As Bitmap = Bitmap.FromFile("Используемое изображение.gif")
        Me.BackgroundImage = Img

        Dim rect As New Rectangle(0, 0, Me.ClientSize.Width - 1, Me.ClientSize.Height - 1)
        Dim sz As New Size(Me.ClientSize.Width \ 5, Me.ClientSize.Height \ 5)

        Dim path As New Drawing2D.GraphicsPath()
        path.AddLine(rect.Right, rect.Top + 22, _
                     rect.Right, rect.Bottom)

        path.AddLine(rect.Left + 5, rect.Bottom, _
                     rect.Left + 5, rect.Top + 22)

        Dim winreg As New Region(path)

        Me.Region = winreg

    End Sub
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        ReleaseCapture()
        SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0)
    End Sub
End Class
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:18, 28-11-2009 | #2