Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
 Аватар для timsc1
14 / 14 / 2
Регистрация: 27.11.2011
Сообщений: 710

Нарисовать светофор со сменой цветов

08.08.2014, 22:43. Показов 4430. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго здоровичка всем!!! Уважаемые форумчане, помогите пож-ста с задачкой на VB2008:
На форме метод пикчер. При запуске рисуется светофор, цвета меняются со временем (наверное таймер нужен), и бегущая строка пишет, какой цвет. Заранее спасибо!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.08.2014, 22:43
Ответы с готовыми решениями:

Нарисовать светофор, с помощью потоков реализовать смену цветов
Не могу понять как с помощью потоков реализовать рисование. Надо нарисовать светофор, затем с помощью потоков реализовать с мену цветов на...

Светофор - мигание цветов по таймеру
Graphics g; Pen mypen= new Pen(Color.Black, 1); SolidBrush sl1 = new SolidBrush(Color.Red); SolidBrush sl2 =...

Нарисовать светофор
на paskal abc

17
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
08.08.2014, 22:45
timsc1, С чем именно помочь? Помочь означает, что ты уже начал и что то не получается!
0
 Аватар для timsc1
14 / 14 / 2
Регистрация: 27.11.2011
Сообщений: 710
08.08.2014, 22:47  [ТС]
со светофором и бегущей строкой, если можно!!!
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для magirus
28047 / 15783 / 983
Регистрация: 15.09.2009
Сообщений: 67,753
Записей в блоге: 78
08.08.2014, 23:35
конечно можно, начинай, а что не поучится - уточни... ктож запретит то...
1
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
09.08.2014, 00:46
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот накидал из интереса.
Проект и демо экзешник прилагаются

Светофор прорисовывать не стал (геморно) - взял картинку.
Код прост:
Кликните здесь для просмотра всего текста
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Public Class Form1
    Dim Lbl As Label
    Sub Col(ByVal C As Color, ByVal H As Integer)
        Dim BM As New Bitmap(PictureBox2.Width, PictureBox2.Height)
        Dim G As Graphics = Graphics.FromImage(BM)
        G.FillRectangle(New SolidBrush(Color.FromArgb(30, 30, 30)), 100, 40, 100, 300)
        G.FillRectangle(New SolidBrush(C), New Rectangle(100, H, 100, 100))
        PictureBox2.BackgroundImage = BM
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PictureBox1.Parent = PictureBox2
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Static Mode As Integer = 0
        Static Tick As Integer = 0
        If Mode = 0 Then
            Col(Color.Red, 40)
        End If
        If Mode = 1 Then
            If Tick Mod 2 = 0 Then
                Col(Color.Yellow, 140)
            Else
                Col(Color.Transparent, 140)
            End If
        End If
        If Mode = 2 Then Col(Color.Green, 240)
        If Tick = 0 Then
            If Mode = 0 Then MakeLbl("Red")
            If Mode = 1 Then MakeLbl("Yellow")
            If Mode = 2 Then MakeLbl("Green")
        End If
        Tick += 1
        If Tick > 10 Then Mode += 1 : Tick = 0
        If Mode = 3 Then Mode = 0
    End Sub
 
    Sub MakeLbl(ByVal Txt As String)
        Lbl = New Label With {.Left = Width, .Top = 400, .Text = Txt, .Font = New Font("Verdana", 12, FontStyle.Bold)}
        Controls.Add(Lbl) : Timer2.Start()
    End Sub
 
    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        Lbl.Left -= 2
        If Lbl.Left < -Lbl.Width Then
            Controls.Remove(Lbl)
            Timer2.Stop()
        End If
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Close()
    End Sub
End Class

Нарисовать светофор со сменой цветов
Вложения
Тип файла: rar Светофор exe.rar (81.5 Кб, 31 просмотров)
Тип файла: rar Светофор.rar (850.0 Кб, 67 просмотров)
3
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
09.08.2014, 16:58
Немного закруглив получил вот это)
Миниатюры
Нарисовать светофор со сменой цветов  
1
 Аватар для timsc1
14 / 14 / 2
Регистрация: 27.11.2011
Сообщений: 710
09.08.2014, 21:01  [ТС]
Ребята, всем огромное спасибо за помощь!!! Памирыч, особая благодарность!!! Я немного нагрешил... Прошу прощения за мою неучённость в этом вопросе... На форме метод Paint, т.е. когда рисуется линиями, прямоугольниками и т.д. Перепутал метод. Сейчас глянул и ахнул... Фото прилагаю... Простите ещё раз...
Миниатюры
Нарисовать светофор со сменой цветов  
0
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
09.08.2014, 23:51
Да, я в принципе полагал, что задание предусматривает прорисовку самого светофора с помощью линий, кругов и так далее, но для меня проще было сделать именно с картинкой.
Я не силен в графике и рисовании именно в этом методе (Paint), поэтому не стал браться, тут есть ребята, кто в этом разбирается лучше, надеюсь, они чего подскажут
0
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
10.08.2014, 02:20
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Предложу вариант на основе отдельного класса:
Класс TrafficLights
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Public Class TrafficLights
    Private _state As TrafficLightsEnum
 
    Public Property State() As TrafficLightsEnum
        Get
            Return _state
        End Get
        Set(ByVal value As TrafficLightsEnum)
            _state = value
            RaiseEvent OnStateChanged(value)
        End Set
    End Property
 
    Private Event OnStateChanged(ByVal e As TrafficLightsEnum)
    Public Event StateChanged(ByVal sender As TrafficLights, ByVal e As TrafficLightsEnum)
 
    Sub New()
        Me.State = TrafficLightsEnum.Red
        AddHandler OnStateChanged, AddressOf StateChange
    End Sub
 
    Public Sub New(state As TrafficLightsEnum)
        Me.State = state
        AddHandler OnStateChanged, AddressOf StateChange
    End Sub
 
    Public Overrides Function ToString() As String
        Select Case _state
            Case TrafficLightsEnum.Green
                Return "Зелёный"
            Case TrafficLightsEnum.Red
                Return "Красный"
            Case TrafficLightsEnum.Yellow
                Return "Жёлтый"
            Case TrafficLightsEnum.YellowRed
                Return "Переключение на зелёный"
            Case Else
                Return String.Empty
        End Select
    End Function
 
    Public Enum TrafficLightsEnum
        Red
        Yellow
        Green
        YellowRed
    End Enum
 
    Private Sub StateChange(e As TrafficLightsEnum)
        RaiseEvent StateChanged(Me, e)
    End Sub
 
    Public Sub ChangeState()
        Select Case _state
            Case TrafficLightsEnum.Green
                _state = TrafficLightsEnum.Yellow
            Case TrafficLightsEnum.Yellow
                _state = TrafficLightsEnum.Red
            Case TrafficLightsEnum.Red
                _state = TrafficLightsEnum.YellowRed
            Case TrafficLightsEnum.YellowRed
                _state = TrafficLightsEnum.Green
        End Select
        RaiseEvent OnStateChanged(_state)
    End Sub
End Class

Класс формы
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class Form1
    Private WithEvents trl As New TrafficLights()
    Private WithEvents tmr As New Timer() With {.Interval = 1000}
    Private redGP, greenGP, yellowGP As GraphicsPath
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        AddHandler trl.StateChanged, AddressOf trl_StateChanged
        AddHandler tmr.Tick, AddressOf tmr_Tick
        redGP = New GraphicsPath()
        greenGP = New GraphicsPath()
        yellowGP = New GraphicsPath()
        redGP.AddEllipse(0, 0, Me.ClientSize.Width, Me.ClientSize.Height \ 3)
        yellowGP.AddEllipse(0, Me.ClientSize.Height \ 3, Me.ClientSize.Width, Me.ClientSize.Height \ 3)
        greenGP.AddEllipse(0, 2 * (Me.ClientSize.Height \ 3), Me.ClientSize.Width, Me.ClientSize.Height \ 3)
        tmr.Start()
    End Sub
 
 
    Private Sub trl_StateChanged(sender As TrafficLights, e As TrafficLights.TrafficLightsEnum)
        Me.Refresh()
    End Sub
 
    Private Sub tmr_Tick(sender As Object, e As EventArgs)
        trl.ChangeState()
    End Sub
 
    Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
        Select Case trl.State
            Case TrafficLights.TrafficLightsEnum.Green
                With e.Graphics
                    .FillPath(Brushes.Green, greenGP)
                    .DrawPath(Pens.Black, redGP)
                    .DrawPath(Pens.Black, yellowGP)
                End With
            Case TrafficLights.TrafficLightsEnum.Red
                With e.Graphics
                    .FillPath(Brushes.Red, redGP)
                    .DrawPath(Pens.Black, greenGP)
                    .DrawPath(Pens.Black, yellowGP)
                End With
            Case TrafficLights.TrafficLightsEnum.Yellow
                With e.Graphics
                    .FillPath(Brushes.Yellow, yellowGP)
                    .DrawPath(Pens.Black, redGP)
                    .DrawPath(Pens.Black, greenGP)
                End With
            Case TrafficLights.TrafficLightsEnum.YellowRed
                With e.Graphics
                    .FillPath(Brushes.Yellow, yellowGP)
                    .FillPath(Brushes.Red, redGP)
                    .DrawPath(Pens.Black, greenGP)
                End With
        End Select
 
    End Sub
 
