Здравствуйте! Сегодня: Ср, 21 Окт 2020, Ваш IP: 3.228.10.64 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Программирование для MS Windows
+ Создать новую тему Страница: 1 · 2 · 3
Тема: Стиль · +  +  дата добавления: 09.06.2013 / 15:20
Автор темы:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Это будет моя глобальная тема, вообщем как создать свой стиль для формы Windows, нечто подобное что находится в программе "Aeonsofts Theme Manager"
С чего начать и как?
--
Du Main Du BA DU
 
Ответ # 41 # · +  +  дата добавления: 02.07.2013 / 11:51
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Если что, то вот:
 
Ответ # 42 # · +  +  дата добавления: 02.07.2013 / 20:24
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Таак, ну я впринцепе разобрался, есть проблема:
Добавляю кнопку, и по её свечения вижу прозрачность

Поэтому мне приходится рисовать не только контроле но и форме, конечно можно рисовать и на форме сразу, тогда кудат спрятать контрол что бы не мешался?
И какое событие отвечает за добавление контрола на форму?
И соответственно сам код контрола:
Public Class Theme
    Private _HeaderSize As Integer = 25 'высота шляпы формы
    Private _MoveMode As Boolean = False
    Private _MoveOffsetX, _MoveOffsetY As Integer
    '///
    Private Sub Theme_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        AddHandler Me.ParentForm.Paint, AddressOf Form1_Paint
        AddHandler Me.MouseDown, AddressOf Form1_MouseDown
        AddHandler Me.MouseUp, AddressOf Form1_MouseUp
        AddHandler Me.MouseMove, AddressOf Form1_MouseMove
        AddHandler Me.Paint, AddressOf Theme_Paint
        Me.Location = New Point(0, 0)
        Me.Height = Me.ParentForm.Height
        Me.Width = Me.ParentForm.Width
        Me.ParentForm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    End Sub
    Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs)
        Dim g As Graphics = e.Graphics
        'заливка
        Dim lgb As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, Me.ParentForm.Width, Me.ParentForm.Height), Color.Orange, Color.OrangeRed, 0)
        g.FillRectangle(lgb, 0, 0, Me.ParentForm.Width, Me.ParentForm.Height)
        'шляпа
        Dim lgb2 As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, Me.ParentForm.Width, _HeaderSize), Color.Blue, Color.DeepSkyBlue, -90)
        g.FillRectangle(lgb2, 0, 0, Me.ParentForm.Width, _HeaderSize)
        'текст
        g.DrawString("Test Form", Me.ParentForm.Font, Brushes.White, 4, 6)
        'рамка
        g.DrawRectangle(New Pen(Brushes.Black, 4), 0, 0, Me.ParentForm.Width, Me.ParentForm.Height)
    End Sub
    Private Sub Form1_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs)
        If e.Button = Windows.Forms.MouseButtons.Left Then
            'нажата левая кнопка мышки
            'проверяем, если курсор находится в границах заголовка формы, включаем режим перетаскивания
            If e.X >= 0 AndAlso e.X <= Me.ParentForm.Width AndAlso e.Y >= 0 AndAlso e.Y <= _HeaderSize Then
                _MoveMode = True
                'смещение относительно позиции захвата шляпы формы (можно закоментить и посмотреть, что получится)
                _MoveOffsetX = e.X
                _MoveOffsetY = e.Y
                'перерисовываем форму
            End If
        End If
    End Sub
    Private Sub Form1_MouseUp(sender As System.Object, e As System.Windows.Forms.MouseEventArgs)
        If _MoveMode Then
            _MoveMode = False 'отключаем режим перетаскивания
            'перерисовываем форму
        End If
    End Sub
    Private Sub Form1_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs)
        If _MoveMode Then
            'изменяем позицию формы, если включен режим перетаскивания
            Me.ParentForm.Left = Cursor.Position.X - _MoveOffsetX
            Me.ParentForm.Top = Cursor.Position.Y - _MoveOffsetY
        End If
    End Sub
    Private Sub Theme_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs)
        Dim g As Graphics = e.Graphics
        Dim lgb3 As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, Me.Width, Me.Height), Color.Orange, Color.OrangeRed, 0)
        g.FillRectangle(lgb3, 0, 0, Me.Width, Me.Height)
        'шляпа
        Dim lgb4 As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, Me.Width, _HeaderSize), Color.Blue, Color.DeepSkyBlue, -90)
        g.FillRectangle(lgb4, 0, 0, Me.Width, _HeaderSize)
        'текст
        g.DrawString("Test Form", Me.Font, Brushes.White, 4, 6)
        'рамка
        g.DrawRectangle(New Pen(Brushes.Black, 4), 0, 0, Me.Width, Me.Height)
    End Sub
