Как сделать прозрачным PictureBox?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Как сделать прозрачным PictureBox?

Сообщение GeeZeR » 11.12.2007 (Вт) 2:42

Парни, подскажите как вывести на экран полупрозрачный png или gif, чтобы кусок PictureBox был прозрачным, вот к примеру картинка:

Изображение

Первый элемент PictureBox содержит изображение стены, а второй PictureBox наложен сверху и содержит изображение двери. Дверь тут полукруглая, верхние углы у картинки прозрачные. Вот собственно в этом и проблема как сделать так чтоб PictureBox содержащий рисунок двери был тоже прозрачным? Поставил BackColor - Transparent в свойствах PictureBox и ничего.
Понимаю что вопрос из разряда rtfm, но я блин в поиске уже утонул, помогите плз.

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 11.12.2007 (Вт) 11:11

Люди помогите плиз (мне это тоже очень нуно) инфы по теме не нашел (перерыл все и инет)!
Имя ничего не значит, НО ...
... я работаю над собой!

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 11.12.2007 (Вт) 13:03

pictureBox1.BackColor = Color.Transparent;

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 11.12.2007 (Вт) 19:10

Не работает:


Код: Выделить всё
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        PictureBox2.BackColor = Color.Transparent
        PictureBox1.Image = Image.FromFile("img\wall.png")
        PictureBox2.Image = Image.FromFile("img\door.png")

    End Sub

End Class


Я поставил даже так:


Код: Выделить всё
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        PictureBox2.BackColor = Color.Empty
        PictureBox1.Image = Image.FromFile("img\wall.png")
        PictureBox2.Image = Image.FromFile("img\door.png")

    End Sub

End Class


Всё равно PictureBox выглядывает. Жду помощи.

Вот файл проекта на всякий случай.
Вложения
PictureBox.rar
(462.95 Кб) Скачиваний: 274

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.12.2007 (Вт) 19:25

Как вариант: пересохрани картинку в .gif с указанием прозрачного цвета...
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 11.12.2007 (Вт) 20:07

AnarCky Подскажи пожалуйста как указать прозрачный цвет? С .gif я пробовал - то же самое получается. Есть мысль прозрачные углы картинки с дверью залить к примеру малиновым цветом, а потом программно исключить его или сделать прозрачным, но не будут ли края PictureBox выглядывать опять?

Изображение

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 11.12.2007 (Вт) 20:38

вот... покопался в книжке. проверь - должно работать:
Код: Выделить всё

Dim bmp As New Bitmap
bmp = Image.FromFile("img\door.png")
Dim g As Graphics = Graphics.FromImage(bmp)
Dim backColor As Color = bmp.GetPixel(3, 3)   'этот метод используется чтоб получить цвет пикселя координатами (3; 3)
bmp.MakeTransparent(backColor)
PictureBox2.Image = bmp


впринципе, если точно знаешь цвет фона, то можно сразу подставить в метод MakeTransparent()
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 11.12.2007 (Вт) 21:22

Бейсик ругается на Dim bmp As New Bitmap:
"Overload resolution failed because no accessible 'New' accepts this number of arguments."

Я нашёл в мсдн пару зацепок, но не представляю как это применить:

1) Свойство BackColor не поддерживает прозрачные цвета, если бит стиля ControlStyles.SupportsTransparentBackColor не задан как true.
http://msdn.microsoft.com/library/rus/default.asp?url=/library/RUS/cpref/html/frlrfSystemWindowsFormsControlClassBackColorTopic.asp

2) В таблице для свойства SupportsTransparentBackColor сказано:
При значении true элемент управления принимает свойство BackColor с альфа-составляющей менее 255 для имитации прозрачности. Прозрачность имитируется, только если разряд UserPaint имеет значение true и родительский элемент управления является производным от Control.
http://msdn.microsoft.com/library/rus/d ... stopic.asp

Я не въезжаю как всё это дело оформить

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 11.12.2007 (Вт) 21:55

