Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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
Где его взять (Аналог 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
Автор ответа:
 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 это отдельная песня, не все умеют ее петь

Очень сложно :)
Пример с 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!"
   ;DeleteObject rNew
   ;DeleteObject brPaint
   ;DeleteObject brFrame
   ;DeleteObject rComb

End Sub

Больше времени ушло на комментарии.
Да, кстати, заливку можно делать не только сплошную, но и диагональную,
например - кто-то тут спрашивал про штриховку

Ответить

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



ICQ: 223663115 

Вопросов: 21
Ответов: 285
 Профиль | | #6 Добавлено: 31.05.06 22:32
СПАСИБО

Ответить

Страница: 1 |

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



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