Module aanroepen om knop sluiten (X) te disablen

Status
Niet open voor verdere reacties.

JeroenMioch

Gebruiker
Lid geworden
1 dec 2007
Berichten
215
Beste mensen,

Ik heb een module die er voor zorgt dat de gebruikers van mijn database een door mij gemaakte knop "sluiten" moeten gebruiken om het formulier af te sluiten, in plaats van het kruisje helemaal rechtboven in je scherm. Op zich werkt dit goed maar er komt een bug om de hoek kijken;

Zodra ik een rapport print verschijnt het kruisje en kunnen de gebruikers hier toch weer op klicken. Nou sluit de database dan niet helemaal (grijs scherm) en moet men afsluiten met ALT-F4, maargoed. Waar het om gaat is dat men mijn knop gebruikt zodat er controle op de ingevulde velden kan plaatsvinden.

Dit staat in de module :

Code:
Private Const GWL_EXSTYLE = (-20)
Private Const GWL_STYLE = (-16)

Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000

Private Const HWND_TOP = 0
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED

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 GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Private 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

Sub HideAccessCloseButton()

    Dim lngStyle As Long

    lngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
    lngStyle = lngStyle And Not WS_SYSMENU
    Call SetWindowLong(hWndAccessApp, GWL_STYLE, lngStyle)
    Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)

End Sub

En dit moest gebruikt worden om het te executen :

Code:
Private Sub Command0_Click()

    HideAccessCloseButton

End Sub

Nou heb ik uiteraard geprobeerd om via de gebeurtenisprocedure van de knop om mijn rapport te printen de module aan te roepen in de hoop dat ie het weer uitvoerd, maar dit gebeurd niet.

Waar ik HideAccessCloseButton of Call HideAccessCloseButton ook gebruik, het resultaat blijft onverminderd teleurstellend ;)

Iemand enig idee hoe dit probleem op te lossen, of betrouwbaardere methodes om te zorgen dat mijn gebruikers de database niet kunnen afsluiten zonder bepaalde verplichte velden in te vullen ?
 
Laatst bewerkt:
Bij het gebruiken van een rapport zijn er toch geen velden die nog open staan? Maar goed, nog even afgezien daarvan: ik gebruik de functie soms ook in een db, maar dan als functie. En ik voer hem uit in een AutoExec macro. Dan zie ik de sluitknop toch eigenlijk nooit meer terug...
 
Nee inderdaad als het rapport word afgedrukt dan zijn er geen velden die leeg zijn, daar zit ook een controle op. Je kan niet printen met lege velden. Maar mijn gemaakte knop sluiten heb ik er op gezet om te voorkomen dat mensen gegevens invoeren in de database, en vervolgens afsluiten met (X) waardoor de gegevens wel onthouden worden door de db.
Hoewel ik het mijn gebruikers wel 100X heb uitgelegd, toch is er altijd wel weer iemand die het voor elkaar kreeg om gegevens in te voeren en vervolgens af te sluiten.
De volgende versie van mijn database gaat heel anders opgezet worden, dat weet ik wel hahaha

Beiden bedankt, ik ga er Vrijdag mee aan de slag.
 
Het verbergen van het "afsluitkruisje" zorgt er niet voor dat Access niet alleen via een opdrachtknop kan worden afgesloten. Alt-F4 of de computer op normale wijze afsluiten zorgt er ook voor dat een Access applicatie "ongecontroleerd" wordt afgesloten.
Beter is het om gebruik te maken van de min of meer standaard methode, met een globale variabele en een niet zichtbaar formulier.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan