2012-01-05 12 views
6

According to MS kiedy pokażesz modalnego formularza w VB6 to nie pokazuje się na pasku zadań „z projektem”Siła Modal Formularz być wyświetlane w pasku zadań

Ale czy jest jakiś sposób, aby formularz VB6 Modal być pokazany w pasek zadań (właściwość ShowInTaskbar nie ma wpływu, gdy jest modalny)

W jednej z naszych aplikacji mamy formularz logowania modalnego, który jest pierwszym formularzem wyświetlanym w aplikacji po wyładowaniu ekranu powitalnego, więc jeśli użytkownik się porusza kolejne okno na górze nie wiesz, że jest załadowane.

Odpowiedz

6

Można użyć coś takiego w postaci modalnej

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

doskonałe proste rozwiązanie dziękuję –

1

Będziesz musiał wykonać podklasę, coś jak this z VBAccelerator.

Zastrzeżone - adaptacja odpowiedź PM2 do this question który jest prawdopodobnie duplikat, ale nie możemy powiedzieć, ponieważ oryginalny plakat nigdy nie powiedział nam, czy ich forma była modalne.

+0

Thanks @Jeff do mocowania link! – MarkJ

3

umieścić ten kod w swoim modalnego okna:


    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

To działało dla mnie i jest znacznie łatwiejsze niż podklasy. Czy ktoś mógłby wyjaśnić, do czego służy funkcja 'Me.Caption = Me.Caption'? –

+0

Z tego, co wiem, powoduje, że Windows aktualizuje niektóre właściwości okna, aby ponownie ocenić, czy okno powinno pojawić się na pasku zadań po ponownym wyświetleniu. Używając flagi vbNormalFocus z ShowWindow, Windows potraktuje ją tak, jak gdyby była wyświetlana po raz pierwszy, o ile "zmieniłeś" niektóre właściwości okna. – cjc