Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Come si fa (tramite vba) ad impedire all' utente di chiudere una maschera ?

1,081 views
Skip to first unread message

radicale.002

unread,
Jun 5, 2010, 3:50:31 AM6/5/10
to
Non riesco ad individuare la proprieta' da impostare
tramite vba, perche' i nomi delle proprieta' sono in
inglese e quelli che vado a modificare a mano sono
in italiano, quindi non riesco a metterli in relazione tra
loro !

Cmq, ho letto sulle istruzioni che una maschera si
puo' chiudere anche tramite ALT + F4 , ma vorrei
impedirlo (con gli utenti non si sa mai ...).

Spero in un vostro aiuto.

Geppo

unread,
Jun 4, 2010, 8:03:55 AM6/4/10
to

puoi dare un occhiata a questo molto più gestibile:

www.donkarl.com/it?FAQ1.12

oppure, meno gestibile, solo per alt+F4 e da inserire in ogni form, puoi
sfruttare l'evento KeyDown della form dopo aver impostato la proprieta'
"Anteprima Tasti" a SI:


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If (Shift And acAltMask) > 0 And (KeyCode = vbKeyF4) Then
MsgBox "IMPOSSIBILE USARE [ALT+F4] !"
KeyCode = 0
End If
End Sub


> Spero in un vostro aiuto.


--
Ciao
Geppo


radicale.002

unread,
Jun 5, 2010, 12:28:11 PM6/5/10
to

Si, grazie, ma io volevo togliere all' utente la possibilita' di
chiudere
la maschera anche cliccando col mouse sulla crocetta in alto a destra
(hai presente, sta in ogni maschera)

Carlo Costarella

unread,
Jun 5, 2010, 12:32:49 PM6/5/10
to

"radicale.002" <radica...@gmail.com> ha scritto nel messaggio
news:eaa8652a-0c38-4c41...@y4g2000yqy.googlegroups.com...

cut

Si, grazie, ma io volevo togliere all' utente la possibilita' di
chiudere
la maschera anche cliccando col mouse sulla crocetta in alto a destra
(hai presente, sta in ogni maschera)

Dalle proprietą della maschera:
Pulsante chiusura = NO

Ciao, Carlo


radicale.002

unread,
Jun 5, 2010, 1:35:11 PM6/5/10
to
On 5 Giu, 18:32, "Carlo Costarella" <carlocoslib...@libero.it> wrote:

> Dalle proprietà della maschera:
> Pulsante chiusura = NO

Ehm ... Si ... :D

Intendevo : usando VBA.

Geppo

unread,
Jun 5, 2010, 1:29:53 PM6/5/10
to
Ciao radicale.002 wrote:
> On 4 Giu, 14:03, "Geppo" <c...@tin.it.invalid> wrote:
---cut---

> Si, grazie, ma io volevo togliere all' utente la possibilita' di
> chiudere
> la maschera anche cliccando col mouse sulla crocetta in alto a destra
> (hai presente, sta in ogni maschera)

ti ho suggerito questa faq l'hai letta?

www.donkarl.com/it?FAQ1.12

--
Ciao
Geppo


sv

unread,
Jun 6, 2010, 3:08:56 AM6/6/10
to
radicale.002 ha scritto:

> On 5 Giu, 18:32, "Carlo Costarella" <carlocoslib...@libero.it> wrote:

> > Dalle propriet� della maschera:
> > Pulsante chiusura = NO

> Ehm ... Si ... :D

> Intendevo : usando VBA.

Propriet� CloseButton...

--
sv

--

questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ab...@newsland.it


radicale.002

unread,
Jun 6, 2010, 8:35:58 AM6/6/10
to
On 6 Giu, 09:08, salv...@accessgroup.it (sv) wrote:
> radicale.002 ha scritto:
>
> > On 5 Giu, 18:32, "Carlo Costarella" <carlocoslib...@libero.it> wrote:
> > > Dalle propriet della maschera:
> > > Pulsante chiusura = NO
> > Ehm ... Si ...  :D
> > Intendevo : usando VBA.
>
> Propriet CloseButton...

Macche' ...

ne questa :
Set frm1.CloseButton = False
ne quest' altra :
frm1.CloseButton = False

Danno errore ... BOH.
Tu come hai fatto ????

radicale.002

unread,
Jun 6, 2010, 8:37:32 AM6/6/10
to
On 5 Giu, 19:29, "Geppo" <c...@tin.it.invalid> wrote:
>
> ti ho suggerito questa faq l'hai letta?

Certo !
Ma non e' quello che serve a me.
Almeno, cosi' mi pare.

Cmq grazie !

Geppo

unread,
Jun 6, 2010, 4:46:43 PM6/6/10
to

ti pare male......

> Cmq grazie !


prego

--
Ciao
Geppo


sv

unread,
Jun 7, 2010, 3:41:57 AM6/7/10
to
radicale.002 ha scritto:

> Macche' ...

Mai utilizzata questa propriet�. Del resto la puoi solo impostare in
visualizzazione struttura.
Devi per forza di cose utilizzare le API.
Vedi:
http://vbnet.mvps.org/index.html?code/forms/killclose.htm

