Помогите студенту. Размер активной области окна
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Помогите студенту. Размер активной области... Expand / Collapse
Автор
Сообщение
22.10.2006 0:09
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.11.2006 22:22
Сообщ.: 5, Visits: 43
Пишу класс Окружность- координаты центра, радиус. нужно, чтобы окружность не выходила за пределы окна (формы), на котором она рисуется. Как это сделать?
Сообщ. #906169
22.10.2006 9:55
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
У класса Form есть свойство ClientRectangle с размерами области окна в которой можно рисовать. Исходя из нее нетрудно рассчитать координаты центра окружности и ее радиус, так чтобы окружность точно вписалась бы в окно.
Сообщ. #906174
22.10.2006 19:20
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.11.2006 22:22
Сообщ.: 5, Visits: 43
bazile (22.10.2006)
У класса Form есть свойство ClientRectangle с размерами области окна в которой можно рисовать. Исходя из нее нетрудно рассчитать координаты центра окружности и ее радиус, так чтобы окружность точно вписалась бы в окно.

Много-много сэнкс Вам за это хорошее свойство! Если Вас не затруднит ответить, то как как бы мне мой activeform к моем классу привязать? Вот на что хватило моих знаний:

Public Class Circle

Inherits Form

Private mx, my, mRadius As Integer

Dim mypen As Pen = New Pen(Color.Tomato, 1)

Dim r As Rectangle

Public Sub New()

MyBase.New()

mx = 0

my = 0

mRadius = 0

End Sub

Public Property X()

Get

Return mx

End Get

Set(ByVal xValue)

If xValue > mRadius And xValue + mRadius < r.Width Then '

mx = xValue

End If

End Set

End Property

аналогично свойства Y и Radius

Public Sub SetCircle(ByVal xValue As Integer, ByVal yValue As Integer, ByVal rValue As Integer)

r = MyBase.ActiveForm.ClientRectangle()

X = xValue

Y = yValue

Radius = rValue

End Sub

...............

end class

Сообщ. #906200
23.10.2006 10:12
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
В наследовании от класса Form нет никакой нужды. Окружность не является элементом управления форма. Убери наследование от Form и добавь в класс метод с именем Draw. Он должен принимать два аргумента: Rectangle (координаты области внутри которой нужно нарисовать окружность) и Graphics (объект дающий возможность "рисовать" внутри себя). Рисование окружности ты будешь иницировать из события Paint своей формы.
Сообщ. #906229
23.10.2006 13:11
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.11.2006 22:22
Сообщ.: 5, Visits: 43
Еще раз спасибо Вам, Bazile, за помощь.

bazile (23.10.2006)
В наследовании от класса Form нет никакой нужды. Окружность не является элементом управления форма.

Мдя, у меня получается класс форма с окружностью на ней:)

Сама не знаю, чего я себя и людей мучу:развила задание, которое никакой такой оценки расположения окружности на форме или каком-другом объекте Graphics не требовало изначально. "И Остапа понесло" (c), меня то есть, так как "зачет" я получила, но остановиться с моими усовершенствованиями не могу .

bazile (23.10.2006)
Убери наследование от Form и добавь в класс метод с именем Draw. Он должен принимать два аргумента: Rectangle (координаты области внутри которой нужно нарисовать окружность) и Graphics (объект дающий возможность "рисовать" внутри себя).

Я так и делаю(DrawEllipse), но мне нужно же как-то оценивать, что окружность не выходит за пределы содержащего ее объекта Garphics(в моем случае я рисую прямо на форме) уже в конструкторе с аргументами или в свойствах Set. Как связать окружность с ее центром и радиусом с размерами объекта, на котором окружность отображается?

bazile (23.10.2006)
Рисование окружности ты будешь иницировать из события Paint своей формы

Пасиб, усвоила...хотя я в приложении кнопочек наставила, которые инициируют изменения координат центра, радиуса и рисование измененной окружности .

Сообщ. #906262
23.10.2006 13:34
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
bonnie_ (23.10.2006)
Я так и делаю(DrawEllipse), но мне нужно же как-то оценивать, что окружность не выходит за пределы содержащего ее объекта Garphics(в моем случае я рисую прямо на форме) уже в конструкторе с аргументами или в свойствах Set. Как связать окружность с ее центром и радиусом с размерами объекта, на котором окружность отображается?

Ниже уже объяснил - смотри кусок про метод Draw. У него первый аргумент это Rectangle. Ему ты и будешь передавать значение поля ClientRectangle формы на которой идет рисование. Хранить это значение внутри класса не надо.

Сообщ. #906270
23.10.2006 23:19
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 13.11.2006 22:22
Сообщ.: 5, Visits: 43

так правильно будет?

Public Class Circle

Private mx, my, mRadius As Integer

Dim mypen As Pen = New Pen(Color.Tomato, 1)

Public Sub New()

MyBase.New()

mx = 0

my = 0

mRadius = 0

End Sub

Public ReadOnly Property X()

Get

Return mx

End Get

End Property

Public ReadOnly Property Y()

Get

Return my

End Get

End Property

Public ReadOnly Property Radius()

Get

Return mRadius

End Get

End Property

Public Sub SetCircle(ByVal xValue As Integer, ByVal yValue As Integer, ByVal rValue As Integer, ByRef r as Rectangle)

If xValue > rValue And xValue + rValue < r.Width Then

mx = xValue

End If

If yValue > rValue And yValue + rValue < r.Height Then

my = yValue

End If

If mx > rValue And mx + rValue < r.Width And my > rValue And my + rValue < r.Height Then

mRadius = rValue

End If

End Sub

Public Sub Draw(ByRef objGrap As Graphics)

objGrap.DrawEllipse(mypen, X - Radius, Y - Radius, 2 * Radius, 2 * Radius)

End Sub

Public Sub MoveOrdinate(ByVal dy As Integer, ByRef r As Rectangle)

SetCircle(X, Y + dy, Radius, r)

End Sub

Public Sub MoveAbscissa(ByVal dx As Integer, ByRef r As Rectangle)

SetCircle(X + dx, Y, Radius, r)

End Sub

Public Sub GrowUp(ByVal dr As Integer, ByRef r As Rectangle)

SetCircle(X, Y, Radius + dr, r)

End Sub

End Class

Сообщ. #906312
24.10.2006 10:53
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Если ты не против, я еще немного покритикую твой код :)

- Координаты центра окружности лучше хранить в структуре Point. Это логичнее выглядит.
- Вызывать базовый конструктор из своего (MyBase.New()) нет необходимости
- Функция SetCircle должна работать по принципу "все или ничего", то есть она должна одновременно изменить все три поля или не изменять ни одного.

Сообщ. #906327