Рисуй сразу на форме.
Код: Выделить всё
Public Class Form1
  Dim ImgDoor As Bitmap = Image.FromFile("img\door.png")
  Dim ImgWall As Bitmap = Image.FromFile("img\wall.png")

  Private Sub Form1_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated
    Me.DoubleBuffered = True
  End Sub

  Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    Dim G As Graphics = e.Graphics
    G.DrawImage(ImgWall, 59, 25)
    G.DrawImage(ImgDoor, 182, 150)
  End Sub
End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 11.12.2007 (Вт) 22:10

Nord777
Рисовать на форме не вариант - потом придется контролированть клики и курсор мыши в границе двери
Имя ничего не значит, НО ...
... я работаю над собой!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 11.12.2007 (Вт) 22:28

Рисовать на форме не вариант - потом придется контролированть клики и курсор мыши в границе двери
И в чем проблема? +3 строки кода. Зато всё под контролем.

Код: Выделить всё
Public Class Form1
  Dim ImgDoor As Bitmap = Image.FromFile("img\door.png")
  Dim ImgWall As Bitmap = Image.FromFile("img\wall.png")
  Dim DoorRect As Rectangle

  Private Sub Form1_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated
    Me.DoubleBuffered = True
    DoorRect = New Rectangle(182, 150, ImgDoor.Width, ImgDoor.Height)
  End Sub

  Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
    If DoorRect.Contains(e.Location) Then MsgBox("Door clicked")
  End Sub

  Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    Dim G As Graphics = e.Graphics
    G.DrawImage(ImgWall, 59, 25)
    G.DrawImage(ImgDoor, DoorRect)
  End Sub
End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 11.12.2007 (Вт) 23:18

Nord777
А если нуно вставить анимированный рисунок (мельница или облачко)?
Имя ничего не значит, НО ...
... я работаю над собой!

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 11.12.2007 (Вт) 23:24

Nord777, любопытно спасибо за вариант.

Ну а если удобнее использовать именно PictureBox? Есть же какая-то возможность сделать именно сам PictureBox прозрачным насколько я понял из справки (ведь сам по себе PictureBox способен содержать прозрачный рисунок):

Свойство BackColor не поддерживает прозрачные цвета, если бит стиля ControlStyles.SupportsTransparentBackColor не задан как true.
http://msdn.microsoft.com/library/rus/d ... rTopic.asp


То есть получается если задать этот самый ControlStyles.SupportsTransparentBackColor как true, то запись типа:
PictureBox2.BackColorплюс-чего-то-там
выдаст нам прозрачный PictureBox с картинкой?
Ведь будет легче и естественнее использовать PictureBox с такими заданными свойствами, чем отрисовывать это всё прямо на форме.

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 11.12.2007 (Вт) 23:48

Свойство BackColor не поддерживает прозрачные цвета, если бит стиля ControlStyles.SupportsTransparentBackColor не задан как true
Может кто-то знает как или где установить ControlStyles.SupportsTransparentBackColor в true
Имя ничего не значит, НО ...
... я работаю над собой!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 12.12.2007 (Ср) 0:58

Может кто-то знает как или где установить ControlStyles.SupportsTransparentBackColor в true
Control.Setstyle(...., true)
Только вам это не поможет.
Control.Region поможет, туда копайте.

вот небольшой пример:
Код: Выделить всё
Imports System.Drawing.Drawing2D
Imports System.Drawing

Public Class Form1
    Dim GP As New GraphicsPath
    Dim P As New Pen(Color.Black, 5)

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Me.ControlBox = False
        Me.Size = New Size(380, 300)
        Me.Text = ""


        Dim FF As New FontFamily("Arial BLack")
        Dim Pnt As New PointF(0.0!, 50.0!)
        Dim Rect As Rectangle = Me.ClientRectangle
        Dim FS As FontStyle = FontStyle.Regular
        Dim SF As New StringFormat()
        SF.LineAlignment = StringAlignment.Center

        GP.AddEllipse(Me.ClientRectangle)
        GP.AddString("Round", FF, FS, 100.0!, Pnt, SF)
        Me.Region = New Region(GP)
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

        e.Graphics.FillPath(Brushes.AliceBlue, GP)
        e.Graphics.DrawPath(P, GP)
    End Sub

