FORM NO TOPO

USUARIO.EXCLUIDOS 30/05/2005 17:16:29
#85969
Olá,

Tenho um form que é acionado qdo chega uma determinada hora. Estou tentando coloca-lo por cima das outras aplicaçoes que o usuario estiver usando, mas não estou conseguindo. Achei o codigo abaixo na net. No modulo coloco:

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
Public Const SWP_NOMOVE = 2
Public Const SWP_NOSIZE = 1
Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE

No Form_Load do form que quero mostrar na frente de todos eu coloco:

SetWindowPos frmaviso.hwnd, -2, 0, 0, 0, 0, FLAGS

Mas não funciona. O form aparece por tras da aplicação que está aberta. Alguem sabe como fazer para colocar o form na frente da aplicação que estiver aberta? Obrigado.

Luiz
TRUHILLO 30/05/2005 17:23:05
#85970
Resposta escolhida
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 Const SWP_FLAGS = 3
Private Const SWP_HWND_TOPMOST = -1
Private Const SWP_HWND_NOTOPMOST = -2

Public Sub AlwaysOnTop(myfrm As Form, SetOnTop As Boolean)
Dim lFlag As Long
If SetOnTop Then
lFlag = SWP_HWND_TOPMOST
Else
lFlag = SWP_HWND_NOTOPMOST
End If
SetWindowPos myfrm.hwnd, lFlag, myfrm.Left / Screen.TwipsPerPixelX, myfrm.Top / Screen.TwipsPerPixelY, myfrm.Width / Screen.TwipsPerPixelX, myfrm.Height / Screen.TwipsPerPixelY, SWP_FLAGS
End SubLAGS
End Sub


Tem essa função que encontrei aqui no VBMania que funciona perfeitamente comigo.
Para chamá-la faça assim no evento Load, por exemplo:
AlwaysOnTop frmaviso, True
ALEXANDRE.SANTO 30/05/2005 17:27:31
#85971
Ahh tente esse codigo entaum..........ele ira ficar na frente de outras aplicaçoes no form_load....mas c vc quiser e soh tirar a linha d codigo do form_load e mudar para outro evento

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 Const SWP_FLAGS = 3
Private Const SWP_HWND_TOPMOST = -1
Private Const SWP_HWND_NOTOPMOST = -2

Public Sub AlwaysOnTop(myfrm As Form, SetOnTop As Boolean)
Dim lFlag As Long
If SetOnTop Then
lFlag = SWP_HWND_TOPMOST
Else
lFlag = SWP_HWND_NOTOPMOST
End If
SetWindowPos myfrm.hwnd, lFlag, myfrm.Left / Screen.TwipsPerPixelX, myfrm.Top / Screen.TwipsPerPixelY, myfrm.Width / Screen.TwipsPerPixelX, myfrm.Height / Screen.TwipsPerPixelY, SWP_FLAGS
End Sub

Private Sub Form_Load()
AlwaysOnTop Form1, True
End Sub
ALEXANDRE.SANTO 30/05/2005 17:29:54
#85972
TRUHILLO desculpe naum tinha visto que vc jah tinha postado !!!
USUARIO.EXCLUIDOS 30/05/2005 20:57:59
#86014
Funcionou Truhillo. Valeu.

Luiz
Tópico encerrado , respostas não são mais permitidas