Newsgroup: it.comp.appl.access
Titolo: Emulazione tasto ESC

Ciao a tutti.Per emulare il tasto ESC ho creato un pulsante di comando
dove sull'evento Click ho inserito
SendKeys "{esc}"
Se nell'evento non inserisco altro codice va tutto bene.Se al
contrario ad esempio inserisco la chiusura della form
con Docmd.close a volte mi chiude la form salvando il
record.Praticamente e' come se saltasse il SendKeys.
Questo mi succede anche se in una Form ho inserito praticamente tutti
i record e voglio annullare l'inserimento.
Da cosa puo' dipendere.
Ho esigenza di crare questo controllo perche' disabilitando "ESC"
voglio dare lo stesso la possibilita' di annullare l'inserimento.
Grazie in anticipo
Dino

 Dino
-- 
Ciao
Geppo 

 ha scritto nel messaggionews:76a95f2d-150f-4939...@c3g2000yqd.googlegroups.com...

Ciao Geppo e grazie per la risposta.Ho trovato dove nasce il
problema.Se io inserisco praticamente tutti i dati nei vari records
tranne l'importo finale cliccando sul pulsante dove ho impostato
l'emulazione "ESC" si annulla lìinserimento.Se invece aggiorno
l'importo noto (La famosa matita in alto alla sinistra del Form)che
per un istante sisalva il record e poi mi ritorna il simbolo del
record da salvare.Cliccando su lpulsante emulazione non fa altro che
confermare il salvataggio piuttosto che annullarlo.
L'aggiornamento di quell'importo avviene inserendo in alcuni campi dei
valori prelevati in automatico da una sottomaschera.Evento Dblclick
della sottoform ed vengono inseriti i valori.Vacendo così si aggiorna
l'importo famoso.E' prorpio nel momento del Dblclick che noto la
problematica che ti dicevo prima.
Di seguito se ti puo' servire ti riporto il codice dell'evento
Dblclick della sottoform:
If IsNull([Nome_listino]) Then
MsgBox "ATTENZIONE!!!!LISTINO MANCANTE"
      ElseIf IsNull(Forms!Ins_articoli![Data listino]) Then
        MsgBox "ATTENZIONE!!!!DATA LISTINO MANCANTE"
        Forms!Ins_articoli![Data listino].SetFocus
        Forms!Ins_articoli![Comando67].Visible = False
              ElseIf IsNull(Forms!Ins_articoli![Prezzo listino]) Then
              MsgBox "ATTENZIONE!!!!PREZZO LISTINO MANCANTE"
              Forms!Ins_articoli![Prezzo listino].SetFocus
              Forms!Ins_articoli![Comando67].Visible = False
Else
Forms!Ins_articoli!Sconto1 = Me.Sconto1
Forms!Ins_articoli!Sconto2 = Me.Sconto2
Forms!Ins_articoli!Sconto3 = Me.Sconto3
Forms!Ins_articoli![Incremento in %] = Me.Incremento_listino_in__
Forms!Ins_articoli![Decremento in %] = Me.Decremento_listino_in__
Forms!Ins_articoli![Comando67].Visible = False
End If
Grazie in anticipo Dino

Grazie in anticipo Dino
Sendkey � pericoloso.....nn lo puoi controllare.....
Se proprio ti serve disabilitare ESC x l'eventuale cancellazione
dell'inserimento (immagino su form associate a questo punto), io mi farei una
funzione globale, una cosa del tipo
Public Function TastoESC(NomeForm, Azione) as integer
if Azione = Edit (guardi la sintassi....) then
TastoESC = 0
else
TastoESC = 69
end if
end function
se chiaramente si trova il modo di sapere se una Form � in edit o no.....
in ogni form sull'evento KeyDown (o KeyPress) metti KeyCode = TrovaESC cos�
diventa = 0 (nessuna azione) oppure il valore di esc. Cos� dove ti serve ce
l'hai (tipo il pulsante chiudi predefinito) e dove no lo blocchi con una riga
di codice
Non garantisco la funzionalit� xch� non uso mai form associate per inserire
nuovi record......
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

 - Mostra testo citato -