End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 12.12.2007 (Ср) 2:19

Ну хорошо. Но это пример статик?!
А мне необходи динамическое отображение (gif'а, к примеру)
Имя ничего не значит, НО ...
... я работаю над собой!

AnarCky
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 229
Зарегистрирован: 20.11.2006 (Пн) 20:12
Откуда: Россия, Екатеринбург.

Сообщение AnarCky » 12.12.2007 (Ср) 6:12

2программист
порасуждай логически: у тебя анимированноое изображение, это по сути набор кадров. и один и тот же пиксель, на одном и другом кадре может иметь разный цвет (и скорее всего он и будет иметь разный цвет)... так что здесь графический редактор в руки и вперед... и кстати у меня пересохранение в .gif (статичный) с указанием прозрачного цвета работает... :o
Компьютеры были придуманы чтобы исправлять ошибки людей. Но кто же тогда будет исправлять ошибки компьютера?..

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 12.12.2007 (Ср) 18:51

Nord777, спасибо ещё раз - я поиграл вчера с твоим кодом - всё это легко применяется и отдельно для PictureBox, только исчезает он вместе с картинкой - можешь как-нибудь попробовать наложить вместо букв картинку?
Ещё мне вот тут мысля пришла - у PictureBox есть свойство BackgroundImage, так вот - можно поместить это изображение позади основного рисунка (в пикчербоксе получится 2 картинки - одна над другой), и выводить на бэк-рисунок изображение того, что находится под PictureBox - получится такая себе эмуляция прозрачности. Есть у кого-нибудь такое решение?

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 12.12.2007 (Ср) 19:05

AnarCky писал(а): и кстати у меня пересохранение в .gif (статичный) с указанием прозрачного цвета работает... :o


в смысле работает? проект в студию плз

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 13.12.2007 (Чт) 19:11

Nord777, спасибо ещё раз - я поиграл вчера с твоим кодом - всё это легко применяется и отдельно для PictureBox, только исчезает он вместе с картинкой - можешь как-нибудь попробовать наложить вместо букв картинку?
Покажи как это делал ты.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 13.12.2007 (Чт) 22:45

В общем я конечно пошаманил не совсем представляя что делаю:

Код: Выделить всё

Imports System.Drawing.Drawing2D
Imports System.Drawing

Public Class Form1
    Dim GP As New GraphicsPath
    Dim P As New Pen(Color.Black, 5)


    '---БЛОК для PictureBox2---
    Private Sub PictureBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox2.Click
        Dim FF As New FontFamily("Arial BLack")
        Dim Pnt As New PointF(0.0!, 150.0!)
        Dim Rect As Rectangle = PictureBox2.ClientRectangle
        Dim FS As FontStyle = FontStyle.Regular
        Dim SF As New StringFormat()
        SF.LineAlignment = StringAlignment.Center

        GP.AddEllipse(PictureBox2.ClientRectangle)
        GP.AddString("Round", FF, FS, 100.0!, Pnt, SF)
        PictureBox2.Region = New Region(GP)
    End Sub

    Private Sub PictureBox2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox2.Paint
        e.Graphics.FillPath(Brushes.AliceBlue, GP)
        e.Graphics.DrawPath(P, GP)

    End Sub
    '-----------------------------------------------------------------------------


    '---Блок для PictureBox3---
    Private Sub PictureBox3_BackColorChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles PictureBox3.BackColorChanged
        Dim FF As New FontFamily("Arial BLack")
        Dim Pnt As New PointF(0.0!, 150.0!)
        Dim Rect As Rectangle = PictureBox3.ClientRectangle
        Dim FS As FontStyle = FontStyle.Regular
        Dim SF As New StringFormat()
        SF.LineAlignment = StringAlignment.Center

        GP.AddEllipse(PictureBox3.ClientRectangle)
        GP.AddString("Round", FF, FS, 100.0!, Pnt, SF)
        PictureBox3.Region = New Region(GP)
    End Sub

    Private Sub PictureBox3_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox3.Paint
        e.Graphics.FillPath(Brushes.AliceBlue, GP)
        e.Graphics.DrawPath(P, GP)
    End Sub
    '-------------------------------------------------------------------------------

End Class


Я вместо формы подставил этот код для PictureBox, и изменил события : для PictureBox2 - Click, а для PictureBox3 - BackColorChanged (ставил LoadCompleted, но эффекта не было).

Вид в дизайнере:
Изображение

Если закомментировать блок для PictureBox3, и кликнуть на левой двери (PictureBox2), то получим такое:
Изображение


Если закомментировать блок для PictureBox2, то получим такое:
Изображение

Если раскомментировать оба блока и кликнуть на левой двери, то будет так:
Изображение
Тут почему-то рисунок PictureBox3 появился на PictureBox2.

Короче такая фигня. Хз может она поможет если к примеру в рисунке двери залить каким-нибудь цветом прозрачные углы, а потом программно исключить его с помощью всей этой фишки. Или подложить под дверь бэкграундный рисунок (свойство пикчербокса BackgroundImage) и сделать его прозрачным, хз тут сам контейнер снановится прозрачным с рисунками или без.

Короче всё это фигня. Мне кажется можно попробовать под рисунок двери просто подложить бэкграунд и передавать ему изображение того, что находится под пикчербоксом. То есть снять координаты пикчербокса, его размеры, и сделать скриншот того что под ним и передать это бэкграунду. Если кто-то может - прошу помочь.

Файл проекта: http://rapidshare.com/files/76356893/PictureBox2.rar.html

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 15.12.2007 (Сб) 15:45

Применительно к твоему рисунку двери.
Код: Выделить всё
Imports System.Drawing.Drawing2D

Public Class Form1
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim GP1 As New GraphicsPath
    Dim Reg As New Region

    Reg.MakeEmpty()
    Reg.Union(New Rectangle(0, 33, 128, 95))

    GP1.AddEllipse(New Rectangle(0, -1, 126, 75))
    Reg.Union(GP1)
    PictureBox2.Region = Reg
  End Sub
End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 15.12.2007 (Сб) 22:16

Nord777 спасибо, но это всё полумеры. А если сложный рисунок будет?
Вот с помощью твоего кода получилосьчто-то похожее на решение, но с побочными эффектами:

Код: Выделить всё
Public Class Form1

    Dim ImgWall As Bitmap = Image.FromFile("img\wall.png")

    Private Sub Form1_HandleCreated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.HandleCreated
        Me.DoubleBuffered = True
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim G As Graphics = e.Graphics
        G.DrawImage(ImgWall, 59, 25)
    End Sub

End Class

(Файл проекта ниже)

Если отрисовать фоновый рисунок с помощью самой формы (в данном случае - стена), а сверху просто накладывать PictureBox со свойством BackColor=Transparent, то PictureBox станет прозрачным, но с небольшими глюками: PictureBox расположенный выше (PictureBox2), своей частью не закрытой рисунком будет просвечивать фон сквозь другой PictureBox расположенный ниже (PictureBox1):

Изображение

Соответственно сквозь более верхний PictureBox ничего не просвечивается (PictureBox3).
В принципе пользоваться можно.

Nord777 можно ли сделать кпримеру так: залить нейтральным цветом прозрачные участки рисунка, затем оформить их в виде фигуры и вырезать её из пикчербокса с помощью .Region как в твоём предыдущем посте? То есть не подгонять программно эллипс под рисунок двери, а как-то представить эти углы в виде фигуры да и вырезать нафиг, программно или хз. Определить по цвету эти ненужные пиксели и вырезать.
Вложения
PictureBox3.rar
(626.26 Кб) Скачиваний: 179

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 16.12.2007 (Вс) 0:23

Всё что ты просишь - это тоже полумеры.
Программно это будет выглядеть так:
Код: Выделить всё
Imports System.Drawing.Drawing2D
Imports System.Runtime.InteropServices

Public Class Form1
  <DllImport("kernel32.dll", EntryPoint:="RtlMoveMemory", _
  CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)> _
   Public Shared Sub CopyMemory(ByVal DestData As Integer(,), ByVal SrcData As IntPtr, ByVal Size As Integer)
  End Sub

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim BMP As Bitmap = My.Resources.door
    PictureBox2.Region = GetRegion(BMP)
  End Sub


  Function GetRegion(ByVal Bmp As Bitmap) As System.Drawing.Region
    Dim BmpArr(Bmp.Width - 1, Bmp.Height - 1) As Integer
    Dim BmpRect As Rectangle = Rectangle.Round(Bmp.GetBounds(GraphicsUnit.Pixel))
    Dim Reg As New Region(BmpRect)

    If Bmp.PixelFormat <> Imaging.PixelFormat.Format32bppArgb Then Return Reg

    Dim BData As Imaging.BitmapData
    BData = BMP.LockBits(BmpRect, Imaging.ImageLockMode.ReadOnly, BMP.PixelFormat)
    Dim Ptr As IntPtr = BData.Scan0
    Bmp.UnlockBits(BData)

    CopyMemory(BmpArr, Ptr, BmpArr.Length * 4)

    Dim Rect As New Rectangle(0, 0, 1, 1)
    Dim RowEnd = BmpArr.GetUpperBound(0)
    Dim ColEnd = BmpArr.GetUpperBound(1)

    For Row As Integer = 0 To RowEnd
      For Col As Integer = 0 To ColEnd
        If BmpArr(Row, Col) >> 24 = 0 Then
          Rect.X = Col : Rect.Y = Row
          Reg.Exclude(Rect)
        End If
      Next
    Next

    Return Reg
  End Function

End Class
Вложения
PictureBox.rar
(436.07 Кб) Скачиваний: 242
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

GeeZeR
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 09.12.2007 (Вс) 7:30
Откуда: Киев

Сообщение GeeZeR » 16.12.2007 (Вс) 2:38

Nord777 это круто, спасибо!!!!

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 21.12.2007 (Пт) 3:56

У меня тут идейка маленькая родилась:
Изображение
вот у нас рисунок Pic1 - стена, Pic2 - дверь.
Суть моей идеи: считать в BackgroundImage Pic2 часть Pic1, которую заслоняет Pic2 !?
Это реально ??? И если реально то как ???
Имя ничего не значит, НО ...
... я работаю над собой!

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 22.12.2007 (Сб) 4:13

АЛЯРМ!!!
Я нашел кое-что!!!
Значит
1. Устанавливаем нашу стену как BackgroundImage
2. В свойствах формы устанавливаем TransparencyKey в Control (другие цвета не пробовал)
3. В PictureBox2.BackColor устанавливаем Transparent
и получаем замечательную картинку.

ЗЫ все хорошо но я точно не уверен что данный метод будет работать при наложении к примеру PictureBox2 на PictureBox1
Вложения
PictureBox.rar
Прозрачный PictureBox2
(1.03 МиБ) Скачиваний: 268

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 24.12.2007 (Пн) 6:28

Да PictureBox на PictureBox не пашет.
Что делать...
Имя ничего не значит, НО ...
... я работаю над собой!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 24.12.2007 (Пн) 19:45

Наверно пора прекращать выдумывать велосипед с квадратными колёсами ))
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

программист
Новичок
Новичок
Аватара пользователя
 
Сообщения: 42
Зарегистрирован: 19.07.2007 (Чт) 20:27
Откуда: Донецк

Сообщение программист » 24.12.2007 (Пн) 19:58

Nord777
ну и че делать - ручками отрисовывать ??
Имя ничего не значит, НО ...
... я работаю над собой!

След.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 2

    TopList