¿Poner una ventana por delante de las demás?

Iniciado por Scratz, 8 Septiembre 2006, 21:11 PM

0 Miembros y 1 Visitante están viendo este tema.

Scratz

Creo que el título lo dice todo. No quiero que mi form esté siempre visible, sinó que una ventana esté activa (activa = la primera que tenemos). Ej: Apreto un botón de mi aplicación y la ventana de Internet Explorer (ya abierto) se pone la primera. Soy novato y no sé como hacer eso.
\\... The Revolution Is Comming ...//

NYlOn

Si sos novato, lo primero que Debes hacer es aprender a busar. Hay una APIs que te pueden ayudar: SetWindowPos Te permite cambiar algunas propiedades de las ventanas. Lo unico que necesitas es el handle de la ventana (si se trata de tu aplicacion podes usar la propiead Formulario.Hwnd).


Saludos.-

Scratz

Gracias, voy a ver si encuentro ejemplos de cómo usar eso.
\\... The Revolution Is Comming ...//

Scratz

Lo que busco es SetActiveWindow. Pero no encuentro ejemplos entendibles de como usarlo.
\\... The Revolution Is Comming ...//

Scratz

No, parece que el SetActiveWindow es para las ventanas de la misma aplicación. He encontrado un ejemplo de SetFocus pero lo q hace es ejecutar una aplicación mostrandola dentro del Form, cosa que no me sirve por que la aplicación ya tiene q estar ejecutada.
\\... The Revolution Is Comming ...//

yeikos


'Module1.bas
Public 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

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



'Form1.frm
Private Sub Form_Load()
SetWindowPos hWnd, -1, Screen.Height, Screen.Width, 0, 0, SWP_FLAGS
End Sub



Scratz

No, yo me refiero a una ventana de otra aplicación. No de la mia.
\\... The Revolution Is Comming ...//

Scratz

Sigo sin encontrarlo así que he optado por una chapuzilla.
\\... The Revolution Is Comming ...//

yeikos

Te entendí mal, ahí tienes por si todavía te vale...


'Module1.bas
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public 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

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



'Form1.frm
Private Sub Form_Load()
Ventana = FindWindow(vbNullString, "Nombre de la ventana")
SetWindowPos Ventana, -1, Screen.Height, Screen.Width, 0, 0, SWP_FLAGS
End Sub




Scratz

Bien, así quedará más profesional. Pero no me hace nada (no me ha dado errores). No pasa nada cuando lo abres.
\\... The Revolution Is Comming ...//