Сворачивание окна проги в трей

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rostik Ultra (2)
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 159
Зарегистрирован: 10.05.2005 (Вт) 2:41
Откуда: Антарктическая республика

Сворачивание окна проги в трей

Сообщение Rostik Ultra (2) » 01.09.2005 (Чт) 6:37

Программа не имеет заголовка. при сворачивании программа уходит в левую сторону экрана (в район кнопки пуск)

Вопрос : как сделать чтобы прога сворачивалась в трей (как например KAV)
Мой сайт http://mentalprograms.narod.ru/ - бесплатные развивающие программы

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 01.09.2005 (Чт) 7:51

Примерно так:
Код: Выделить всё
Private Sub Form_Resize()
If WindowState = 1 Then
HideInTray
End If
End Sub
[/code]
الفيجوال بيسك الرابح

Rostik Ultra (2)
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 159
Зарегистрирован: 10.05.2005 (Вт) 2:41
Откуда: Антарктическая республика

Сообщение Rostik Ultra (2) » 01.09.2005 (Чт) 7:58

А HideInTray это чё процедура ? Покажи какой должен быть код ...
Мой сайт http://mentalprograms.narod.ru/ - бесплатные развивающие программы

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.09.2005 (Чт) 9:04

Н-да, сегодня же первое сентября. Видимо следующим вопросом будет "как загнать картинку в базу данных?".

По существу - читай faq.
Лучший способ понять что-то самому — объяснить это другому.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 01.09.2005 (Чт) 10:28

Antonariy

Читай "Откуда")))) Чукча, наверное....
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 01.09.2005 (Чт) 10:35

RTFM no Shell_NotifyIcon :!:
Если всё делать своими ручками, они скоро отвалятся !

IvanTheTerrible
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 20.07.2005 (Ср) 11:47
Откуда: Moscow

Сообщение IvanTheTerrible » 01.09.2005 (Чт) 11:18

2 Kovu:
"Если всё делать своими ручками, они скоро отвалятся !" - цитата из "Дневника ананиста"? :lol:

P.S. Ничего личного! :D

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 01.09.2005 (Чт) 11:23

IvanTheTerrible писал(а):2 Kovu:
"Если всё делать своими ручками, они скоро отвалятся !" - цитата из "Дневника ананиста"? :lol:

P.S. Ничего личного! :D

Вообщето сам придумал и если б не такие как ты умственно одарённые всё было б намного лучше :twisted: :twisted: :twisted: Ничего личного
Если всё делать своими ручками, они скоро отвалятся !

Rostik Ultra (2)
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 159
Зарегистрирован: 10.05.2005 (Вт) 2:41
Откуда: Антарктическая республика

Сообщение Rostik Ultra (2) » 03.09.2005 (Сб) 2:21

Господа специально для особо внимательных повторяю свой вопрос :
как сделать чтобы прога сворачивалась в трей (как например KAV) То есть : чтобы окно программы двигалось (при сворачивании) в напралении трея , а не в сторону кнопки пуск Весь вопрос про движение в сторону трея , где собственно и находится значок программы
Мой сайт http://mentalprograms.narod.ru/ - бесплатные развивающие программы

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 03.09.2005 (Сб) 6:29

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

Private Declare Function DrawAnimatedRects Lib "user32.dll" (ByVal hwnd As Long, _
      ByVal idAni As Long, ByRef lprcFrom As Rect, ByRef lprcTo As Rect) As Long


Рисует серию прямоугольников (от начального положения до конечного).
hWnd - хендл окна, для которого рисуются прямоугольники
idAni - не помню. Я в своей программе использую эту функцию. Под рукой примера нет (кажется параметр задающий анимацию анимированые прямоугольники или нет).
lprcFrom - описание начального прямоугольника (структура RECT).
lprcTo - описание конечного прямоугольника (структура RECT).

Сорри, если ошибки в описании.. :oops:
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Makc
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 03.09.2005 (Сб) 15:42

Сообщение Makc » 03.09.2005 (Сб) 15:54

Лови полностью рабочий код:

Модуль:

Код: Выделить всё
Declare Function Shell_NotifyIconA Lib "SHELL32" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Integer
Public Const NIM_ADD = 0
Public Const NIM_MODIFY = 1
Public Const NIM_DELETE = 2
Public Const NIF_MESSAGE = 1
Public Const NIF_ICON = 2
Public Const NIF_TIP = 4

Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public Function SetTrayIcon(Mode As Long, hWnd As Long, Icon As Long, tip As String) As Long
Dim nidTemp As NOTIFYICONDATA
nidTemp.cbSize = Len(nidTemp)
nidTemp.hWnd = hWnd
nidTemp.uID = 0&
nidTemp.uFlags = NIF_ICON Or NIF_TIP
nidTemp.uCallbackMessage = 0&
nidTemp.hIcon = Icon
nidTemp.szTip = tip & Chr$(0)
SetTrayIcon = Shell_NotifyIconA(Mode, nidTemp)
End Function


