Страница: 1 |
Страница: 1 |
Вопрос: Аналог QB функции PAINT(X,Y),C в VB6
Добавлено: 18.05.06 23:09
Автор вопроса: Nj | ICQ: 223663115
Где его взять (Аналог QB функции PAINT(X,Y),C в VB6) или как реализовать заливку контура? Не могу дойти своим умом...
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
mynog
Вопросов: 3
Ответов: 42
Профиль | | #1
Добавлено: 19.05.06 19:43
реализовать заливку контура? Не могу дойти своим умом...
Аналога в 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
Автор ответа:
Nj
ICQ: 223663115
Вопросов: 21
Ответов: 285
Профиль | | #2
Добавлено: 21.05.06 02:07
Спасибо, а жаль - попробую эту.
Кстати, ни у кого нет случайно сэмпла как заливку делать без API?
Номер ответа: 3
Автор ответа:
mynog
Вопросов: 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
Автор ответа:
Nj
ICQ: 223663115
Вопросов: 21
Ответов: 285
Профиль | | #4
Добавлено: 22.05.06 20:44
API это отдельная песня, не все умеют ее петь (фигурально выражаясь). Попробую свою процедуру заливки написать, а не получится - буду с АПИ мучиться... Так все-таки ни у кого сэмпла нет.?
Номер ответа: 5
Автор ответа:
mynog
Вопросов: 3
Ответов: 42
Профиль | | #5
Добавлено: 23.05.06 00:33
Очень сложно
Пример с 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!"
 eleteObject rNew
 eleteObject brPaint
 eleteObject brFrame
 eleteObject rComb
End Sub
Больше времени ушло на комментарии.
Да, кстати, заливку можно делать не только сплошную, но и диагональную,
например - кто-то тут спрашивал про штриховку
Номер ответа: 6
Автор ответа:
Nj
ICQ: 223663115
Вопросов: 21
Ответов: 285
Профиль | | #6
Добавлено: 31.05.06 22:32
СПАСИБО