Здравствуйте! Сегодня: Пн, 26 Окт 2020, Ваш IP: 54.236.35.159 Войти через 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
 
Ответ # 21 # · +  +  дата добавления: 12.06.2013 / 17:59
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Так всё таки скажите как делается подобная тема??
По крупинкам, постепенно рисовать все что нужно самому.

Создаешь UserControl, или обычный класс наследованный от Control и рисуешь в событии Paint. Либо берешь PictureBox и рисуешь что-нибудь в событии Paint.
Private Sub UserControl1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    Dim g As Graphics = e.Graphics
    ControlPaint.DrawButton(g, 0, 0, Me.Width, Me.Height, ButtonState.Normal)
    g.DrawString("123", Me.Font, Brushes.Black, 0, 0)
  End Sub
Так просто не рассказать, это тема отдельной книги
 
Ответ # 22 # · +  +  дата добавления: 12.06.2013 / 20:34
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


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


Давайте рассмотрим эту тему отдельной книги?
Вопросы нужно сужать, т.к. тема слишком глобальная. Это в первую очередь вопросы работы с графикой.
 
Ответ # 24 # · +  +  дата добавления: 12.06.2013 / 20:59
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


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


Основа одна, весь процесс рисования делается экземпляром класса Graphics :)

Набросал очень простой пример создания очень простого стиля формы:
Public Class Form1

  Private _HeaderSize As Integer = 25 'высота шляпы формы
  Private _MoveMode As Boolean = False
  Private _MoveOffsetX, _MoveOffsetY As Integer

  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    'Me.ControlBox = False
    'Me.MinimizeBox = False
    'Me.MaximizeBox = False
    'Me.Text = ""
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    Me.StartPosition = FormStartPosition.CenterScreen
  End Sub

  Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    Dim g As Graphics = e.Graphics

    'заливка
    Dim lgb As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, Me.Width, Me.Height), Color.White, Color.Silver, 45)
    g.FillRectangle(lgb, 0, 0, Me.Width, Me.Height)

    'шляпа
    Dim lgb2 As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, Me.Width, _HeaderSize), Color.Black, Color.Red, 0)
    g.FillRectangle(lgb2, 0, 0, Me.Width, _HeaderSize)

    'текст
    If _MoveMode Then
      g.DrawString("Моя форма", Me.Font, Brushes.Yellow, 4, 6)
    Else
      g.DrawString("Моя форма", Me.Font, Brushes.White, 4, 6)
    End If

    'рамка
    g.DrawRectangle(New Pen(Brushes.Black, 4), 0, 0, Me.Width, Me.Height)
  End Sub

  Private Sub Form1_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
    If e.Button = Windows.Forms.MouseButtons.Left Then
      'нажата левая кнопка мышки
      'проверяем, если курсор находится в границах заголовка формы, включаем режим перетаскивания
      If e.X >= 0 AndAlso e.X <= Me.Width AndAlso e.Y >= 0 AndAlso e.Y <= _HeaderSize Then
        _MoveMode = True
        'смещение относительно позиции захвата шляпы формы (можно закоментить и посмотреть, что получится)
        _MoveOffsetX = e.X
        _MoveOffsetY = e.Y
        'перерисовываем форму
        Me.Refresh()
      End If
    End If
  End Sub

  Private Sub Form1_MouseUp(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
    If _MoveMode Then
      _MoveMode = False 'отключаем режим перетаскивания
      'перерисовываем форму
      Me.Refresh()
    End If
  End Sub

  Private Sub Form1_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
    If _MoveMode Then
      'изменяем позицию формы, если включен режим перетаскивания
      Me.Left = Cursor.Position.X - _MoveOffsetX
      Me.Top = Cursor.Position.Y - _MoveOffsetY
    End If
  End Sub

End Class


Все остальное - это мелочи, множество мелочей, очень-очень много мелочей, чем больше из них будет учтено, тем сложнее будет код, тем лучше будет результат.
 
Ответ # 26 # · +  +  дата добавления: 13.06.2013 / 11:45
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


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


А как всё это делается в отдельный класс??
Постепенно, когда придет понимание и будет очевидна потребность в этом :)


Если я оберну этот пример в класс, ты ничего не поймешь :)

Для формы нужно просто сделать базовый класс, написать в нем похожий код и затем остальным формам наследоваться от этого класса.
Public Class MyBaseForm
  Inherits System.Windows.Forms.Form

  'код базовой формы

End Class
Public Class Form1
   Inherits MyBaseForm 'остальные формы наследуются от базовой
End Class
 