End Class
--
Du Main Du BA DU
 
Ответ # 43 # · +  +  дата добавления: 02.07.2013 / 21:13
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Контрол, который рисует форму, может быть невидимым. Дублировать на него рисовалку формы не нужно.

AddHandler Me.Paint, AddressOf Theme_Paint
Me.Location = New Point(0, 0)
Me.Height = Me.ParentForm.Height
Me.Width = Me.ParentForm.Width

Me.Visible = True

* * *
AddHandler Me.MouseDown, AddressOf Form1_MouseDown
AddHandler Me.MouseUp, AddressOf Form1_MouseUp
AddHandler Me.MouseMove, AddressOf Form1_MouseMove
Эти события прицеплены к контролу, а должны быть у формы.
AddHandler Me.ParentForm.MouseDown, AddressOf Form1_MouseDown
AddHandler Me.ParentForm.MouseUp, AddressOf Form1_MouseUp
AddHandler Me.ParentForm.MouseMove, AddressOf Form1_MouseMove
И какое событие отвечает за добавление контрола на форму?
AddControl, или AddedControl, или что-то типа этого.
При удалении RemoveControl, или RemovedControl.
Или наоборот ControlAdd, ControlRemove.
 
Ответ # 44 # · +  +  дата добавления: 02.07.2013 / 21:50
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


А как сделать так что бы при добавлении элемента, сразу же нарисовался стиль, а не после компиляции?
Там есть ControlAdded и ControlRemoved
--
Du Main Du BA DU
 
Ответ # 45 # · +  +  дата добавления: 02.07.2013 / 23:52
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Там есть ControlAdded и ControlRemoved
Ok.

На будущее, некоторые события могут быть представлены в нескольких вариантах, см. по окончанию:
ed - после.
ing - перед (в процессе).

Например:
ControlAdded - контрол добавлен.
FormClosing - форма закрывается.
FormClosed - форма закрылась.
А как сделать так что бы при добавлении элемента, сразу же нарисовался стиль, а не после компиляции?
Никак. Контрол нужно всегда компилировать, чтобы отразились изменения. Если контрол находится в проекте (как в твоем случае), нужно компилировать весь проект.

Ты можешь добавить свойства в свой контрол, которые позволят легко настраивать вид формы без перекомпиляции. Нужно лишь код написать такой.

Например:
Public Class UserControl1

  'свойства для определения цвета шляпы формы

  Private _HeaderColor1 As Color = Color.Blue

  Public Property HeaderColor1 As Color
    Get
      Return _HeaderColor1
    End Get
    Set(value As Color)
      _HeaderColor1 = value 'установили новый цвет
      If Me.ParentForm IsNot Nothing Then
        Me.ParentForm.Refresh() 'перерисовка формы
      End If
    End Set
  End Property

  Private _HeaderColor2 As Color = Color.DeepSkyBlue

  Public Property HeaderColor2 As Color
    Get
      Return _HeaderColor2
    End Get
    Set(value As Color)
      _HeaderColor2 = value 'установили новый цвет
      If Me.ParentForm IsNot Nothing Then
        Me.ParentForm.Refresh() 'перерисовка формы
      End If
    End Set
  End Property

  'остальной код

End Class
Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs)
        Dim g As Graphics = e.Graphics
        'остальной код
        'шляпа
        Dim lgb2 As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, Me.ParentForm.Width, _HeaderSize), Me.HeaderColor1, Me.HeaderColor2, -90)
        g.FillRectangle(lgb2, 0, 0, Me.ParentForm.Width, _HeaderSize)
        'остальной код
    End Sub
В свойствах элемента появятся два новых свойства. Изменения этих свойств сразу отразятся на форме.


Похожим образом можно добавить любые другие свойства.
 
Ответ # 46 # · +  +  дата добавления: 03.07.2013 / 16:33
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


