Страница: 1 |
Вопрос: Аналог QB функции PAINT(X,Y),C в VB6 | Добавлено: 18.05.06 23:09 |
Автор вопроса: ![]() |
Где его взять (Аналог QB функции PAINT(X,Y),C в VB6) или как реализовать заливку контура? Не могу дойти своим умом... |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 42 |
Профиль | Цитата | #1 | Добавлено: 19.05.06 19:43 |
Где его взять (Аналог QB функции PAINT(X,Y),C в VB6) или как
реализовать заливку контура? Не могу дойти своим умом... Аналога в VB6 нет. Есть API - FloodFill, например: Private Declare Function FloodFill Lib "gdi32" Alias "FloodFill" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 223663115 Вопросов: 21 Ответов: 285 |
Профиль | Цитата | #2 | Добавлено: 21.05.06 02:07 |
Спасибо, а жаль - попробую эту.
Кстати, ни у кого нет случайно сэмпла как заливку делать без API? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 42 |
Профиль | Цитата | #3 | Добавлено: 21.05.06 13:47 |
Чем API не устраивает?
Лучше вообще строить с помощью API регионы (см. CreatePolygonRgn и т.п.) и заливать при помощи "кистей" - (для сплошной заливки CreateSolidBrush). Пример - гл. 7 Daniel Appleman "Visual Basic 5.0 Programmer's Guide to the Win32 API" |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 223663115 Вопросов: 21 Ответов: 285 |
Профиль | Цитата | #4 | Добавлено: 22.05.06 20:44 |
API это отдельная песня, не все умеют ее петь (фигурально выражаясь). Попробую свою процедуру заливки написать, а не получится - буду с АПИ мучиться... Так все-таки ни у кого сэмпла нет.? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 42 |
Профиль | Цитата | #5 | Добавлено: 23.05.06 00:33 |
API это отдельная песня, не все умеют ее петь
Очень сложно ![]() Пример с API: Option Explicit ' Это декларации API Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As _ Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As _ Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 _ As Long, ByVal Y3 As Long) As Long Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As _ Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal _ nCombineMode As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As _ Long) As Long Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor _ As Long) As Long Private Declare Function FrameRgn Lib "gdi32" (ByVal hdc As Long, _ ByVal hRgn As Long, ByVal hBrush As Long, ByVal nWidth As Long, ByVal _ nHeight As Long) As Long Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal _ hRgn As Long, ByVal hBrush As Long) As Long Private Sub Form_Click() ' Объявляем переменные ' ... "регионы" Dim rNew As Long, rComb As Long 'Rgn ' ... "кисти" Dim brFrame As Long, brPaint As Long 'Brush ' Закругленный квадрат rComb = CreateRoundRectRgn(39, 27, 245, 170, 20, 20) ' Эллипс rNew = CreateEllipticRgn(105, 67, 184, 141) ' Квадрат + эллипс CombineRgn rComb, rComb, rNew, 4 ' "Кисти" ' ... для границы brFrame = CreateSolidBrush(255) ' ... для заливки brPaint = CreateSolidBrush(100) ' Собственно ' ... заливка FillRgn Me.hdc, rComb, brPaint ' ... граница FrameRgn Me.hdc, rComb, brFrame, 1, 2 ' Если объекты не нужны - они должны быть удалены, ' иначе рано или поздно "Out of memory!" ![]() ![]() ![]() ![]() End Sub Больше времени ушло на комментарии. Да, кстати, заливку можно делать не только сплошную, но и диагональную, например - кто-то тут спрашивал про штриховку |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 223663115 Вопросов: 21 Ответов: 285 |
Профиль | Цитата | #6 | Добавлено: 31.05.06 22:32 |
СПАСИБО |
Страница: 1 |
|