Ciao e grazie per la risp.due domande
nella funzione Ok nome form ma per Azione cosa intendi (o per lo meno
quale azione)
Il significato di Tasto ESC=69
Grazie
Dino

Dino
Questo l'ho provato
Public Function TastoESC(NomeForm As Form) As Integer
 
     If NomeForm.NewRecord Then
        TastoESC = 0
     Else
        TastoESC = 118
    End If
End Function
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
 
    Dim I As Integer
 
    Select Case KeyCode
        Case vbKeyEscape
            I = TastoESC(Me.Form)
            KeyCode = I
            If KeyCode = 118 Then
                MsgBox "!"
            End If
        Case Else
    End Select
 
End Sub
Vedi se pu� esserti utile


 - Mostra testo citato -
Gentilissimo.Provo e ti faccio sapere.
Ancora super grazie
Dino

 ha scritto nel messaggio 
news:77718713-9f2d-4bc0...@d21g2000yqn.googlegroups.com...


l'emulazione "ESC" si annulla l�inserimento.Se invece aggiorno
l'importo noto (La famosa matita in alto alla sinistra del Form)che
per un istante sisalva il record e poi mi ritorna il simbolo del
record da salvare.Cliccando su lpulsante emulazione non fa altro che
confermare il salvataggio piuttosto che annullarlo.
L'aggiornamento di quell'importo avviene inserendo in alcuni campi dei
valori prelevati in automatico da una sottomaschera.Evento Dblclick
della sottoform ed vengono inseriti i valori.Vacendo cos� si aggiorna
l'importo famoso.E' prorpio nel momento del Dblclick che noto la
problematica che ti dicevo prima.
Di seguito se ti puo' servire ti riporto il codice dell'evento
Dblclick della sottoform:
If IsNull([Nome_listino]) Then
MsgBox "ATTENZIONE!!!!LISTINO MANCANTE"
      ElseIf IsNull(Forms!Ins_articoli![Data listino]) Then
        MsgBox "ATTENZIONE!!!!DATA LISTINO MANCANTE"
        Forms!Ins_articoli![Data listino].SetFocus
        Forms!Ins_articoli![Comando67].Visible = False
              ElseIf IsNull(Forms!Ins_articoli![Prezzo listino]) Then
              MsgBox "ATTENZIONE!!!!PREZZO LISTINO MANCANTE"
              Forms!Ins_articoli![Prezzo listino].SetFocus
              Forms!Ins_articoli![Comando67].Visible = False
Else
Forms!Ins_articoli!Sconto1 = Me.Sconto1
Forms!Ins_articoli!Sconto2 = Me.Sconto2
Forms!Ins_articoli!Sconto3 = Me.Sconto3
Forms!Ins_articoli![Incremento in %] = Me.Incremento_listino_in__
Forms!Ins_articoli![Decremento in %] = Me.Decremento_listino_in__
Forms!Ins_articoli![Comando67].Visible = False
End If
Grazie in anticipo Dino
Ma per caso l'emulazione del tasto ESC la vuoi fare per effettuare una 
specie di annullamento dei dati inseriti nella maschera ed in attesa di 
essere scritti nella tabella ? Se � cos�, guarda che puoi ottenere quello 
che desideri semplicemente gestendo l'evento form_beforeupdate.
Ciao
Antonio

 - Mostra testo citato -
Ciao Antonio e grazie per la risposta.Sì e' proprio così.intendi
utilizzare il   sendkeys "{esc}" l'evento form_beforeupdate.
Grazie Dino

 - Mostra testo citato -
Ciao Antonio e grazie per la risposta.S� e' proprio cos�.intendi
utilizzare il   sendkeys "{esc}" l'evento form_beforeupdate.
Grazie Dino
Appunto... evita di impelagarti nel lanciare un esc col sendkeys, quando 
puoi ottenere lo stesso effetto impostando cancel = true nel beforeupdate.

 - Mostra testo citato -
Come sempre preciso e sintetico
Grazie mille.
NB:Mi permetto di approfittarne della tua pazienza.Volevo che mi dessi
un consiglio sul post appena sopra a questo a riguardo "la
segnalazione di campo gia' esistente" con campo a valore predefinito
"AB"
Grazie ancora e scusa se ne approfitto della tua disponibilita'
Dino

 - Mostra testo citato -