End Class
Вложения
Тип файла: zip sourceCode.zip (16.1 Кб, 23 просмотров)
0
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
10.08.2014, 02:26
Вот исходник светофора Памирыча немного мною изменённого + добавил управление светодиодами клавиатуры (для наглядности)
Миниатюры
Нарисовать светофор со сменой цветов  
Вложения
Тип файла: rar Светофор.rar (676.7 Кб, 23 просмотров)
0
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
10.08.2014, 02:29
ViterAlex интересно посмотреть твой вариант как сделать что бы на VB.2008 запустилось?
0
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
10.08.2014, 02:33
Разобрался сам)
Миниатюры
Нарисовать светофор со сменой цветов  
0
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
10.08.2014, 03:27
Немного подправить создание контуров, чтобы были круглые всегда:
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
 
    AddHandler trl.StateChanged, AddressOf trl_StateChanged
    AddHandler tmr.Tick, AddressOf tmr_Tick
 
    redGP = New GraphicsPath()
    greenGP = New GraphicsPath()
    yellowGP = New GraphicsPath()
    Dim w, h As Integer
    w = Me.ClientSize.Width : h = Me.ClientSize.Height \ 3
    w = Math.Min(w, h) : h = Math.Min(w, h)
    redGP.AddEllipse(0, 0, w, h)
    yellowGP.AddEllipse(0, h, w, h)
    greenGP.AddEllipse(0, 2 * h, w, h)
 
    tmr.Start()
End Sub
0
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
15.08.2014, 15:34
Вот еще как вариант)
Миниатюры
Нарисовать светофор со сменой цветов  
0
 Аватар для timsc1
14 / 14 / 2
Регистрация: 27.11.2011
Сообщений: 710
15.08.2014, 17:58  [ТС]
MACHOMAN, можно код программы???
0
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
15.08.2014, 18:12
Так как это раздел по программированию, лучше к картинкам прилагать исходники и/или исходный код
1
 Аватар для timsc1
14 / 14 / 2
Регистрация: 27.11.2011
Сообщений: 710
15.08.2014, 18:16  [ТС]
Памирыч, очень поддерживаю!!!
0
 Аватар для MACHOMAN
54 / 30 / 4
Регистрация: 15.01.2014
Сообщений: 349
16.08.2014, 00:42
исходник
Вложения
Тип файла: rar Новая папка (6).rar (5.57 Мб, 38 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2014, 00:42
Помогаю со студенческими работами здесь

Нарисовать светофор
Помогите нарисовать светофор в DЕLРНI

Нарисовать светофор
подскажите пожлста как в паскале нарисовать светофор?

Нарисовать светофор
Написать программу которая выводит изображение светофора на экран

Нарисовать светофор
Добрый день. У меня небольшая проблема: нужно сделать светофор в pascalabc, так чтобы отображался через каждые 3 секунды новый текст о...

Нарисовать светофор и призму
Здесь совсем все просто. Необходимо в &quot;graphABC&quot; &quot;нарисовать&quot; светофор (простенький: прямоугольник и 3 кружка) и призму (см. рисунок). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи будет иметь приблизительный результат вычисления для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу можно будет корректировать по ходу. Это потому что прямое соотношение. . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
Vue SFC компонент на PHP с Fusion
Jason-Webb 09.04.2025
PHP на сервере и JavaScript на клиенте — классическое сочетание, которое, несмотря на свою эффективность, создает определенный когнитивный диссонанс при разработке. В этом контексте появляются. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер