Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Nikas2015
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 1
#1

Почему процедура заливает весь PictureBox а не только окружность - VB

25.01.2016, 16:28. Просмотров 138. Ответов 1
Метки нет (Все метки)

Здравствуйте. Подскажите почему так происходит (процедура заливает весь PictureBox а не только окружность)
Не могу понять. Видимо дело в строке pic.Circle (xc, yc), R, pic.FillColor , но как это изменить?
Visual Basic
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
67
68
69
Sub BackgroundCircularGradient(pic As PictureBox, _
                                ByVal startColor As Long, _
                                ByVal endColor As Long, _
                                Optional ByVal numSteps As Integer = 256, _
                                Optional ByVal xc As Single = -1, _
                                Optional ByVal yc As Single = -1)
    
    Dim startRed As Integer, startGreen As Integer, startBlue As Integer
    Dim deltaRed As Integer, deltaGreen As Integer, deltaBlue As Integer
    Dim R As Single, dr As Single
    Dim stp As Long
    
    Dim saveFillColor As Long
    Dim saveFillStyle As Long
    
    ' Evaluate the coordinates of the center if omitted.
    If xc = -1 And yc = -1 Then
        xc = pic.ScaleWidth / 2
        yc = pic.ScaleHeight / 2
    End If
    
    ' The radius of the circle is equal to the distance from the farthest corner
    If xc < pic.ScaleWidth / 2 Then
        If yc < pic.ScaleHeight / 2 Then
            R = Sqr((pic.ScaleWidth - xc) ^ 2 + (pic.ScaleHeight - yc) ^ 2)
        Else
            R = Sqr((pic.ScaleWidth - xc) ^ 2 + yc ^ 2)
        End If
    Else
        If yc < pic.ScaleHeight / 2 Then
            R = Sqr(xc ^ 2 + (pic.ScaleHeight - yc) ^ 2)
        Else
            R = Sqr(xc ^ 2 + yc ^ 2)
        End If
    End If
    
    ' Split the start color into its RGB components
    startRed = startColor And &HFF
    startGreen = (startColor And &HFF00&) \ 256
    startBlue = (startColor And &HFF0000) \ 65536
    ' Split the end color into its RGB components
    deltaRed = (endColor And &HFF&) - startRed
    deltaGreen = (endColor And &HFF00&) \ 256 - startGreen
    deltaBlue = (endColor And &HFF0000) \ 65536 - startBlue
    
    RealizePalette pic.hdc
    
    ' Eval the delta of the radius at each step
    dr = R / numSteps
    
    ' Remember current fill settings.
    saveFillColor = pic.FillColor
    saveFillStyle = pic.FillStyle
    ' enfore solid filling
    pic.FillStyle = vbSolid
    
    ' Draw all circles, going from the outside in.
    For stp = 0 To numSteps - 1
        pic.FillColor = RGB(startRed + (deltaRed * stp) \ numSteps, _
            startGreen + (deltaGreen * stp) \ numSteps, _
            startBlue + (deltaBlue * stp) \ numSteps)
        pic.Circle (xc, yc), R, pic.FillColor
        R = R - dr
    Next
    
    ' Restore original settings.
    pic.FillColor = saveFillColor
    pic.FillStyle = saveFillStyle
End Sub

http://www.cyberforum.ru/vba/thread1283346.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2016, 16:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Почему процедура заливает весь PictureBox а не только окружность (VB):

Почему не заливает нужную область?
Почему не заливает нужную область? uses crt, GraphABC; const C = clRed; ...

Нарисовать окружность на PictureBox
Всем привет! Такая задачка: На форме два пикчербокса с рисунками. Необходимо...

Нарисовать окружность в центре PictureBox
На экранной форме есть графическое окно Picture 1. Написать операторы в...

PictureBox во весь экран
Добрый день завсегдатые постояльцы. Подскажите пожалуйста следующее. На форме...

Вывести окружность с заданным радиусом. Заполнить весь остальной экран произвольным сообщением
Добрый вечер всем. Как рисовать окружность нашел на форуме. А вот как заполнить...

1
Catstail
Модератор
23531 / 11641 / 2034
Регистрация: 12.02.2012
Сообщений: 18,979
25.01.2016, 16:34 #2
Это может быть в двух случаях:

1) Граница незамкнута
2) Цвет границы задан неверно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2016, 16:34
Привет! Вот еще темы с решениями:

Требуется создать класс окружностей и вывести окружность в picturebox
Требуется создать класс окружностей и вывести окружность в picturebox Код...

Как нарисовать в PictureBox окружность (точку) диаметром 1 миллиметр?
Как мне это исключение обработать?

IDE wxDev-C++, при создании кнопки на форме она почему-то становится во весь экран, почему?
То есть ребята не смешно ни разу. Создаю форму, кидаю кнопку, ничего не...

Стир .маш. IndesitWITL86(EU) 73769018700*110282092, Попался незнакомый зверь,заливает воду как только вставиш вилку в розе
IndesitWITL86(EU) заливает, как только вставишь вилку в розетку.Проверил...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru