Диаграмма

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Диаграмма

Сообщение xqz_me » 16.02.2006 (Чт) 15:31

Как без внешних контролов создать плоскую диаграмму (есть круг, например, красного цвета, в нём синим цветом выделяется сектор между двумя радиусами. Размер выделенного сектора зависит от какой-то величины, от 0% до 100%)? Что-то вроде того, что винда рисует в свойствах диска.

Tamplier
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 183
Зарегистрирован: 18.11.2005 (Пт) 13:35
Откуда: Москва

Сообщение Tamplier » 16.02.2006 (Чт) 15:44

использовать свойство формы/пикчербокса/юзер_контрола/другой_вариант Circle.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 16.02.2006 (Чт) 15:48

Конкретно про Circle догадаться было нетрудно. Как сектор залить другим цветом?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.02.2006 (Чт) 16:10

xqz_me писал(а):Конкретно про Circle догадаться было нетрудно. Как сектор залить другим цветом?


Дык в Help-е по этому методу все и написано...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.02.2006 (Чт) 16:11

Нарисовать его и вызвать ExtFloodFill...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 16.02.2006 (Чт) 16:18

Дык в Help-е по этому методу все и написано

Можешь выложить?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.02.2006 (Чт) 16:31

xqz_me писал(а):
Дык в Help-е по этому методу все и написано

Можешь выложить?


Да элементарно - хоть всю MSDN:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/vb6anchor.asp
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 16.02.2006 (Чт) 17:34

Код: Выделить всё
Private Sub Command1_Click()
Cls
Dim b As Double
b = InputBox(b)
Circle (2400, 1800), 1200, RGB(255, 0, 0), 0, b * 6.2769 / 100
Line (2400, 1800)-(2400 + 1200, 1800)
Line (2400, 1800)-(3600 * Cos(b * 6.2769 / 100), 3000 * Sin(b * 6.2769 / 100))
End Sub

Пока додумался только до этого. Только не работает. Сперва черчу дугу (b - % от окружности). Задем двумя линиями пытаюсь соединить её концы с центром окружности. Только это не работает. Вторая линия не правильно себя ведёт. Где у меня ошибка? И как залить получившуюся фигуру?

З.Ы. Что у vb за странные представления о pi? Circle (2400, 1800), 1200, ,0, t замыкается только при t = 6.2769 (а не t = 6.2832, как должно быть).

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 16.02.2006 (Чт) 18:17

xqz_me
а доставить хелп к офису и написать в редакторе VBA circle, стать на середину слова и нажать F1 очень трудно? :shock:
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 16.02.2006 (Чт) 20:21

xqz_me
а доставить хелп к офису и написать в редакторе VBA circle, стать на середину слова и нажать F1 очень трудно?

Трудно.

Код: Выделить всё
Private Sub Command1_Click()
Cls
Dim b As Double
b = InputBox(b)
Circle (2400, 1800), 1200, RGB(255, 0, 0), 0, b * 6.2769 / 100
Line (2400, 1800)-(2400 + 1200, 1800)
Line (2400, 1800)-(2400 + 1200 * Cos(b * 6.2769 / 100), 1800 - 1200 * Sin(b * 6.2769 / 100))
End Sub

Короче, код я исправил. Теперь сектор рисуется правильно. Объясните, плиз, как его залить определённым цветом.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 16.02.2006 (Чт) 21:50

Можно получить ответ на заданный вопрос?

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 17.02.2006 (Пт) 3:42

Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 17.02.2006 (Пт) 9:41

FAKK2
Не поможет, потому что у него фигура не закрытая получается(то есть цветом зальется вся форма).
Если всё делать своими ручками, они скоро отвалятся !

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.02.2006 (Пт) 9:55

Читаем мануал.
Для рисования радиусов надо указывать угол отрицательным.
Me.Circle (100, 100), 50, vbBlue, -PI / 2, -PI
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 17.02.2006 (Пт) 13:11

Читаем мануал.
Для рисования радиусов надо указывать угол отрицательным.
Me.Circle (100, 100), 50, vbBlue, -PI / 2, -PI

