Градиентная заливка

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Градиентная заливка

Сообщение kif » 31.03.2005 (Чт) 15:26

Воспользовался поиском (ключевое слово градиент) - ничего нет.

Вопрос, как участок формы залить градиентом :?:
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 31.03.2005 (Чт) 15:30

Сам не пробовал, но есть соображения:

может задать окну регион (Rgn) и вызвать какую-нибудь там GradientFill().. ????

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 31.03.2005 (Чт) 15:30

А часть - прямоугольная???

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 31.03.2005 (Чт) 15:35

Шурик писал(а):А часть - прямоугольная???


Да, прямоугольная.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 31.03.2005 (Чт) 15:53

Вот так:

Код: Выделить всё
Private Function DrawBackGround(ByVal hCanvas As Object, ByVal lRedStart As Long, ByVal lGreenStart As Long, ByVal lBlueStart As Long, _
    ByVal lRedEnd As Long, ByVal lGreenEnd As Long, ByVal lBlueEnd As Long, Optional ByVal lBandHeight As Long = 2)
    Dim sngRedCur As Single
    Dim sngRedStep As Single
    Dim sngGreenCur As Single
    Dim sngGreenStep As Single
    Dim sngBlueCur As Single
    Dim sngBlueStep As Single
    Dim lCanvasHeight As Long
    Dim lCanvasWidth As Long
    Dim lY As Long
    Dim iRed As Single
    Dim iBlue As Single
    Dim iGreen As Single
    lCanvasHeight = hCanvas.ScaleHeight
    lCanvasWidth = hCanvas.ScaleWidth
    sngRedStep = lBandHeight * (lRedEnd - lRedStart) / lCanvasHeight
    sngRedCur = lRedStart
    sngGreenStep = lBandHeight * (lGreenEnd - lGreenStart) / lCanvasHeight
    sngGreenCur = lGreenStart
    sngBlueStep = lBandHeight * (lBlueEnd - lBlueStart) / lCanvasHeight
    sngBlueCur = lBlueStart
    For lY = 0 To lCanvasHeight Step lBandHeight
        iRed = sngRedCur
        iGreen = sngGreenCur
        iBlue = sngBlueCur
        hCanvas.Line (-1, lY - 1)-(lCanvasWidth, lY + lBandHeight), RGB(iRed, iGreen, iBlue), BF
        sngRedCur = sngRedCur + sngRedStep
        sngGreenCur = sngGreenCur + sngGreenStep
        sngBlueCur = sngBlueCur + sngBlueStep
    Next lY
End Function

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 31.03.2005 (Чт) 16:39

а что означают параметры lRedStart и т.д.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 31.03.2005 (Чт) 17:44

Код: Выделить всё

Dim r, g, b stp As Integer
Dim x1, y1, x2, y2 As Long

Private Sub Form_Load()

Form1.AutoRedraw = True
Form1.ScaleMode = 3

r = 0: g = 0: b = 0: stp = 1
x1 = 0: y1 = 0: x2 = 100: y2 = 0

   For i = 0 To 255 Step stp
      Line (x1, y1 + i)-(x2, y2 + i), RGB(r + i, g, b)
   Next i

End Sub

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 31.03.2005 (Чт) 18:29

IMHO, неплохой пример приведен в API-Guid'e. Быстродействие у API скорее всего поболя будет.
Листинги не горят!

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 01.04.2005 (Пт) 10:40

Если размер прямоугольной области не очень большой, вряд ли ты заметишь разницу в скорости.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 160

    TopList