2012-01-05 15 views
6

According to MS al mostrar un formulario modal en VB6 que no aparece en la barra de tareas 'de diseño'Fuerza formulario modal que se mostrará en la barra de tareas

Pero ¿hay alguna manera de hacer que una forma de VB6 modal que se muestra en la barra de tareas (la propiedad ShowInTaskbar no tiene efecto cuando es modal)

En una de nuestras aplicaciones tenemos un formulario de inicio de sesión modal que es el primer formulario que se muestra en la aplicación después de que se descarga la pantalla emergente, por lo que si el usuario se mueve otra ventana en la parte superior que no sabe que está cargada.

Respuesta

6

se puede usar algo como esto en el formulario modal

Private Const WS_EX_APPWINDOW    As Long = &H40000 
Private Const GWL_EXSTYLE     As Long = (-20) 
Private Const SW_HIDE      As Long = 0 
Private Const SW_SHOW      As Long = 5 

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long 
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long 

Private m_bActivated As Boolean 

Private Sub Form_Activate() 
    If Not m_bActivated Then 
     m_bActivated = True 
     Call SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_APPWINDOW) 
     Call ShowWindow(hwnd, SW_HIDE) 
     Call ShowWindow(hwnd, SW_SHOW) 
    End If 
End Sub 
+0

excelente solución simple gracias –

1

Deberá hacer subclases, algo así como this de VBAccelerator.

Renuncia - una adaptación de la respuesta de PM2 a this question que es probable que un duplicado, pero no podemos decir porque el cartel original nunca nos dijo si era su forma modal.

+0

Gracias @ Jeff para fijar el enlace! – MarkJ

3

Pon este código en tu ventana modal:


    Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long 

    Private Sub Form_Activate() 
     Call ShowWindow(Me.hWnd, vbHide) 
     Me.Caption = Me.Caption 
     Call ShowWindow(Me.hWnd, vbNormalFocus) 
    End Sub 

+0

Esto funcionó para mí y es mucho más fácil que la subclasificación. ¿Podría alguien explicar por qué 'Me.Caption = Me.Caption' es para? –

+0

Por lo que puedo decir, hace que Windows actualice algunas de las propiedades de la ventana para que vuelva a evaluar si la ventana debería aparecer en la barra de tareas cuando la muestre nuevamente. Al usar el indicador vbNormalFocus con ShowWindow, Windows lo tratará como si fuera la primera vez que se muestra la ventana, siempre y cuando haya "cambiado" algunas de las propiedades de la ventana. – cjc

Cuestiones relacionadas