Ответ # 28 # · +  +  дата добавления: 13.06.2013 / 12:20
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


:DDDD мда ладно, буду разбиратся с этим, а как сделать градиент другой формы??
--
Du Main Du BA DU
 
Ответ # 29 # · +  +  дата добавления: 13.06.2013 / 12:36
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


как сделать градиент другой формы??
Непрямоугольный или нелинейный? :)

FillRectangle - заполнить прямоугольник. У Graphics есть множество других методов Fill, которые позволяют заполнять разные фигуры каким-либо фоном. К слову, методы Draw рисуют очертания фигур.

LinearGradientBrush - это просто кисть. Кисти могут быть разными, в том числе монотонными или с текстурой. Кисти используются в основном для заполнения (заливки) фигур. Есть еще карандаши (Pens), они используются преимущественно для прорисовки очертаний.

Что касается создания нелинейных градиентов, то это тема относительно сложная. Вот примеры:
http://www.codeproject.com/Articles/11615/Gradient-Maker-Application
http://www.codeproject.com/Articles/20018/Gradients-made-easy
 
Ответ # 30 # · +  +  дата добавления: 01.07.2013 / 05:49
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


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


Видимо повернуть на 90 градусов

PS: В приведенном мной коде есть пример с поворотом.
PS2: Читай подсказки в Visual Studio.
 
Ответ # 32 # · +  +  дата добавления: 01.07.2013 / 11:44
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


Всё, разобрался, я не смотрел подсказки, я сегодня утром разбирал код и думал для чего нужны эти цифры в конце, всё вот скрин

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


я не смотрел подсказки
Если смотреть на подсказки, то много вопросов отпадет. Особенно, если .NET Framework русский (подсказки на русском будут).

В Visual Studio можно программировать даже методом тыка. Если более ли менее знаешь английский, будет проще находить нужные методы (по именам), а если не знаешь, то можно тупо листать список всех методов и читать в подсказках их описание.
 
Ответ # 34 # · +  +  дата добавления: 01.07.2013 / 12:02
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


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


Контрол может делать с формой все что захочет, точно также как это делает форма с собой.

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

  Private Sub UserControl1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    AddHandler Me.ParentForm.Paint, AddressOf Form_Paint'целпяем к форме обработчик события перерисовки формы
  End Sub

  Private Sub Form_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.Width, Me.Height), Color.White, Color.Silver, 45)
    g.FillRectangle(lgb, 0, 0, Me.Width, Me.Height)

    'шляпа
    Dim lgb2 As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, Me.Width, 25), Color.Black, Color.Red, 0)
    g.FillRectangle(lgb2, 0, 0, Me.Width, 25)


    'рамка
    g.DrawRectangle(New Pen(Brushes.Black, 4), 0, 0, Me.Width, Me.Height)
  End Sub


End Class

Чтобы все было хорошо, придется много мелочей учесть.
 
Ответ # 36 # · +  +  дата добавления: 01.07.2013 / 12:13
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


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


Можно и класс, но с UserControl будет проще, там свойство ParentForm не придется изобретать.
Можно наследовать класс от System.Windows.Forms.UserControl, но "с живым" UserControl тебе будет проще разобраться.
 
Ответ # 38 # · +  +  дата добавления: 01.07.2013 / 12:57
Автор ответа:
JustArt
JustArt
тем: 95 / ответов: 675 / благодарностей: 3 / репутация: 35
Url: crash.kbyte.ru
Skype: ghostman12.12.2012
ответов: 675
создал(а) тем: 95


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


А почему ошибки?
Тебе видней ;)
То что ошибка UserControl1 происходит в файле Form1 - это довольно странно. Visual Studio для UserControl создает отдельный файл (несколько файлов, один видимый, и два скрытых), почти как для форм. Или ты тупо скопировал мой код в форму? Код этого класса не является UserControl, это всего лишь облегченная часть класса, которую создает Visual Studio для программиста, в которую нужно писать код, в нем нету описания UserControl. Я привел просто пример, это не готовое решение. Вообще, ты должен был свой код использовать, который написал :)


А что касается приведенного мной примера, то все Me (не все подряд, а те которые являются ссылкой на UserControl), нужно заманить на ParentForm, чтобы использовались данные формы, а не UserControl.
 
Ответ # 40 # · +  +  дата добавления: 01.07.2013 / 17:43
Автор ответа:
Shark1
Shark1
тем: 3 / ответов: 153 / благодарностей: 5 / репутация: 82
Чашка Kbyte.Ru>>
ответов: 153
создал(а) тем: 3


 
Страница: 1 · 2 · 3 + Создать новую тему