(Не по теме)А как быстро сгенерировать числа от 0 до 1000000 и записать их в текстовый файл?
--
Du Main Du BA DU
 
Ответ # 47 # · +  +  дата добавления: 03.07.2013 / 16:50
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


(Не по теме)А как быстро сгенерировать числа от 0 до 1000000 и записать их в текстовый файл?
http://kbyte.ru/ru/Private/Agreements.aspx

Не говоря уже о том, что найти ответ на вопрос будет проще, если он будет в своей отдельной теме.
 
Ответ # 48 # · +  +  дата добавления: 28.07.2013 / 12:35
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


А как рисуется combobox?
--
Du Main Du BA DU
 
Ответ # 49 # · +x1 +  дата добавления: 28.07.2013 / 17:51
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


А как рисуется combobox?
Смотря что нужно. Можно сделать новый элемент с нуля, если нужно что-то экзотическое.

А можно сделать на основе обычного ComboBox, обрабатывая события (их там несколько) Paint. Создать класс, наследоваться от ComboBox (Inherits System.Windows.Forms.ComboBox) и переписать методы прорисовки:
Public Class MyComboBox
  Inherits System.Windows.Forms.ComboBox

  Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
    MyBase.OnPaint(e)
    'код прорисовки чего-то
  End Sub

  Protected Overrides Sub OnPaintBackground(pevent As System.Windows.Forms.PaintEventArgs)
    MyBase.OnPaintBackground(pevent)
    'код прорисовки чего-то
  End Sub

  Protected Overrides Sub OnDrawItem(e As System.Windows.Forms.DrawItemEventArgs)
    MyBase.OnDrawItem(e)
    'код прорисовки чего-то
  End Sub

End Class
 
