На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Тень у формы , Это просто
    Только для Windows XP, к сожалению.

    ExpandedWrap disabled
      Option Explicit
       
      Private Const CS_DROPSHADOW = &H20000
      Private Const GCL_STYLE = -26
       
      Private Declare Function SetClassLongA Lib "user32.dll" (ByVal hWnd As Long, ByVal nVal As Long, _
                                                               ByVal dwValue As Long) As Long
      Private Declare Function GetClassLongA Lib "user32.dll" (ByVal hWnd As Long, ByVal nVal As Long) As Long
       
      Sub AddShadowToForm(ByVal hWnd As Long)
        Call SetClassLongA(hWnd, GCL_STYLE, GetClassLongA(hWnd, GCL_STYLE) Or CS_DROPSHADOW)
      End Sub
       
      Private Sub Form_Load()
        Call AddShadowToForm(Me.hWnd)
      End Sub


    В FAQ? ;)
    Сообщение отредактировано: SCINER -
      Как я не люблю код, где вместо констант пишут их значения...

      Ну, и что это за стиль со значением 0x20000?
        Сорри, привычка. CS_DROPSHADOW.
        GCL_STYLE = -26 - соответственно.
          работает!




            Сообщение отредактировано: B.V. -
              а с чего это и другие формы программы начинают отображаться с тенью =(
                Есть только маленькое "НО": тень добавляется ко всем формам (т.к. SetClassLong, все же), которые будут открыты позже. Если стиль убрать, то тень "отлипнет" от формы и будет висеть уже сама по себе. Ничего лучше не нашел, чем сделать так, т.к. определить родителя Shadow нет возможности (а может и есть, но док-ции к SysShadow толковой нет):

                ExpandedWrap disabled
                  Sub KillShadow()
                  Dim hShadow As Long, pID As Long, cpID As Long
                  cpID = GetCurrentProcessId
                  Do
                  hShadow = FindWindowExA(hShadow, 0, "SysShadow", 0&)
                  If hShadow <> 0 Then
                      GetWindowThreadProcessId hShadow, pID
                      If pID = cpID Then DestroyWindow hShadow
                      Exit Do
                  ElseIf hShadow = 0 Then Exit Do
                  End If
                  Loop
                  End Sub

                Т.к. Shadow создают окна, которые имеют данный стиль (меню или tooltips), то боятся за то, что убьются "не те" тени нечего. Впрочем, вероятно, есть вариант и получше.
                ps: Данный способ (KillShadow с удалением стиля с класса форм в Form_Unload) прокатывает на УРА.
                Сообщение отредактировано: ALXR -
                  мда. геморная фишка.
                  ответов в сети не нашел.
                    Собственно, тень, в основном, хочется использовать либо для SPLASH-окон, либо для собственных имитаций меню или тултипов. А т.к. используется GetClassLong, то единственный верный способ вешать тень на нужное окно - регистрировать свой класс. Вот, набросал на WinAPI класс Splash-окон. Код особенно не старался причесать, много где используются числа вместо констант, но все работает.
                    Прикреплённый файлПрикреплённый файлsplash.zip (73.3 Кбайт, скачиваний: 192)
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0302 ]   [ 15 queries used ]   [ Generated: 15.09.25, 21:03 GMT ]