Le dichiarazioni le metti in un modulo, poi sull'evento "LOAD" della
maschera inserisci:

Call MenuRemoveClose(Me)

radicale.002

unread,
Jun 7, 2010, 9:00:30 AM6/7/10
to
On 7 Giu, 09:41, salv...@accessgroup.it (sv) wrote:

> Mai utilizzata questa propriet . Del resto la puoi solo impostare in
> visualizzazione struttura.
> Devi per forza di cose utilizzare le API.
> Vedi:http://vbnet.mvps.org/index.html?code/forms/killclose.htm
>
> Le dichiarazioni le metti in un modulo, poi sull'evento "LOAD" della
> maschera inserisci:
>
> Call MenuRemoveClose(Me)

Diavolo, non ci sarei mai arrivato da solo.
Grazie mille !

radicale.002

unread,
Jun 7, 2010, 5:19:06 PM6/7/10
to
On 6 Giu, 22:46, "Geppo" <c...@tin.it.invalid> wrote:

> ti pare male......

Ehm ... E' probabile, umilmente parlando.

Il fatto e' che devo impedire all' utente non di chiudere
una maschera qualsiasi, ma il suo clone.

Quindi se metto cancel = true dentro l' evento chiusura,
poi l' utente non puo' chiudere nemmeno la maschera
originale. Invece quello deve poterlo fare.

Dico bene ?


Geppo

unread,
Jun 8, 2010, 5:37:50 AM6/8/10
to

ma questa � un'altra cosa, non � quello che hai chiesto inizialmente.


--
Ciao
Geppo


radicale 004

unread,
Jun 8, 2010, 5:41:43 PM6/8/10
to
On 8 Giu, 11:37, "Geppo" <c...@tin.it.invalid> wrote:

> ma questa un'altra cosa, non quello che hai chiesto inizialmente.

Si, e' vero. Dovevo essere piu' preciso.
Scusami.

Geppo

unread,
Jun 8, 2010, 5:58:37 PM6/8/10
to

Vabbe' per questa volta ti lascio vivere. :-D


--
Ciao
Geppo


Giuseppe

unread,
Jun 9, 2010, 10:13:09 AM6/9/10
to
Scusate l'intromissione, ho cercato di utilizzare anch'io questa
soluzione.
Ho messo in un modulo tutto il codice preso dal link.
Nella mia maschera su evento caricamento oltre a
BildArray
DoCmd.Movesize 0,0,10000,8000
docmd.gotocontrol "IdTipoDocumento"
ho messo
Call MenuRemoveClose(Me)
ma quando chiudo la maschera dalla X, mi esce il seguente messaggio:
errore di compilazione: sub o function non definita
e mi evidenzia
Call MenuRemoveClose
Cosa ho sbagliato?
Grazie.
Giuseppe.

Alessandro Cara

unread,
Jun 9, 2010, 10:45:20 AM6/9/10
to
Giuseppe ha scritto:
Una funzione per poterla chiamare deve essere definita o nel codice o
nelle librerie collegate. MenuRemoveClose e' evidentemente una "user
function" e non ti e' stato fornito il codice relativo e/o non c'e'
accenno a cosa debba fare.
--
ac

Giuseppe

unread,
Jun 9, 2010, 11:55:11 AM6/9/10
to
> Una funzione per poterla chiamare deve essere definita o nel codice o
> nelle librerie collegate. MenuRemoveClose e' evidentemente una "user
> function" e non ti e' stato fornito il codice relativo e/o non c'e'
> accenno a cosa debba fare.
> --
> ac

Io ho seguito il post di sv

> Vedi:
> http://vbnet.mvps.org/index.html?code/forms/killclose.htm

> Le dichiarazioni le metti in un modulo, poi sull'evento "LOAD" della
> maschera inserisci:

> Call MenuRemoveClose(Me)

e ho visto che radicale.002 o radicale 004 ha risposto che funziona.
Scusami Alessandro, ma da solo non saprei cosa modificare. Potresti
darmi una mano.
Grazie.
Giuseppe.

Alessandro Cara

unread,
Jun 9, 2010, 1:11:49 PM6/9/10
to
Giuseppe ha scritto:

Ho guardato il link.
Ho l'impressione che sia stata rinominata la sub "Private Sub Form_Load()"
in "Public Function MenuRemoveClose(f as frm)"

e quindi a quel punto puo' essere chiamata dall open del tuo form ("Call
MenuRemoveClose(Me)").
Questo per poter generalizzare la chiamata.
Non capisco per quale motivo debba essere passata la form attuale (me)
poiche' non mi sembra sia necessaria ai fini della esecuzione.
--
ac

Geppo

unread,
Jun 10, 2010, 3:25:43 AM6/10/10
to

prova in questo modo copiando il listato sottostante in un modulo standard:

Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2009 VBnet, Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
' applications, but you may not reproduce
' or publish this code on any web site,
' online service, or distribute as source
' on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Const MF_BYPOSITION = &H400
Private Const MF_REMOVE = &H1000

Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hwnd As Long) As Long

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

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