Ответ # 50 # · +  +  дата добавления: 29.07.2013 / 06:15
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Imports System.Drawing.Drawing2D
Class MyTabControl
    Inherits TabControl

    Sub New()
        SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint Or ControlStyles.DoubleBuffer, True)
        DoubleBuffered = True
        SizeMode = TabSizeMode.Fixed
        ItemSize = New Size(44, 136)
    End Sub
    Protected Overrides Sub CreateHandle()
        MyBase.CreateHandle()
        Alignment = TabAlignment.Left
    End Sub

    Function ToPen(ByVal color As Color) As Pen
        Return New Pen(color)
    End Function

    Function ToBrush(ByVal color As Color) As Brush
        Return New SolidBrush(color)
    End Function

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        Dim B As New Bitmap(Width, Height)
        Dim G As Graphics = Graphics.FromImage(B)
        Try : SelectedTab.BackColor = Color.White : Catch : End Try
        G.Clear(Color.White)
        G.FillRectangle(New SolidBrush(Color.FromArgb(246, 248, 252)), New Rectangle(0, 0, ItemSize.Height + 4, Height))
        'G.DrawLine(New Pen(Color.FromArgb(170, 187, 204)), New Point(Width - 1, 0), New Point(Width - 1, Height - 1))    'comment out to get rid of the borders
        'G.DrawLine(New Pen(Color.FromArgb(170, 187, 204)), New Point(ItemSize.Height + 1, 0), New Point(Width - 1, 0))                   'comment out to get rid of the borders
        'G.DrawLine(New Pen(Color.FromArgb(170, 187, 204)), New Point(ItemSize.Height + 3, Height - 1), New Point(Width - 1, Height - 1)) 'comment out to get rid of the borders
        G.DrawLine(New Pen(Color.FromArgb(170, 187, 204)), New Point(ItemSize.Height + 3, 0), New Point(ItemSize.Height + 3, 999))
        For i = 0 To TabCount - 1
            If i = SelectedIndex Then
                Dim x2 As Rectangle = New Rectangle(New Point(GetTabRect(i).Location.X - 2, GetTabRect(i).Location.Y - 2), New Size(GetTabRect(i).Width + 3, GetTabRect(i).Height - 1))
                Dim myBlend As New ColorBlend()
                myBlend.Colors = {Color.FromArgb(232, 232, 240), Color.FromArgb(232, 232, 240), Color.FromArgb(232, 232, 240)}
                myBlend.Positions = {0.0F, 0.5F, 1.0F}
                Dim lgBrush As New LinearGradientBrush(x2, Color.Black, Color.Black, 90.0F)
                lgBrush.InterpolationColors = myBlend
                G.FillRectangle(lgBrush, x2)
                G.DrawRectangle(New Pen(Color.FromArgb(170, 187, 204)), x2)


                G.SmoothingMode = SmoothingMode.HighQuality
                Dim p() As Point = {New Point(ItemSize.Height - 3, GetTabRect(i).Location.Y + 20), New Point(ItemSize.Height + 4, GetTabRect(i).Location.Y + 14), New Point(ItemSize.Height + 4, GetTabRect(i).Location.Y + 27)}
                G.FillPolygon(Brushes.White, p)
                G.DrawPolygon(New Pen(Color.FromArgb(170, 187, 204)), p)

                If ImageList IsNot Nothing Then
                    Try
                        If ImageList.Images(TabPages(i).ImageIndex) IsNot Nothing Then

                            G.DrawImage(ImageList.Images(TabPages(i).ImageIndex), New Point(x2.Location.X + 8, x2.Location.Y + 6))
                            G.DrawString("      " & TabPages(i).Text, Font, Brushes.DimGray, x2, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
                        Else
                            G.DrawString(TabPages(i).Text, New Font(Font.FontFamily, Font.Size, FontStyle.Bold), Brushes.DimGray, x2, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
                        End If
                    Catch ex As Exception
                        G.DrawString(TabPages(i).Text, New Font(Font.FontFamily, Font.Size, FontStyle.Bold), Brushes.DimGray, x2, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
                    End Try
                Else
                    G.DrawString(TabPages(i).Text, New Font(Font.FontFamily, Font.Size, FontStyle.Bold), Brushes.DimGray, x2, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
                End If

                G.DrawLine(New Pen(Color.FromArgb(200, 200, 250)), New Point(x2.Location.X - 1, x2.Location.Y - 1), New Point(x2.Location.X, x2.Location.Y))
                G.DrawLine(New Pen(Color.FromArgb(200, 200, 250)), New Point(x2.Location.X - 1, x2.Bottom - 1), New Point(x2.Location.X, x2.Bottom))
            Else
                Dim x2 As Rectangle = New Rectangle(New Point(GetTabRect(i).Location.X - 2, GetTabRect(i).Location.Y - 2), New Size(GetTabRect(i).Width + 3, GetTabRect(i).Height + 1))
                G.FillRectangle(New SolidBrush(Color.FromArgb(246, 248, 252)), x2)
                G.DrawLine(New Pen(Color.FromArgb(170, 187, 204)), New Point(x2.Right, x2.Top), New Point(x2.Right, x2.Bottom))
                If ImageList IsNot Nothing Then
                    Try
                        If ImageList.Images(TabPages(i).ImageIndex) IsNot Nothing Then
                            G.DrawImage(ImageList.Images(TabPages(i).ImageIndex), New Point(x2.Location.X + 8, x2.Location.Y + 6))
                            G.DrawString("      " & TabPages(i).Text, Font, Brushes.DimGray, x2, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
                        Else
                            G.DrawString(TabPages(i).Text, Font, Brushes.DimGray, x2, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
                        End If
                    Catch ex As Exception
                        G.DrawString(TabPages(i).Text, Font, Brushes.DimGray, x2, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
                    End Try
                Else
                    G.DrawString(TabPages(i).Text, Font, Brushes.DimGray, x2, New StringFormat With {.LineAlignment = StringAlignment.Center, .Alignment = StringAlignment.Center})
                End If
            End If
        Next

        e.Graphics.DrawImage(B.Clone, 0, 0)
        G.Dispose() : B.Dispose()
    End Sub
End Class
Помогите разобрать код
--
Du Main Du BA DU
 
Ответ # 51 # · +x1 +  дата добавления: 29.07.2013 / 10:43
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Это контрол наследованный от TabControl (с учетом предыдущего вопроса, к ComboBox он не имеет никакого отношения). С чем именно проблемы разбора? Тут же принципиально все также, как и в любом другом контроле. Элемент рисуется в событии Paint.

По графическим методам:
FillRectangle - заполнить прямоугольник.
DrawRectangle - нарисовать прямоугольник (только границы).
FillPolygon - заполнить полигон.
DrawPolygon - нарисовать полигон (только границы).
DrawLine - нарисовать линию.
DrawString - нарисовать текст.
DrawImage - нарисовать картинку.
LinearGradientBrush - градиент (кисть).
 
Ответ # 52 # · +x1 +  дата добавления: 29.07.2013 / 16:12
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Алексей я как самый порядочный программист разобрался в коде и вуолля

А вот следующий вопрос как сделать тень от элементов? как на 2 скрине
--
Du Main Du BA DU
 
Ответ # 53 # · +  +  дата добавления: 29.07.2013 / 16:23
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


А вот следующий вопрос как сделать тень от элементов? как на 2 скрине
Плохо видно. Тень, обычно это просто тоже самое, но только черным цветом, смещенное немного от основного объекта.
Dim g As Graphics = Me.CreateGraphics()
'тень
g.FillRectangle(Brushes.Black, 4, 4, 100, 100) 'смещение по x и y на 4 писеля
'основная фигура
g.FillRectangle(Brushes.Red, 0, 0, 100, 100) 'без смещения, размер фигуры тот же
 
Ответ # 54 # · +  +  дата добавления: 29.07.2013 / 16:41
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


А как сделать бледнее?
--
Du Main Du BA DU
 
Ответ # 55 # · +  +  дата добавления: 29.07.2013 / 16:42
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Ну конечно же градиент...
--
Du Main Du BA DU
 
Ответ # 56 # · +x1 +  дата добавления: 29.07.2013 / 17:24
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


А как сделать бледнее?
Цвет состоит из четырех байт:
A - альфа-канал (прозрачность); чем меньше число, тем прозрачней будет цвет (0 - прозрачный, 255 - без прозрачности).
R - красный.
G - зеленый.
B - синий.

Один байт - это целочисленное значение от нуля до 255.

Например, серый цвет:
A - 255
R - 128
G - 128
B - 128

кодом:
Color.FromArgb(255, 128, 128, 128)
или без указания альфа-канала:
Color.FromArgb(128, 128, 128)

Например, желтый цвет:
A - 255
R - 255
G - 255
B - 0

кодом:
Color.FromArgb(255, 255, 255, 0)
или без указания альфа-канала:
Color.FromArgb(255, 255, 0)

Для рисования иногда используется цвет (Color), но также часто используются карандаши (Pen) и кисти (Brush). Карандаши (или перья) используются для рисования очертаний, границ. Кисти - для заполнения, заливки фигур.

SolidBrush - обычная кисть, без выкрутасов, просто цвет. Обычную кисть можно также легко получить через вспомогательный класс Brushes. Например: Brushes.Black - это SolidBrush черного цвета. Есть еще вспомогательный класс SystemBrushes, который позволяет создавать кисти с системными цветами (которые могут отличаться в разных системах, в зависимости от настроек).

TextureBrush - текстурная кисть, т.е. заполнение будет делаться картинкой (текстурой).

HatchBrush - кисть с заданным стилем штриховки.


LinearGradientBrush - градиентная кисть.

PathGradientBrush - еще одна градиентная кисть, но не линейная, а более сложная.


    Dim g As Graphics = Me.CreateGraphics()
    'типа тень
    Dim p As Point() = New Point() {New Point(0, 0), New Point(100, 0), New Point(100, 100), New Point(0, 100)}
    Dim b As New PathGradientBrush(p)
    b.WrapMode = WrapMode.Tile
    b.CenterColor = Color.White
    b.SurroundColors = New Color() {Color.Gray, Color.Silver}
    g.FillRectangle(b, 0, 0, 100, 100)

    'основная фигура
    g.FillRectangle(Brushes.Red, 4, 4, 92, 92)
 
Ответ # 57 # · +  +  дата добавления: 08.08.2013 / 09:36
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Алексей давайте создадим свою кнопку через добавление класса
--
Du Main Du BA DU
 
Ответ # 58 # · +  +  дата добавления: 08.08.2013 / 13:48
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Берешь UserControl и рисуешь кнопку: прямоугольник, текст. Пишешь обработчики событий Click, MouseUp/MouseDown, KeyPress/KeyUp/KeyDown, Resize. Добавляешь свои свойства, если понадобятся.

Создавать наследника от Button смысла нет, т.к. элемент простой и проще его сделать из UserControl.

Это проще, чем с формой.
 
Страница: 1 · 2 · 3 + Создать новую тему