Ёшкин кот! А у меня он не отрицательный?! Я же писал, что сектор рисуется правильно!
Код: Выделить всё
Private Sub Command1_Click()
Cls
Dim b As Double
b = InputBox(b)
Circle (2400, 1800), 1200, RGB(255, 0, 0), 0, b * 6.2769 / 100
Line (2400, 1800)-(2400 + 1200, 1800)
Line (2400, 1800)-(2400 + 1200 * Cos(b * 6.2769 / 100), 1800 - 1200 * Sin(b * 6.2769 / 100))
End Sub


Код: Выделить всё
Объясните, плиз, как его залить определённым цветом.
:!:
И как сделать, чтобы линии не стирались (другой формой, например).

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.02.2006 (Пт) 13:16

AutoRedraw=True
плюс голова и прямые руки.
Lasciate ogni speranza, voi ch'entrate.

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 17.02.2006 (Пт) 13:19

Спасибо. А как заливать то?

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 17.02.2006 (Пт) 13:29

Me.FillMode=0
Me.FillColor=vbBlue
Если всё делать своими ручками, они скоро отвалятся !

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.02.2006 (Пт) 13:36

xqz_me писал(а):Ёшкин кот! А у меня он не отрицательный?!

У тебя - нет.

xqz_me писал(а):Я же писал, что сектор рисуется правильно!

Сектор дорисовывается линиями. Следовательно, сектор рисуется неправильно.

xqz_me писал(а):А как заливать то?

http://bbs.vbstreets.ru/viewtopic.php?p=6586200#6586200
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 17.02.2006 (Пт) 13:38

Me.FillMode=0

Ругается

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 17.02.2006 (Пт) 13:41

xqz_me писал(а):
Me.FillMode=0

Ругается

Ошибся немного
Fillstyle :)
Если всё делать своими ручками, они скоро отвалятся !

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 17.02.2006 (Пт) 14:09

Me.Circle (100, 100), 50, vbBlue, -PI / 2, -PI

Почему-то у меня получается круг, а не сектор.

Если в мой код пихнуть
Код: Выделить всё
Me.FillStyle=0
Me.FillColor=vbBlue
, то ничего не происходит.

Разъясните всё, пожалуйста.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 17.02.2006 (Пт) 14:24

вот пример из бейсика, может тебе этого достаточно будет, чтобы свой велосипед не изобретать :wink:
Вложения
ChrtSamp.rar
(13.91 Кб) Скачиваний: 37

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 17.02.2006 (Пт) 14:36

Не работает

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 17.02.2006 (Пт) 14:37

что не работает? может у тебя нет MSCHART.OCX или он не зарегистрирован?

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 17.02.2006 (Пт) 14:43

xqz_me
Пихаешь мой код перед кодом GSerg'a , выставляешь у формы измерение в пикселях(Me.Scalemode=Vbpixels) и рисуется сектор, заполненнный синим (по крайней мере у меня) :)
Ну и не забудь PI объявить как константу (из калькулятора значение возьми) :)
Если всё делать своими ручками, они скоро отвалятся !

xqz_me
Постоялец
Постоялец
 
Сообщения: 413
Зарегистрирован: 04.12.2005 (Вс) 14:58

Сообщение xqz_me » 17.02.2006 (Пт) 14:47

Не знaю. Run-Time error 91. Object Variable or With Block variale not set. И потом, там же ocx используется... А мне бы без него управиться.

Может, вернёмся к заливке сектора? :?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 17.02.2006 (Пт) 14:52

нет, я больше не могу это читать :twisted:
или ты попробуешь делать то, что тебе советуют или разбирайся сам как тебе вздумается. никто за тебя код писать не будет :!:

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 17.02.2006 (Пт) 14:52

Код: Выделить всё

Private Const PI As Double = 3.14159265358979
Private Sub Command1_Click()
Me.ScaleMode = 3
Me.FillColor = vbRed
Me.FillStyle = 0
Me.Circle (100, 100), 50, vbBlue, -PI / 2, -PI
End Sub

:?
Если всё делать своими ручками, они скоро отвалятся !

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 17.02.2006 (Пт) 14:59

я думаю, что ему лучше так написать: :lol:


Код: Выделить всё
'Form1
Option Explicit

Private Const PI As Double = 3.14159265358979


Private Sub Form_Load()

Me.AutoRedraw = True
Me.ScaleMode = 3
Me.FillColor = vbRed
Me.FillStyle = 0
Me.Circle (100, 100), 50, vbBlue, -PI / 2, -PI



End Sub

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 2

    TopList