Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Полигоны Добавлено: 26.08.06 18:18  

Автор вопроса:  VβÐUηìt | Web-сайт: смекаешь.рф
В API есть функция, у формы делает закругленные углы; есть ли такая же функция, но чтоб возрващала не число типа Long, а массив точек?

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #1
Добавлено: 27.08.06 00:11
А чего, юзай CreatePolygonRgn, в ней любую форму точками можешь сделать. Правда там она не возвращает массив точек (такой по-моему нету). Но зато с ним работает. Только продумай, чтобы точки сопрягали дугу с линией - их надо правильно расставить и задать. А функцию по возвращению массива, можешь сам сделать.

P.S.То, что мы ищем, как правило, ближе, чем мы думаем

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 27.08.06 00:17
Правда, если хочешь, есть ещё:
Option Explicit
Private Type POINTAPI
  x As Long
  y As Long
End Type
Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function PolyBezier Lib "gdi32" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long

Private Function SetCreateForm(ByVal propHwnd As Long, ByVal propHDC As Long)
    Dim rComb As Long
    Dim dl As Long
    Dim Poi() As POINTAPI
    Dim vDC As Long
    vDC = propHDC
    ReDim Poi(6)
    Poi(0).x = 250: Poi(0).y = 159
    Poi(1).x = 237: Poi(1).y = 181
    Poi(2).x = 223: Poi(2).y = 202
    Poi(3).x = 210: Poi(3).y = 224
    Poi(4).x = 162: Poi(4).y = 209
    Poi(5).x = 114: Poi(5).y = 195
    Poi(6).x = 66: Poi(6).y = 180
    dl = BeginPath(vDC)
    dl = PolyBezier(vDC, Poi(0), 7)
    dl = EndPath(vDC)
    rComb = PathToRegion(vDC)
    dl = SetWindowRgn(propHwnd, rComb, 1)
End Function

Private Sub Form_Load()
    Call SetCreateForm(Form1.hwnd, Form1.hdc)
End Sub

Ответить

Номер ответа: 3
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #3
Добавлено: 27.08.06 13:02
Да мне, блин, не форму надо, а прямоугольик скругленый на форме рисовать

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 27.08.06 14:33
Рисуй шейп, и поставь св-во шейп=4

Ответить

Номер ответа: 5
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #5
Добавлено: 27.08.06 16:20
1) У шейпа нельзя менять закругленность
2) Его незя переместить на PictureBox, чтоб стал одним целым с картинкой.

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 27.08.06 17:38
Создаешь регион в форме прямоугольника со скругленными краями - CreateRoundRectRgn

Заливаешь регион цветом - FillRgn

Ответить

Номер ответа: 7
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #7
Добавлено: 27.08.06 19:14
А в массив все-таки никак?..

Ответить

Номер ответа: 8
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #8
Добавлено: 27.08.06 20:30
Да мне, блин, не форму надо, а прямоугольик скругленый на форме рисовать
Пордон, не правильно понял. Просто
у формы делает закругленные углы;
я понял в прямом смысле.

А в массив все-таки никак?..
А сделай контрол, используя функции из ответов №1 и 2 - по-моему то, что нужно.(и массив точек задашь и всё, что нужно).
Другой вариант:
Юзай line в n-ом количестве так, чтобы скруглённый прямоугольник строили.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам