Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Прозрачность контрола, формы


Автор: Mastkir 1.6.2007, 12:04
Доброго дня!

Можно ли сделать контрол (UserControl) или форму (DevComponents.DotNetBar.Office2007Form)
прозрачными?

Причем нужно там (на контроле, или форме) рисовать картинку. 
Так вот, нужно, чтобы картинку видно было, а сам контрол был прозрачным.

Контролы, как я понял, вообще прозрачными стать не могут, а у форм есть свойство Opacity, отвечающее за прозрачность. Однако при установке его в ноль, вся форма становится прозрачным, включая картинку на ней. А картинка должна остаться видимой.

Помогите  smile  smile  smile 

Автор: Naum 1.6.2007, 12:20
У формы есть еще свойство TransparencyKey. Устанавливаешь его в какой-либо цвет, и этот цвет будет прозрачным.

Автор: Mastkir 1.6.2007, 12:41
Не понял. (

Попробовал так :
this.TransparencyKey = this.BackColor;

- ничего прозрачным не стало (

На конроле в его центре находится небольшая картинка. Нужно, чтобы форму видно не было,
а картинка была. Что устанавливать в TransparencyKey, не понимаю(

Автор: Naum 1.6.2007, 13:02
Странно, должно работать. Ты эту строчку
Цитата(Mastkir @  1.6.2007,  13:41 Найти цитируемый пост)
this.TransparencyKey = this.BackColor;

в каком месте написал?

Автор: Mastkir 1.6.2007, 13:41
В конструкторе формы, после InitializeComponent();

Автор: Naum 1.6.2007, 13:54
И вообще ничего не меняется?

Автор: Mastkir 1.6.2007, 14:09
да, вообще ничего не меняется :(

Автор: Azzdorf 3.6.2007, 00:00
а свойство Opacity искал???

Автор: spleaner 6.6.2007, 00:15
Немножко неправильно сделал..
надо было так:

Код
this.TransparencyKey=Color.Black;


и получилось бы вот что:
user posted image

ну т.е. весь цвет Color.Black (все, что черное) на форме станет прозрачным!

Автор: 3she1on 12.11.2008, 03:38
У меня вопрос... Как можно реализовать такую задачу для dotNET CF? конкретно, для UserControl. Заранее, спс

Автор: diadiavova 12.11.2008, 09:22
Цитата(Mastkir @  1.6.2007,  12:04 Найти цитируемый пост)
Контролы, как я понял, вообще прозрачными стать не могут

Контролы становятся прозрачными если присвоить их свойству BackColor прозрачный цвет. В коде.

Автор: BestRoot 21.11.2008, 07:51
Вырезать цвет это  не значит сделать прозрачным

Автор: Unlocker 30.1.2009, 11:59
Надо сделать, чтобы PictureBox в VS2003 имел прозрачный фон. На нем стоит .png картинка с прозрачными фрагментами. получается, что какой бы не ставил альфа-канал у BackColor, получается непрозрачный цвет. какие могут быть предложения по данному вопросу?

Автор: SkCom 10.2.2009, 13:53
Доброго времени суток!

Продолжая тему о прозрачности контролов,
создал свой контрол, наследованный от picturebox.

Код

public partial class xPicBox : PictureBox
{
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020;  //WS_EX_TRANSPARENT  
                return cp;
            }
        }

        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0014:
                    return;
            }
            base.WndProc(ref m);
        }

        public xPicBox()
        {
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
            this.BackColor = Color.Transparent;
            InitializeComponent();
        }

        protected override void OnPaintBackground(PaintEventArgs e)
        {
            
        }

        protected override void OnMove(EventArgs e)
        {
            if (Parent != null)
                Parent.Invalidate(Bounds, true);
        }
}


я не силен на в С++ и С#, на VBNet это будет так

Код

Public Class SkCheckButton
    Inherits System.Windows.Forms.Control
   Public Sub New()
      MyBase.New()

      ' This call is required by the Component Designer.
      InitializeComponent()

      'Add any initialization after the InitializeComponent() call
      Me.SetStyle(ControlStyles.UserPaint Or ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer, True)
      Me.SetStyle(ControlStyles.ResizeRedraw Or ControlStyles.Selectable, True)
      Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
      Me.SetStyle(ControlStyles.Opaque, True)
      Me.BackColor = Color.Transparent
    End Sub

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
      Get
        Const WS_EX_TRANSPARENT As Integer = &H20
        CreateParams = MyBase.CreateParams
        CreateParams.ExStyle = WS_EX_TRANSPARENT
        Return CreateParams
      End Get
    End Property
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
      If (m.Msg = 15) Then
        MyBase.DefWndProc(m)

        Draw()

      Else
        MyBase.WndProc(m)
      End If
    End Sub

    Protected Sub Draw()
      Dim m_Graphics As System.Drawing.Graphics = System.Drawing.Graphics.FromHwnd(MyBase.Handle)
      m_Graphics.SmoothingMode = SmoothingMode.AntiAlias
      m_Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic

      m_Graphics.DrawString(Me.Text, Me.Font, New SolidBrush(ForeColor), RectangleF.op_Implicit(ClientRectangle))
    End Sub



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)