Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Украшения для проги Добавлено: 16.08.09 09:55  

Автор вопроса:  Ciaocacao
Пишу программу, в которой много внимания уделяю дизайну и внешнему виду проги (не главное, чтобы работало, главное чтобы красиво было :)), столкнулся с трудностями, нужна помощь товарищей по Basic'у.

1. Сделать прозрачной или полупрозрачной форму довольно легко. Подскажите, можно ли сделать прозрачным\полупрозрачным Picture1 на непрозрачной форме? И если можно, то как?
2. Имеется картинка Picture1 и Slider1 (или любой другой ползунок). Как сделать, чтобы при изменении значения ползунка картинка меняла цвет, но изображение (за исключением смены цвета) оставалось прежним? (В некоторых программах это называется цветовой схемой, находится в настройках там же, где и выбор скина (если имеется), лучше всего, на мой взгляд, реализовано в Zoom Player).
3. Подскажите, pls, можно ли сделать, чтобы при срабатывании кода "Picture1.Visible = False", картинка исчезала поспенно?

Ответить

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

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



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #1
Добавлено: 16.08.09 11:23
1. Для прозрачности юзай просто вместо PictureBox функцию AlphaBlend (погугли как там с ней общаться)
2. Для цветовой схемы можешь юзать готовые библиотеки (опять же погугли) или вручную проходить картинку попиксельно.

Ответить

Номер ответа: 2
Автор ответа:
 Starkiller



ICQ: 123123 

Вопросов: 3
Ответов: 14
 Web-сайт: google.ru/
 Профиль | | #2
Добавлено: 16.08.09 13:12
3. Лучше свою функцию напиши (см пункт одЫн)

Ответить

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



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #3
Добавлено: 16.08.09 14:47
Своя функция будет работать в сто раз медленнее.

Ответить

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



Вопросов: 3
Ответов: 5
 Профиль | | #4 Добавлено: 16.08.09 15:41
1. Для прозрачности юзай просто вместо PictureBox функцию AlphaBlend (погугли как там с ней общаться)

Попробую, хотя раньше с этим не сталкивался, но, думаю, найду справку по ней.
А вообще, есть примеры использования AlphaBlend?

2. Для цветовой схемы можешь юзать готовые библиотеки (опять же погугли) или вручную проходить картинку попиксельно.

Готовые библиотеки использовать не хочется... а вручную по пикселям изменять картинку - это сильно заморочено? И опять же есть исходники?
3. Лучше свою функцию напиши (см пункт одЫн)

Я сделал еще лучше :) Пошел длинным путем... каждую картинку представил в виде отдельной формы, расположенной поверх главной формы в виде картинки. Но это приносит еще кучу заморочек.
А писать отдельную функцию пока что не хватает опыта.

Ответить

Номер ответа: 5
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #5 Добавлено: 16.08.09 20:39
Сорри за тупость, но как можно форму зделать полупрозрачной)

Ответить

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



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #6
Добавлено: 16.08.09 21:02
  1. Public Function MakeTransparent(ByVal Hwnd As Long, Perc As Integer) As Long
  2. On Error Resume Next
  3. Dim Msg As Long
  4. If Loading Then Perc = 0
  5.    
  6.     If Perc < 0 Or Perc > 255 Then
  7.       MakeTransparent = 1
  8.     Else
  9.       Msg = GetWindowLong(Hwnd, GWL_EXSTYLE)
  10.       Msg = Msg Or WS_EX_LAYERED
  11.       SetWindowLong Hwnd, GWL_EXSTYLE, Msg
  12.       SetLayeredWindowAttributes Hwnd, 0, Perc, LWA_ALPHA
  13.       MakeTransparent = 0
  14.     End If
  15.     If err Then
  16.       MakeTransparent = 2
  17.     End If
  18. End Function


Нужные АПИ и константы сам выципишь.

Ответить

Номер ответа: 7
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #7
Добавлено: 17.08.09 16:56
vbd, мб perc as byte лучше? чтоб проверок лишних не делать

