Visual Basic - Activar formulario cuando proyecto no acitvo

Life is soft - evento anual de software empresarial
 
Vista:

Activar formulario cuando proyecto no acitvo

Publicado por Ana (3 intervenciones) el 06/11/2003 09:53:41
Tengo un proyecto con un MDIform que contiene un timer que comprueba cada x tiempo si se cumple una condición. En el momento que esta condición se cumpla, debe mostrar un formulario (que no es modal) por delante de cualquier aplicación que se este ejecutando. Es decir, que yo puedo estar escribiendote este mensaje, y si esa condición se cumple, la aplicación me debe mostrar como activa la ventana correspondiente. No se si me he explicado bien.

Esto lo he hecho con un proyecto sin MDI, asígnandole al estado de la ventana un maximizado y luego haciendo un show. Pero esto en este proyecto no funciona, ¿Sabrías como podría hacerlo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Activar formulario cuando proyecto no acitvo

Publicado por Valter (20 intervenciones) el 09/11/2003 07:50:28
a ver si esto te sirve

Option Explicit

Public Const HWND_NOTOPMOST = -2
Public Const HWND_TOPMOST = -1
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1

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

Sub FormFlotante(hWndflot As Long, Accion As Integer)
'Si Accion es <> 0 entonces el formulario pasa a ser flotante
'si =0 entonces deja de ser flotante
Dim wFlags As Integer
wFlags = SWP_NOSIZE Or SWP_NOMOVE
If Accion <> 0 Then
Call SetWindowPos(hWndflot, HWND_TOPMOST, 0, 0, 0, 0, wFlags)
Else
Call SetWindowPos(hWndflot, HWND_NOTOPMOST, 0, 0, 0, 0, wFlags)
End If
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Activar formulario cuando proyecto no acitvo

Publicado por Ana (3 intervenciones) el 10/11/2003 10:35:48
ok, ya consegui solucionarlo con las API's:
'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

' SetWindowPos Flags
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

'Código para poner en Form_Load

'De esta forma no es necesario usar una variable para asignar el valor devuelto:
If SetWindowPos(hWnd, -1, 0, 0, 0, 0, SWP_FLAGS) Then
End if

esto fue todo, es una opción similar a la tuya.

Gracias, de todas formas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar