Newsgroup: it.comp.appl.access
Titolo: funzione 'su tasto giù' in modulo standard

Saluti a tutti.
Solo recentemente ho imparato ad apprezzare i vantaggi derivanti dalla
creazione di funzioni dirette inserite nella casella genera evento dei
controlli. Facendo delle funzioni abbastanza generali riesco a passare
parametri alla funzione, con il vantaggio che per eventuali modifiche
non devo tornare indietro per il codice a modificare le procedure
interessate >> meno bugs! Adesso vorrei sfruttare anche l'evento 'su
tasto giů' per eseguire una funzione senza dover creare una routine
evento e cioč:
Private Sub IDCommessa_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 114 Then 'Tasto F3
........................istruzioni
    End If
End Sub
bensě
su tasto giů.....=function(parametri....)
e la function reagisca solo se il tasto premuto č p.e. F3.
esiste cioč un modo per intercettare da codice l'ultimo tasto premuto?
č fattibile?
Grazie

 ha scritto nel messaggio
news:fd76289.05012...@posting.google.com...

Complicandosi la vita si usando la Macro AutoKeys e definando a quale
combinazione reagire e come(nome funzione da eseguire).
Tieni presente che devi anche sapere in che Form stai operando e su che
controllo, quindi nella Funzione estrai Screen.ActiveForm e ActiveControl
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------

 Ciao
Ho provato: funziona OK.
1)Ho messo un afunzione nell'evento 'su tasto giù':
=FormKeyDown([Form];"DataInserisci";"IDData";[IDData])
2)In un modulo standard ho memorizzato la funzione,
che non fa altro che aggiornare delle variabili globali:
' FormObjectGlobal: Oggetto form in cui inserire il dato cercato da
elenco
' StrFormGlobal: Nome maschera elenco con le funzioni di inserimento
' StrCtrlGlobal: Nome del controllo di origine
' ValueCtrlGlobal: Valore del controllo di origine può anche non
esserci
' ValueDefGlobal: Valore opzionale usabile a discrezione
' AutoKeysOKGlobal: Vaore booleano di consenso
Public FormObjectGlobal As Form
Public StrFormGlobal As String
Public StrCtrlGlobal As String
Public ValueCtrlGlobal As Variant
Public ValueDefGlobal As Integer
Public AutoKeysOKGlobal As Boolean
Public Function FormKeyDown(FormObject As Form, Optional StrForm As
String, Optional StrCtrl As String, Optional ValueCtrl, Optional
ValueDef As Integer) As Integer
    Set FormObjectGlobal = FormObject
    StrCtrlGlobal = StrCtrl
    StrFormGlobal = StrForm
    ValueCtrlGlobal = ValueCtrl
    ValueDefGlobal = ValueDef
    AutoKeysOKGlobal = Not Screen.ActiveControl.Locked
End Function
3)Dopo che viene eseguito l'evento 'su tasto giù',
parte la macro autokeys, che lancia una funzione:
Se "{F3}" 'esegui codice:'=GetLastKeys("{F3}")
Se "{F5}" 'esegui codice:'=GetLastKeys("{F5}")
....eccetera
4)
Public Function GetLastKeys(StrKeys As String)
    If AutoKeysOKGlobal Then
        If ValueDefGlobal = 1 Then
            StrForm = 
FormObjectGlobal.Form.Parent.Name
        Else
            StrForm = 
FormObjectGlobal.Form.Name
        End If
        Select Case StrKeys
        Case "{F3}"
                DoCmd.OpenForm StrFormGlobal, , , , , , StrForm
        Case "{F5}"
            FormObjectGlobal.OrderBy = StrCtrlGlobal
            AutoKeysOKGlobal = False
        Case "^{F5}"
            FormObjectGlobal.OrderBy = StrCtrlGlobal & " DESC"
            AutoKeysOKGlobal = False
        End Select
    End If
End Function
5) Nel form StrFormGlobal inserisco il richiamo di una funzione
che inserisca per esempio un valore da un elenco:
Public Function InsertValue(ValueCtrl)
    If AutoKeysOKGlobal Then
        FormObjectGlobal.Form.Controls(StrCtrlGlobal) = ValueCtrl
        DoCmd.Close acForm, StrFormGlobal
    Else
        StrCaption = Screen.ActiveForm.Caption
        O$ = MsgBox("E' necessario aprire la maschera con F3," &
Chr$(13) & "per poter utilizzare la procedura di inserimento!",
vbInformation + vbOKOnly, StrCaption)
    End If
End Function
6) Conclusioni: mi sono accorto che questo modo di lavorare all'inizio
è molto più conplicato, ma alla fine specie se si hanno molte tabelle
da
gestire (commesse, ordini clienti, ordini fornitori, ditte,
stabilimenti, banche
bolle, fatture acquisto e vendita, impiegati, date) paga perchè una
volta costruito
il sistema con un semplice copia incolla nella cella delle proprietà,
senza entrare in visualizza struttura, permette di creare una serie di
routine
standard, che possono essere eventualmente corrette in pochi punti del
codice
evitando bugs sparse nel DB.
In questo caso in tutti i campi tipo data, faccio aprire una maschera
calendario
per inserire una data.
Scusate lunghezza messaggio.
A presto.