VB4-VB6
Von: Tobias Schikora [Home]
Damit ihr Programm auch noch geöffnet bleibt, wenn der Benutzer auf den Schließen-Button des Form klickt, müssen Sie das Beenden im QueryUnload- Ereignis des Form abbrechen:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If UnloadMode = vbFormControlMenu Then Cancel = True End If End Sub
Anders geht es auch, indem sie einfach den Schließen-Button deaktivieren. Dies ist über einige Menü- API- Aufrufe realisierbar. Die benötigten Funktionen und Konstanten:
Private Declare Function GetSystemMenu Lib "user32" _ (ByVal hwnd As Long, ByVal bRevert As Long) As Long Private Declare Function RemoveMenu Lib "user32" _ (ByVal hMenu As Long, ByVal nPosition As Long, _ ByVal wFlags As Long) As Long Private Declare Function DrawMenuBar Lib "user32" _ (ByVal hwnd As Long) As Long Private Const MF_BYCOMMAND = &H0& Private Const MF_REMOVE = &H1000& Private Const SC_CLOSE = &HF060
Aus diesen Funktionen wird eine Prozedur zusammengestellt, der lediglich das Form als Parameter übergeben werden muss. Über den optionalen Parameter Enabled lässt sich festlegen, ob das Schließen-Menü gesperrt (Standard => False) oder freigegeben ist (True):
Public Sub DisableClose(ByRef Form As Form, _ Optional ByVal Enabled As Boolean) Dim hMenu As Long If (Enabled) Then ' Systemmenü wiederherstellen: GetSystemMenu Form.hwnd, True Else ' Schließen-Menü sperren: hMenu = GetSystemMenu(Form.hwnd, False) RemoveMenu hMenu, SC_CLOSE, MF_BYCOMMAND RemoveMenu hMenu, &H0, MF_BYCOMMAND End If DrawMenuBar Form.hwnd End Sub
Jetzt kann man einfach per DisableClose Me
den Schließen-Button des
aktuellen Form deaktivieren. Somit wird auch gleich der Eintrag "Schließen" im
Systemmenü des Programms entfernt und das Programm lässt sich nicht mehr beenden.
DisableClose Me, True
setzt das Systemenü wieder zurück und schaltet
den Schließen-Button wieder frei. Damit das Programm auch nicht per Alt + F4
beendet werden kann, muss weiterhin Cancel = True
im QueryUnload-
Ereignis des Form stehen, wie oben beschrieben.