Eccomi qua' ancora .Ho provato ad impostare  cancel = true nel
beforeupdate del form in esame ma non funziona.Prob. non ti ho capito.
Io ho disabilitato ESC da tastiera e vorrei creare un pulsante di
comando dove l'utente sia consapevole dell'annullamento
dell'inserimento.
Con il Sendkeys l'ho trovato,pero' non sempre funziona.Ma il Cancel =
True non posso inserirlo nel pulsante di controllo.Vero?
Grazie
Dino

[CUT]
Eccomi qua' ancora .Ho provato ad impostare  cancel = true nel
beforeupdate del form in esame ma non funziona.Prob. non ti ho capito.
Io ho disabilitato ESC da tastiera e vorrei creare un pulsante di
comando dove l'utente sia consapevole dell'annullamento
dell'inserimento.
Con il Sendkeys l'ho trovato,pero' non sempre funziona.Ma il Cancel =
True non posso inserirlo nel pulsante di controllo.Vero?
Grazie
Dino
----------  RISPOSTA  -------------
Non so bene cosa vorresti fare e mi sono limitato ad immaginare che tu 
voglia simulare l'uso del tasto ESC, visto che battendo il tasto ESC si 
riesce ad annullare il valore immesso in un controllo e, pigiandolo una 
seconda volta, ad annullare anche lo stato della maschera, ovvero la 
condizione di "aggiornamento in corso" che assume la maschera non appena 
inizi a scrivere qualcosa in un qualsiasi controllo associato ad un campo di 
tabella. Questa particolare condizione la si pu� capire quando sulla parte 
sinistra della maschera vedi apparire una matita al posto del solito 
triangolino nero. La matita sta ad indicare che � stato modificato qualcosa 
e che quindi i dati valorizzati nei controlli della maschera sono in attesa 
di essere scaricati sulla tabella (o query) associata.
Bene. A questo punto ci si pu� chiedere: ma se � presente o meno quella 
specie di matitina lo posso sapere nel corso di una routine evento ? La 
risposta � s�: la propriet� della maschera dirty ti indica proprio questa 
cosa. Allora nel programma tu puoi inserire una routine di controllo di ogni 
valore immesso nella maschera in un unico punto, all'evento beforeupdate 
della maschera, e cos� scatenare l'aggiornamento oppure rifiutarlo se i dati 
non sono coerenti.
Un banalissimo esempio:
sub form_beforeupdate (cancel as integer)
if not me.dirty then
   msgbox "come sei arrivato qui se non c'� niente da aggiornare ?"
   exit sub
end if
if trim (me.cognome) = "" then
   msgbox "aggiornamento non permesso senza l'inserimento del cognome"
   goto fattoerrore
end if
if non isdate (datanascita) then
   msgbox "data di nascita non corretta"
   goto fattoerrore
end if
... altre verifiche di contenuti...
' se non hai intercettato nessun errore l'exit sub successivo far� 
aggiornare il record
exit sub
fattoerrore:
me.cognome.undo
me.datanascita.undo
me.undo
' ne puoi mettere anche degli altri
cancel = true
end sub
il cancel=true inserito qui sopra fa in modo che l'aggiornamento non venga 
effettuato. Uno o due (a anche di pi�) me.undo servono a cancellare il 
contenuto del controllo o dell'intera maschera. Giocando opportunamente con 
queste propriet� tu puoi scatenare qualsiasi cosa, anche meglio che 
simulando il tasto ESC.
Ciao
Antonio

 Antonio
"Alla faccia della sintesi"Complimenti per la spiegazione.Scherzi a
parte grazie per la risposta.Adesso non posso provare
Doamni provo e poi ti lascio il post di conferma  omeno.
Grazie ancora Dino

 - Mostra testo citato -
Ciao Antonio.Ho provato ad impostare il tutto ma mi da una
problematica.Nel beforeupdate de form sono andato ad inserire per
prova alcuni campi con Undo.Il problema e' che non  mi permette di
inserire il record.
Nell'eliminare tale impostazione funziona tutto.Sara' la neve che ho
spalato ma non mi funziona.
Grazie ancora Dino