Toon posts:

[Access] Closebuttom van Access uitzetten

Pagina: 1
Acties:
  • 457 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een applicatie in Access, bij het afsluiten ervan moeten er een aantal acties uitgevoerd worden. Dit werkt allemaal prima, maar in het kader "gemak dient de mens" sluiten veel gebruikers het programma af dmv de Close button :(

Er is een manier om deze close button uit te zetten, maar hoe?

ik heb de search gebruikt, en access help, maar er staat niks over in.

De rest van de instellingen onder Tools | Startup heb ik al wel goed staan, maar deze optie is niet aanwezig :|

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Wat bedoel je met de close-button?

https://fgheysels.github.io/


  • Toink
  • Registratie: Januari 2000
  • Niet online
Zal lastig worden denk ik. Daar heb ik ook een keer naar gezocht en dat is volgens mij niet mogelijk. (Close-button van Access komt uit windows, niet uit access) Via de taskmanager kun je een app ook killen zonder deze handelingen. Wat je wel kan doen is je hoofdformulier een onClose-event meegeven en daaraan je code hangen. Succes!

Verwijderd

Elk formulier heeft een close button property, daarmee kan je die uitzetten.
Maar zoals Toink al zegt zijn er nog andere dingen waar je rekening mee moet houden.
OnClose is zeer zeker een aanrader.

Verwijderd

Topicstarter
whoami schreef op 19 augustus 2002 @ 15:39:
Wat bedoel je met de close-button?
met de closebuttom bedoel ik het kruisje rechtsboven in beeld.

Het gaat niet alleen om de event, anders had ik er wel een on close aan kunnen hangen :)

We hebben hier een Access db die het heeft, alleen die kan ik niet rippen, maar het betekend wel dat het naar mijn idee mogelijk is.

Wat ik ook al heb geprobeert is alle forms Pop-up maken, en dan access geminimaliseerd laten starten, werkt wel, maar brengt nog veel meer andere problemen met zich mee. :Z

PS nog iets, het opstarten met shift, weten jullie "de truc" om die te omzeilen zonder al te veel moeite???

Verwijderd

Topicstarter
Verwijderd schreef op 19 augustus 2002 @ 15:59:
Elk formulier heeft een close button property, daarmee kan je die uitzetten.
Maar zoals Toink al zegt zijn er nog andere dingen waar je rekening mee moet houden.
OnClose is zeer zeker een aanrader.
alle formulieren zijn al zonder closebutton, om zo een menusturing te verkrijgen.

de event werkt echt niet, de db sluit slordig af, en 9 vd 10 keer krijg je een "vullige" melding 8)7

Verwijderd

Je bedoelt dus de close button van Access zelf ??

  • Toink
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 19 augustus 2002 @ 16:02:
[...]


PS nog iets, het opstarten met shift, weten jullie "de truc" om die te omzeilen zonder al te veel moeite???
Voor de shift is een gare control op internet te vinden. Let wel op: Als je die gebruikt dan kun je niet in designtime draaien!! Ik heb 'm geprobeerd, het werkt, maar hij is K*T.

Wat je wel kan doen is een medewerkersbestand meeleveren via command-line parameters en zelf gebruikers definieren. Als iemand met zijn eigen .mdw-bestand jouw db wil openen dat heeft deze totaal geen rechten als je alles goed definieert en kan deze dus niets. (dan heb je ook wat je wil, niet?)

LET OP: Rechten in Acces goed instellen kost tijd en dat moet je niet onderschatten.

  • Boss
  • Registratie: September 1999
  • Laatst online: 09-05 22:57

Boss

+1 Overgewaardeerd

Als je de applicatie afsluit (Access) worden alle Forms afzonderlijk afgesloten. Je kan dan toch de code laten uitvoeren bij het afsluiten van een Form? Komt op het zelfde neer. Eventueel met een mooi stukje code zodat de code maar 1x wordt uitgevoerd en niet bij ieder form dat wordt afgesloten.

En voor die shift-knop: daar heb je echt geen gare control voor nodig hoor. Je moet zelf een eigenschap (property) aan je database toevoegen. Die heet AllowBypasKey, type boolean. Zet hem op True en niemand komt je database meer in.
Ik gebruik hem zelf altijd in combinatie met een verborgen knopje ergens waar je op moet dubbelklikken om het weer ongedaan te maken. Anders kan je jezelf nog wel eens buitensluiten :)

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Je kunt het kruisje disabelen op de volgende manier:

Voeg volgende code in in een module
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Private Declare Function GetSystemMenu Lib "user32" ( _
    ByVal hwnd As Long, _
    ByVal bRevert As Long _
    ) As Long

Private Declare Function GetMenuItemCount Lib "user32" ( _
    ByVal hMenu As Long _
    ) As Long

Public Function dhDisableClose(lnghWnd As Long) 'Verwijder 'x' uit titlebar
    Dim hSysMenu As Long
    Dim nCnt 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

    
Public Function DisableClose(lnghWnd As Long) 'Verwijder 'x' uit titlebar
    'Get handle to our form's system menu
    '(Restore, Maximize, Move, close etc.)
    hSysMenu = GetSystemMenu(lnghWnd, False)
    
    If hSysMenu Then
        'Get System menu's menu count
        nCnt = GetMenuItemCount(hSysMenu)
        If nCnt Then
    
            'Menu count is based on 0 (0, 1, 2, 3...)
            RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE
            'Remove the seperator
            RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE
            
            DrawMenuBar lnghWnd
            'Force caption bar's refresh. Disabling X button
            
            'Me.Caption = "Try to close me!"
        End If
    End If
End Function


En roep vervolgens aan bij het opstarten van je hoofdformulier:
DisableClose(me.hwnd)

Maar.... een goede afhandeling in het On_Close events is natuurlijk te prevereren. En een goede rechtenafhandeling maakt het overbodig om shoft te disabelen. Het is inderdaad ingewikkeld, maar als je het eenmaal door hebt, komt niemand meer aan je code...

Verwijderd

Topicstarter
Boss schreef op 19 augustus 2002 @ 16:30:
Als je de applicatie afsluit (Access) worden alle Forms afzonderlijk afgesloten. Je kan dan toch de code laten uitvoeren bij het afsluiten van een Form? Komt op het zelfde neer. Eventueel met een mooi stukje code zodat de code maar 1x wordt uitgevoerd en niet bij ieder form dat wordt afgesloten.

En voor die shift-knop: daar heb je echt geen gare control voor nodig hoor. Je moet zelf een eigenschap (property) aan je database toevoegen. Die heet AllowBypasKey, type boolean. Zet hem op True en niemand komt je database meer in.
Ik gebruik hem zelf altijd in combinatie met een verborgen knopje ergens waar je op moet dubbelklikken om het weer ongedaan te maken. Anders kan je jezelf nog wel eens buitensluiten :)
Als dit werkt is het wel een zeer snelle manier!

En voor het oorspronkelijke probleem, ik heb iedereen verschillende toegangsniveau's gegeven via een zelf geknutseld stukje code, dus in hun Frondend hebben ze een eigen instellingenmenu die ze niet kunnen wijzigen zonder designview (shift disabled)

Twee vliegen in een klap dus! :+ bedankt voor alle reacties! :)

Verwijderd

Topicstarter
n.a.v. de info van Boss:

in de help stond dat je deze control aan moet maken, en dat hij dan pas beschikbaar is. Dit heb ik gedaan in een Module

[code]

Sub SetBypassProperty()
Const DB_Boolean As Long = 1
ChangeProperty "AllowBypassKey", DB_Boolean, False
End Sub

Function ChangeProperty(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer
Dim dbs As Object, prp As Variant
Const conPropNotFoundError = 3270

Set dbs = CurrentDb
On Error GoTo Change_Err
dbs.Properties(strPropName) = varPropValue
ChangeProperty = True

Change_Bye:
Exit Function

Change_Err:
If Err = conPropNotFoundError Then ' Property not found.
Set prp = dbs.CreateProperty(strPropName, _
varPropType, varPropValue)
dbs.Properties.Append prp
Resume Next
Else
' Unknown error.
ChangeProperty = False
Resume Change_Bye
End If
End Function

[code\]

Daarna heb ik deze gestart, verder geen msg. Als ik de code bekijk ga ik ervan uit dat ik nu de propertysetting beschikbaar heb, alleen kan ik hem nog niet gebruiken???

ik heb verschillende mogelijkheden gebruikt, maar volgens mij moet
"Set AllowBypassKey = False" toch werken???
Pagina: 1