Function MenuRemoveClose(f As Form)

Dim hMenu As Long
Dim menuItemCount As Long

'Obtain the handle to the form's system menu
hMenu = GetSystemMenu(f.hwnd, 0)

If hMenu Then

'Obtain the number of items in the menu
menuItemCount = GetMenuItemCount(hMenu)

'Remove the system menu Close menu item.
'The menu item is 0-based, so the last
'item on the menu is menuItemCount - 1
Call RemoveMenu(hMenu, menuItemCount - 1, _
MF_REMOVE Or MF_BYPOSITION)

'Remove the system menu separator line
Call RemoveMenu(hMenu, menuItemCount - 3, _
MF_REMOVE Or MF_BYPOSITION)

'Force a redraw of the menu. This
'refreshes the titlebar, dimming the X
Call DrawMenuBar(f.hwnd)

End If

End Function


adesso riprova.

--
Ciao
Geppo


Giuseppe

unread,
Jun 10, 2010, 6:19:02 AM6/10/10
to

Ciao Geppo, grazie.
Ho sostituito il codice presente nel mio "Modulo 1" con quello da te
postato.
Nella mia form su evento "su caricamento" ho:
BildArray
DoCmd.MoveSize 0, 500, 10000, 8000
Me.IdTipoDocumento.BackColor = 65535
Call MenuRemoveClose(Me)

Apro la maschera e quando tento di chiudere la form cliccando sulla X
me la chiude tranquillamente.
Ciao.

Geppo

unread,
Jun 10, 2010, 6:43:21 AM6/10/10
to
Ciao Giuseppe wrote:
---cut---

> Ciao Geppo, grazie.
> Ho sostituito il codice presente nel mio "Modulo 1" con quello da te
> postato.
> Nella mia form su evento "su caricamento" ho:
> BildArray
> DoCmd.MoveSize 0, 500, 10000, 8000
> Me.IdTipoDocumento.BackColor = 65535
> Call MenuRemoveClose(Me)
>
> Apro la maschera e quando tento di chiudere la form cliccando sulla X
> me la chiude tranquillamente.

Non so per quale motivo devi disabilitare la X di chiusura, allora mi chiedo
perch� non la disabiliti dalle proprieta' della form? Cosi � decisamente
meglio, questo anche perch� il sistema delle API non disabilita del tutto la
X, infatti qualora si massimizzasse la Form tornerebbe nuovamente
cliccabile.

proprieta' form>scheda Formato>Pulsante chiusura = NO

> Ciao

--
Ciao
Geppo


Giuseppe

unread,
Jun 10, 2010, 10:15:36 AM6/10/10
to

Si Geppo so che dalle proprietà posso decidere se visualizzare o meno
il pulsante di chiusura.
Vorrei utilizzare per tutte le form del mio db un'impostazione unica.
Il discorso è che in alcune maschere ci sono dei controlli associati
che assumono dei valori automatici.
Se l'utente non riempe tutti i controlli obbligatori (che non ho
definito) ed esce tramite il click sulla X il record viene cmq
salvato.
Sul pulsante "uscita" invece ho impostato la richiesta se, prima di
uscire, salvare o eliminare il record, e la chiusura della form
mediante Alt+F4 l'ho disabilitata.
Ciao.
Giuseppe.

Geppo

unread,
Jun 10, 2010, 12:49:04 PM6/10/10
to

Allora il codice che ti ho postato a me disabilita la X, però tieni presente
che qualora la form viene massimizzata il pulsante torna abilitato, pertanto
non credo sia una cosa positiva nel tuo caso e poi rimane abilitato anche il
menu a tendina della form dove si puo cliccare "chiudi":
vedi qui:
http://www.divshare.com/download/11665234-8bf


Secondo me, visto che vuoi riflettere le modifiche su tutte le form, ti
conviene disabilitare il "Pulsante Chiusura" con una funzione che lo fa su
tutte le form in un colpo solo.


Comunque su internet ci sono altri modi per disabilitare la X come ad
esempio questo:

http://www.accessmvp.com/JConrad/accessjunkie/closebutton.html


che praticamente ti toglie la X e i pulsanti minimizza/massimizza nonchè il
menu a tendina della form accessibile dall'icona sull'angolo superiore
sinistro.

> Ciao.
> Giuseppe.

--
Ciao
Geppo


Giuseppe

unread,
Jun 11, 2010, 3:42:59 AM6/11/10
to
Risolto Geppo.
Ho scaricato un esempio da http://www.access-programmers.co.uk/forums/showthread.php?t=98554
La X resta ma non chiude la form, per chiuderla con il mio pulsante
cambio il valore della casella di controllo cbTest da 0 a -1.
Ovviamente su apertura riporto il valore a 0.
Ancora grazie.
Giuseppe.

Geppo

unread,
Jun 11, 2010, 12:29:47 PM6/11/10
to

Ottimo.

> Giuseppe.

--
Ciao
Geppo


0 new messages