Форма:

Код: Выделить всё
Private Sub Command1_Click()
SetTrayIcon NIM_ADD, Me.hWnd, Me.Icon, "Test"
End Sub

Private Sub Command2_Click()
SetTrayIcon NIM_MODIFY, Me.hWnd, Me.Icon, "It works!"
End Sub

Private Sub Command3_Click()
SetTrayIcon NIM_DELETE, Me.hWnd, 0&, ""
End Sub


P.S. Не забудь на форму три кнопки кинуть :)
sitemoney.ru

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 03.09.2005 (Сб) 19:29

Ну вот я и дома. :)

Makc, читать умеем? Человеку нужна анимация при сворачивании в трей.

Вот это мой (рафинированный специально для данного топика) код

В форме (имя формы Form1):
Код: Выделить всё

Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function DrawAnimatedRects Lib "user32.dll" (ByVal hwnd As Long, ByVal idAni As Long, lprcFrom As RECT, lprcTo As RECT) As Long

Enum AnimateMode
    M_CLOSE = 0
    M_OPEN = 1
End Enum

Private bRestore As Boolean

Option Explicit


Private Sub Form_Resize()
    If Me.WindowState = vbMinimized Then
        AnimateWindow (M_CLOSE)
        Me.Visible = False
        SetTrayIcon NIM_ADD, Me.hwnd, Me.Icon, Me.Caption
        bRestore = True
    Else
        If bRestore Then
            DelIcon Me
        End If
    End If
End Sub

Private Sub AnimateWindow(ByVal aniMode As AnimateMode)
    Dim rctFrom As RECT, rctTo As RECT
    Dim TrayHwnd As Long, Ret As Long
    Dim lMode As Long
    Static rctPrev As RECT
        If Me.WindowState = vbMinimized Then
                lMode = IDANI_CLOSE
        Else
                lMode = IDANI_OPEN
                bRestore = False
        End If
            lMode = IDANI_CAPTION Or lMode
        TrayHwnd = FindWindow("Shell_TrayWnd", vbNullString)
        GetWindowRect TrayHwnd, rctTo
        rctTo.left = rctTo.right
        rctTo.top = rctTo.bottom
            With rctFrom
                .left = Me.ScaleLeft
                .top = Me.ScaleTop
                .bottom = Me.Height
                .right = Me.Width
            End With
            rctPrev = rctFrom
            If aniMode = M_OPEN Then
                rctFrom = rctPrev
                Ret = DrawAnimatedRects(Me.hwnd, lMode, rctTo, rctFrom)
            Else
                Ret = DrawAnimatedRects(Me.hwnd, lMode, rctFrom, rctTo)
            End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    If y = 0 Then
        Select Case x / Screen.TwipsPerPixelX
            Case 512 'MouseMove
            Case 513 'LeftButtonDown
            Case 514 'LeftButtonUp
                AnimateWindow (M_OPEN)
                ShowWindow Me.hwnd, SW_RESTORE
                SetForegroundWindow Me.hwnd
                SetActiveWindow Me.hwnd
            Case 515 'LeftButtonDblClick
            Case 516 'RightButtonDown
            Case 517 'RightButtonUp
            Case 518 'RightButtonDblClick
        End Select
    End If
End Sub


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

Public Type RECT
   left As Long
   top As Long
   right As Long
   bottom As Long
End Type

Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Public Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

Public Const IDANI_CLOSE As Long = &H2
Public Const IDANI_CAPTION As Long = &H3
Public Const IDANI_OPEN As Long = &H1

Public Const SW_RESTORE As Long = 9

Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2

Option Explicit

Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Long

Public Type NOTIFYICONDATA
    cbSize As Long
    hwnd As Long
    uID As Long
    uFlags As Long
    uCallbackMessage As Long
    hIcon As Long
    szTip As String * 64
End Type

Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONUP = &H205

Public Function SetTrayIcon(Mode As Long, hwnd As Long, Icon As Long, Optional strToolTipText As String = "")
On Error Resume Next
Dim NID As NOTIFYICONDATA
    With NID
        .cbSize = Len(NID)
        .hwnd = hwnd
        .uID = &H0
        .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
        .uCallbackMessage = WM_LBUTTONUP
        .hIcon = Icon
        .szTip = left(strToolTipText, 63) & Chr(0)
        SetTrayIcon = Shell_NotifyIcon(Mode, NID)
    End With
End Function

Public Sub DelIcon(frForm As Form)
    On Error Resume Next
    With frForm
        SetTrayIcon NIM_DELETE, .hwnd, 0, ""
    End With
End Sub

Public Sub ModIcon(frForm As Form, Optional strToolTipText As String = "")
    On Error Resume Next
    With frForm
        SetTrayIcon NIM_MODIFY, .hwnd, .Icon, strToolTipText
    End With
End Sub


В этом коде предусмотрена анимация и при сворачивании и при восстановлении окна.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 117

    TopList