Всплывающее окно над иконкой в SysTray

ZEugene
Дата: 29.09.2005 11:07:05
Господа!

Может быть кто-то страдал такой фигнёй, может подскажете.

Начальные условия:
База на сиквеле, клиент адп.
Юзеры между собой делятся на клиентов(создатели запросов на покупку билетов) и операторов(обработчики, бронировка и покупка оных)

В адп реализована на сокете возможность общаться друг с другом, и получать различные оповещения от сервера при различных событиях(билет куплен и т.п).

При сворачивании адп, помещаю в СисТрай.

Вопрос:
Есть ли возможность, над иконкой выводить спец. форму(маленького размера) для оповещения прихода нового сообщения ... как в ICQ, Skype и т.п.

Если кто обладает работающим кодом буду признателен
Заранее благодарю
ZEugene
Дата: 29.09.2005 15:36:09
Всем спасибо,

нашёл решение
ANTIVIR
Дата: 29.09.2005 16:01:33
ZEugene
Всем спасибо,

нашёл решение

И нам бы, хоть бы 1 глазком глянуть, на сие сокровище, если не жалко)
ZEugene
Дата: 30.09.2005 11:24:02
Да всё пока очень упрощённо,

по приходу сообщения по сокету, проверяю если приложение свёрнуто(через IsIconic) то говорю загрузить спец. форму, по загрузке, через MoveWindow говорю ей где открыться, а через SetLayeredWindowAttributes задаю степень прозрачности ... получается очень эротично.

хочу чтобы форма плавно ныростала снизу вверз, отлажу - скину,

я вообще не спец, но стараюсь,

Женя
Пользователь2
Дата: 30.09.2005 12:19:59
ZEugene
Отлажу - скину.

Давай, интересно посмотреть на эротичную форму. :)
ZEugene
Дата: 30.09.2005 13:14:49
Option Compare Database

Private Declare Function MoveWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal X As Long, ByVal Y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwndParent&, ByVal hwndChildAfter&, ByVal lpszClass$, ByVal lpszWindow$) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd&, ByRef lpRect As RECT) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long

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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
  ByVal hdc As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
  ByVal nIndex As Long) As Long

Const HWND_DESKTOP As Long = 0
Const LOGPIXELSX As Long = 88
Const LOGPIXELSY As Long = 90
'--------------------------------------------------
Function TwipsPerPixelX() As Single
'--------------------------------------------------
'Returns the width of a pixel, in twips.
'--------------------------------------------------
  Dim lngDC As Long
  lngDC = GetDC(HWND_DESKTOP)
  TwipsPerPixelX = 1440& / GetDeviceCaps(lngDC, LOGPIXELSX)
  ReleaseDC HWND_DESKTOP, lngDC
End Function

'--------------------------------------------------
Function TwipsPerPixelY() As Single
'--------------------------------------------------
'Returns the height of a pixel, in twips.
'--------------------------------------------------
  Dim lngDC As Long
  lngDC = GetDC(HWND_DESKTOP)
  TwipsPerPixelY = 1440& / GetDeviceCaps(lngDC, LOGPIXELSY)
  ReleaseDC HWND_DESKTOP, lngDC
End Function
'hWnd - ìàíèïóëÿòîð îêíà, Layered - ñòåïåíü ïðîçðà÷íîñòè îò 0 äî 255
Private Sub SetTransparent(hwnd As Long, Layered As Byte)
Dim Ret As Long
'Îïðåäåëÿåì ñòèëü íóæíîãî îêíà
Ret = GetWindowLong(hwnd, GWL_EXSTYLE)
'Çàäà¸ì ñòèëü îêíà êàê çàñëî¸ííûé
Ret = Ret Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, Ret
'Çàä¸ì ñòåïåíü ïðîçðà÷íîñòè îêíà
SetLayeredWindowAttributes hwnd, 0, Layered, LWA_ALPHA
End Sub

Private Sub Form_Load()

Dim Xtwip As Integer
Dim Ytwip As Integer
Dim Y As Integer, Ymax As Integer
Dim rctMain As RECT
Dim Timer As Long
Dim tmr
Dim hDesktop As Long
hDesktop = GetDesktopWindow
Xtwip = CInt(TwipsPerPixelX)
Ytwip = CInt(TwipsPerPixelY)

Call GetClientRect(hDesktop, rctMain)
Call SetTransparent(Me.hwnd, 150)
Ymax = 200

For Y = 0 To Ymax
  Call MoveWindow(Me.hwnd, rctMain.Right - 25 - (Me.Width / Xtwip), rctMain.Bottom - (Me.WindowHeight / Ytwip) - 30, 190, Y, 1)
Next

Me.txtMessage = ReceivedMessage
End Sub