Ответить

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



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #8
Добавлено: 17.08.09 18:25
SetLayeredWindowAttributes принимает Integer. Зачем лишние извращения? Да и On Error Resume Next подстрахует если чо.

Ответить

Номер ответа: 9
Автор ответа:
 Илья



Вопросов: 1
Ответов: 48
 Профиль | | #9 Добавлено: 18.08.09 19:24
3. Подскажите, pls, можно ли сделать, чтобы при срабатывании кода "Picture1.Visible = False", картинка исчезала поспенно?

Вот, скорость вроде нормальная: http://visualprog.ucoz.ru/Hide.rar

Ответить

Номер ответа: 10
Автор ответа:
 Ciaocacao



Вопросов: 3
Ответов: 5
 Профиль | | #10 Добавлено: 19.08.09 09:25
Вот, скорость вроде нормальная: http://visualprog.ucoz.ru/Hide.rar

Илья, спасибо!
Картинка не столько даже медленно исчезает, но меняет цвет пописксельно, как мне и нужно было со 2-м вопросом.
Но есть и минусы: пример подвисает, и скорость исчезновения ну совсем уж медленная. Но, думаю, это уже решу сам.

Сорри за тупость, но как можно форму зделать полупрозрачной)

В код формы нужно вбить вот это:

Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function UpdateLayeredWindow Lib "user32" (ByVal hwnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hDCSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
Private Const ULW_COLORKEY = &H1
Private Const ULW_ALPHA = &H2
Private Const ULW_OPAQUE = &H4
Private Const WS_EX_LAYERED = &H80000

Public Function isTransparent(ByVal hwnd As Long) As Boolean
On Error Resume Next
    ;Dim Msg As Long
    Msg = GetWindowLong(hwnd, GWL_EXSTYLE)
    If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then
    isTransparent = True
    Else
    isTransparent = False
    End If
    If Err Then
    isTransparent = False
    End If
End Function

Public Function MakeTransparent(ByVal hwnd As Long, Perc As Integer) As Long
Dim Msg As Long
On Error Resume Next
    If Perc < 0 Or Perc > 255 Then
    MakeTransparent = 1
    Else
    Msg = GetWindowLong(hwnd, GWL_EXSTYLE)
    Msg = Msg Or WS_EX_LAYERED
    SetWindowLong hwnd, GWL_EXSTYLE, Msg
    SetLayeredWindowAttributes hwnd, 0, Perc, LWA_ALPHA
    MakeTransparent = 0
    End If
    If Err Then
    MakeTransparent = 2
    End If
End Function

Public Function MakeOpaque(ByVal hwnd As Long) As Long
    ;Dim Msg As Long
    On Error Resume Next
    Msg = GetWindowLong(hwnd, GWL_EXSTYLE)
    Msg = Msg And Not WS_EX_LAYERED
    SetWindowLong hwnd, GWL_EXSTYLE, Msg
    SetLayeredWindowAttributes hwnd, 0, 0, LWA_ALPHA
    MakeOpaque = 0
    If Err Then
    MakeOpaque = 2
    End If
End Function

Private Sub Form_Load()
MakeTransparent Me.hwnd, 150 '(ну, или подставь нужное значение от 0 до 255)
End Sub

Ответить

Номер ответа: 11
Автор ответа:
 Илья



Вопросов: 1
Ответов: 48
 Профиль | | #11 Добавлено: 19.08.09 13:44
Но есть и минусы: пример подвисает, и скорость исчезновения ну совсем уж медленная. Но, думаю, это уже решу сам.

Ну ты даёшь! Измени скорость исчезновения поменяв значение переменной vFrame

Ответить

Номер ответа: 12
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #12
Добавлено: 20.08.09 15:55
Ciaocacao, isTransparent - достаточно так написать)
  1. Public Function isTransparent(ByVal hwnd As Long) As Boolean
  2.     Dim Msg As Long
  3.     Msg = GetWindowLong(hwnd, GWL_EXSTYLE)
  4.     If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then _
  5.         isTransparent = True
  6. End Function

Ответить

Страница: 1 |

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



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