Страница: 1 | 2 |
Вопрос: Синий бекграунд с периливом
Добавлено: 12.05.06 00:12
Автор вопроса: student-uni
Хочу при запуске формы залить всё оставшееся на экране
синим цветом с плавным переходом от тёмного к светлому.
1. как это осуществить ?
я сделал одну форму Form1 на весь экран без бордюров
и залил её сплошным синим цветом
и вторую Form 2 - собственно моя прога.
Стартовая форма Form1
и в ее событии Form1_ЛОАД происходит
Dim f2 as new Form2
form2.show
ПРоблема -
Если юзер в это время клацает другие проги
может получиться так, что синяя Form1 - поверх Form2
Вопрос - как сделать чтоб этого не случилось?
Чисто теоретически мне нужно событие
под названием Form1_загрузилась и загрузка закончена,
но такого события нет
и второй вопрос
Как сделать плавный переход цвета ?
Спасибо
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 12.05.06 01:32
а) вторая форма должна быть модальной по отношению к первой. Или иметь свойство TOPMOST.
б) слово градиент слышал?
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 12.05.06 03:14
Imports System.Drawing.Drawing2D
Public Class Form1
Private WithEvents formChild As New Form2
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
Me.WindowState = FormWindowState.Maximized
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim Brush As New LinearGradientBrush(Me.ClientRectangle, Color.DarkBlue, Color.SkyBlue, LinearGradientMode.ForwardDiagonal)
With e.Graphics
.FillRectangle(Brush, Me.ClientRectangle)
.DrawString("esign by EROS © 2006 N.Novgorod", New Font("Tahoma", 16, FontStyle.Italic), Brushes.White, 25, 25)
End With
Brush.Dispose()
End Sub
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
With formChild
.StartPosition = FormStartPosition.CenterScreen
.MinimizeBox = False
.MaximizeBox = False
.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
.ShowDialog()
End With
End Sub
Private Sub formChild_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles formChild.FormClosed
Me.Close()
End Sub
End Class
Номер ответа: 3
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #3
Добавлено: 12.05.06 13:56
вот, так я в событиях формы этого события Form1_Shown не нахожу (VS2003)
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 12.05.06 15:26
Перенеси этот код в Load.. будет тоже самое..
Я пробовал, все работает и отображается как надо..
Номер ответа: 5
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #5
Добавлено: 12.05.06 16:44
Чтобы добиться реального виндозного TOPMOST'а (т.е. когда форма поверх всех ТВОИХ форм, но при этом другие проги могут её перекрывать), надо делать так:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim fff As New Form2
fff.Show()
End Sub
Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
Get
Dim params As CreateParams = MyBase.CreateParams
params.ExStyle += 8
Return params
End Get
End Property
End Class
Чтобы касается события "загрузка окончена", можно поэкспериментировать с overrid'ом OnCreateControl и вообще в эту сторону (если не работает, так как сказал EROS).
Номер ответа: 6
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #6
Добавлено: 12.05.06 18:28
у меня 2003 и получаю
Keyword is not Valid as indentifier
на Me.Paint в
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
а также
System.Windows.Forms.FormClosedEventArgs is not devined
на
System.Windows.Forms.FormClosedEventArgs)
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 13.05.06 00:50
student-uni
увы.. с 2003 ничем помочь не могу.. этот код я на 2005 делал. Значит в чем то не стыковка-ищи.. (((
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 13.05.06 01:03
Me.Paint замени на MyBase.Paint
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 13.05.06 01:27
System.Windows.Forms.FormClosedEventArgs is not devined
на
System.Windows.Forms.FormClosedEventArgs)
А вот тут я ваще нифига не понимаю.. в чем разница???
Номер ответа: 10
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #10
Добавлено: 13.05.06 12:36
это пардон, это я загнул.
Me.Paint замени на MyBase.Paint
это я сделал , беда в другом
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
События Shown - это то самое событие которого нет в 2003. См выше
Чисто теоретически мне нужно событие
под названием Form1_загрузилась и загрузка закончена,
но такого события нет
Я думаю попробовать тремя формами
Form0 - стартовая запускает Form1-которая делвет бекграунд, потом она же (Form0) запускает Form2-модально - где собственно прога. Потом по какому нибудь событию на Form2 - напр движение мышки - я закрою к тому времени загруженную Form0.
Конечно это через Житомир на Пензу, может кто лучше придумает.
Номер ответа: 11
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #11
Добавлено: 13.05.06 13:10
Лучше уж флаг какой-нить ввести и по Activate считать Shown.
' событие
bActivated = true
end if
А самое нормальное - взять 2005-й. 2003-й реально не доработан.
Номер ответа: 12
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 13.05.06 14:10
student-uni, на самом деле.. кривее не придумаешь!!
Прислушайся, Neco дело говорит.. через флаг вполне реально сделать, и нефига огород городить с тремя формами..
Номер ответа: 13
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #13
Добавлено: 13.05.06 21:47
.. кривее не придумаешь!!
Ха, Кривее ? да запросто. Второй екзешник
Лучше уж флаг какой-нить ввести и по Activate считать Shown.
Флаг ? !! Это булеву переменную что-ли ?
Номер ответа: 14
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #14
Добавлено: 13.05.06 23:46
Именно булеву.. Дело в том,что Activate будет срабатывать каждый раз при активации формы, а тебе надо этого избежать и имитировать событие Shown только 1 раз..
Объяви приватное событие на уровне формы, и в коде который привел Neco инициируй его, получишь то что хотел..
Номер ответа: 15
Автор ответа:
student-uni
Вопросов: 122
Ответов: 257
Профиль | | #15
Добавлено: 14.05.06 14:36
Так зачем тогда булева переменная , это же форма - бекграунд, она всё равно один раз только активируется, тк. все последующие формы - модальные. Просто запускаем Форму2 при событии Активэйт Формы1.
Спасибо .