Einzelnen Beitrag anzeigen
Alt 02.01.2003, 18:49   #8
Sascha Trowitzsch
MOF Guru
MOF Guru
Standard

Na gut. Altes wieder aufgefrischt.

Das Schließen eines Berichts kann nicht mit Access-Bordmitteln abgefangen werden, ohne dass er auch wirklich schließt. Es gibt nicht sowas wie CloseRequest.
Die einzige Möglichkeit, die ich sehe, ist ein Subclassing des Berichts.
Dieses wiederum funktioniert absolut nicht zuverlässig in VBA. (Schon bei Forms gibt es Schwierigkeiten). Aus diesem Grund ist eine externe ActiveX-DLL zu verwenden.

Ich hab eine MouseWheel-DLL von Lebans erweitert. Hier zu holen: http://www.moss-soft.de/public/mousewheel.dll .

Sie enthält zusätzliche Events und Methoden.

In einem Bericht lässt sie sich z.B. so einsetzen:
Code:

'Beispiel für Subclassing eines Berichts
 
'In die Verweise die DLL mousewheel.dll laden
Private WithEvents SubCLS As MouseWheel.cMouseWheel
 
'Normales Schließen
Private Sub Report_Close()
    SubCLS.SubClassUnHookForm
    Set SubCLS = Nothing
End Sub
 
Private Sub Report_Open(Cancel As Integer)
    Set SubCLS = New MouseWheel.cMouseWheel
    Set SubCLS.Form = Me
    SubCLS.CancelClose True 'Schließen nicht erlauben
    SubCLS.SubClassHookForm
End Sub
 
Private Sub SubCLS_CloseRequest(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
    If MsgBox("Darf der Bericht jetzt geschlossen werden?", vbYesNo) = vbYes Then
        'Hier nach Belieben weiteren Code ausführen
        '...
        SubCLS.CancelClose (False)  'Schließen wieder erlauben
    End If
End Sub
Das Schließen des Berichts wird abgefangen und in das Event CloseRequest ungesetzt, wenn CancelClose auf True gesetzt wird. In dieser Prozedur kann dann diverser Code abgearbeitet werden. Anschließend wird CancelClose auf False gesetzt und der Bericht kann normal geschlossen werden.

Ciao, Sascha
Sascha Trowitzsch ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten