Avatar billede jakob12345 Nybegynder
06. april 2004 - 17:48 Der er 2 løsninger

Always on top

Jeg vil gerne lave en lille popup a la messengers popups.
Derfor skal popuppen være always on top, men uden at tage fokus.
Jeg har prøvet at leget lidt med det her:

'Module:

#If Win32 Then
Public Const HWND_TOPMOST& = -1
#Else
Public Const HWND_TOPMOST& = -1
#End If 'WIN32

#If Win32 Then
Const SWP_NOMOVE& = &H2
Const SWP_NOSIZE& = &H1
#Else
Const SWP_NOMOVE& = &H2
Const SWP_NOSIZE& = &H1
#End If 'WIN32

#If Win32 Then
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)
#Else
Declare Sub SetWindowPos Lib "user" (ByVal hWnd As Integer, ByVal hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer)
#End If 'WIN32

'Form_load

Dim lFlags As Long
Dim lStay As Long

lFlags = SWP_NOSIZE Or SWP_NOMOVE
lStay = SetWindowPos(Me.hWnd, HWND_TOPMOST, Me.Left / 15, Me.Top / 15, Me.Width / 15, Me.Height / 15, lFlags)



Den sætter godt nok formen on top fra starten men den stjæler samtidgi fokus hvilket ikke er så smart altid. Desuden, hvis man åbner et andet program maksimeret så kommer popuppen bagved programmet hvilket heller ikke er så smart.

Jeg håber at der er nogen der har en god ide til at løse problemet.
Avatar billede sjh Nybegynder
07. april 2004 - 07:31 #1
Så må det være noget i den stil du søger:


'---------------------- Form1 ----------------------
Option Explicit

Private Const HWND_TOPMOST  As Long = -1
Private Const SWP_NOSIZE    As Long = &H1
Private Const SWP_NOMOVE    As Long = &H2
Private Const SWP_NOACTIVATE As Long = &H10
Private Const SWP_SHOWWINDOW As Long = &H40

Private Declare Sub 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)

Private Declare Function GetActiveWindow Lib "user32" () As Long

Private Declare Function SetActiveWindow Lib "user32.dll" ( _
                                ByVal hwnd As Long) As Long

Private Sub Form_Load()
  Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, _
                    SWP_NOACTIVATE Or SWP_SHOWWINDOW Or _
                    SWP_NOMOVE Or SWP_NOSIZE)
  Call SetActiveWindow(GetActiveWindow)
End Sub
'---------------------- Form1 ----------------------
Avatar billede sjh Nybegynder
07. april 2004 - 08:23 #2
na.. det var nok sådan her:

'---------------------- Form1 ----------------------
Option Explicit

Private Const HWND_TOPMOST  As Long = -1
Private Const SWP_NOSIZE    As Long = &H1
Private Const SWP_NOMOVE    As Long = &H2
Private Const SWP_NOACTIVATE As Long = &H10
Private Const SWP_SHOWWINDOW As Long = &H40

Private Declare Sub 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)

Private Declare Function SetActiveWindow Lib "user32.dll" ( _
                                ByVal hwnd As Long) As Long

Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Sub Form_Load()
  Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, _
                    SWP_NOACTIVATE Or SWP_SHOWWINDOW Or _
                    SWP_NOMOVE Or SWP_NOSIZE)
  Call SetActiveWindow(GetDesktopWindow)
End Sub
'---------------------- Form1 ----------------------
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester