Ventana siempre visible (allways on top)


Ya sea un coqueto reloj de sistema o una aplicación de control que requiera atención permanente es común requerir que una ventana este siempre visible, por encima de todas la demás. Esto se logra recurriendo a la API.

Declaración para usar ventanas siempre visibles:

Versión para 16 bits:

Declare Function 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) As Integer 

Versión para 32 bits 

Declare Function SetWindowPos Lib "User32" Alias "SetWindowPos" (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 

Esto es tanto para 16 como para 32 bits.

Const SWP_NOSIZE = &H1 
Const SWP_NOMOVE = &H2 
'Const SWP_NOZORDER = &H4 
'Const SWP_NOREDRAW = &H8 
Const SWP_NOACTIVATE = &H10 
'Const SWP_DRAWFRAME = &H20 
Const SWP_SHOWWINDOW = &H40 
'Const SWP_HIDEWINDOW = &H80 
'Const SWP_NOCOPYBITS = &H100 
'Const SWP_NOREPOSITION = &H200 
Const SWP_FLAGS = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE

Quitando o agregando ' (indicadores de comentario) logramos personalizar el efecto deseado.

Ahora, en el formulario a afectar deberemos colocar, dentro del evento Load:

If SetWindowPos(hWnd, -1, 0, 0, 0, 0, SWP_FLAGS) Then beep