Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 1

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

25.01.2016, 16:28. Показов 776. Ответов 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
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.01.2016, 16:28
Ответы с готовыми решениями:

Почему в модуле осталось видна только одна процедура?
Коротко: в одном модуле находится 4 процедуры. Причём три из них вызываются одной с аргументами. В какой-то момент в модуле осталось...

Почему не заливает нужную область?
Почему не заливает нужную область? uses crt, GraphABC; const C = clRed; var x, y: integer; xset, yset: set of integer;...

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

1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,705
Записей в блоге: 14
25.01.2016, 16:34
Это может быть в двух случаях:

1) Граница незамкнута
2) Цвет границы задан неверно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2016, 16:34
Помогаю со студенческими работами здесь

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

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

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

Требуется создать класс окружностей и вывести окружность в picturebox
Требуется создать класс окружностей и вывести окружность в picturebox Код программы: using System; using...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru