Titolo: Prima introduzione a 4d: EVENTI e gerarchia esecuzione
Categoria: Novizi |
|
Ultimo Aggiornamento: 02/04/04 |
Lasciamo stare per ora i Database Method e i Triggers. I Project Method
dovrebbero essere abbastanza chiari. Vediamo invece come fare in modo che 4D
esegua quello che vogliamo quando lavoriamo in un form.
Nelle finestre delle proprieta' dei Form esiste la videata degli eventi, che
elenca tutti gli eventi a cui puo' reagire il Form Method; alcuni sono gia'
attivati per default. Quando viene generato un evento, per esempio cliccare,
se il form ha l'evento "On clicked" attivo, verra' subito eseguito il Form
Event di quel form. Tutti gli eventi che sono attivati chiamano sempre il
form event del form e non altro. Se provi ad inserire l'istruzione BEEP nel
form event di un form e poi, passando in ambiente user, usi quel form per
editare un record, sentirai una serie numerosa di beep, uno per ogni evento
attivo: un beep quando il record viene caricato e prima di mostrarlo (On
load), uno se clicchi, uno se modifichi un campo e cosi' via. Allora prova a
inserire nel form event queste istruzioni:
If (Form Event=On Clicked)
beep
End ifil beep sara' udibile solo se clicchi e non se esegui altre azioni. Come
vedi puoi eseguire delle istruzioni nel form method solo a seguito di eventi
scelti da te: devi attivarli nella finestra delle proprieta' del form e
scrivere istruzioni che eseguano quello che vuoi quando accade un
determinato evento; anche per piu' eventi, ovviamente:
Case of :(Form Event=On Load)
istruzioni da eseguire prima che il record sia mostrato
:(Form Event=On Clicked)
istruzioni da eseguire se si clicca nel form (ovunque)
:(Form Event=On Validate)
istruzioni da eseguire dopo conferma del record
End caseAnche gli Object methods lavorano allo stesso modo, sono sensibili ai form
event; devi attivare gli eventi nella finestra delle proprieta' dell'oggetto
e poi scrivere le tue istruzioni. Per esempio, se vuoi eseguire un calcolo
su un valore inserito dall'utente, immediatamente, appena riempito il campo,
puoi attivare l'evento "On Data Change" e scrivere le tue istruzioni.
Facciamo un esempio pratico prendendo spunto dalla richiesta di Pasquale.
Devi calcolare a che eta' un paziente ha subito un intervento chirurgico.
Nel form ci saranno diversi campi e un campo (o una variabile) in cui
l'utente inserisce la data dell'intervento, chiamiamolo Data_Intervento e
assumiamo che esista anche il campo Data_Nascita; nel definire il campo
Data_Intervento attiviamo l'evento "On Data Change" (e disattiviamo gli
altri eventi altrimenti il codice viene eseguito continuamente) e scriviamo
questa istruzioni:
$risultato:=year of(Data_Intervento) - year of(Data_Nascita)
in questo esempio ho assegnato il risultato alla variabile locale
$risultato, ma e' solo un esempio. Naturalmente il codice puo' essere piu'
completo, con un minimo di controllo sulla coerenza dei dati inseriti
dall'utente:
If (Data_Intervento # !00-00-00!) se utente ha inserito una data
If (Data_Nascita = !00-00-00!) se non inserita data di nascita
beep
alert("Devi prima inserire la data di nascita.")
Data_Intervento:=!00-00-00! azzera il dato inserito
goto area (Data_Nascita) porta il focus sulla data di nascita
Else $risultato:=year of(Data_Intervento) - year of(Data_Nascita)
If ($risultato<1)
beep
alert("Date incongruenti.")
Data_Intervento:=!00-00-00! azzera il dato inserito
goto area (Data_Nascita) porta il focus sulla data di nascita
End if End ifEnd ifNota pero' che affinche' un oggetto sia sensibile ad un evento non solo e'
necessario attivare l'evento nelle proprieta' dell'oggetto ma anche nel
form. Per esempio, se vuoi che un oggetto inseribile (campo o variabile)
emetta un suono ad ogni tasto premuto, potresti scrivere un codice di questo
tipo:
If (Form Event=On After Keystroke)
play("ClicSound";0) `dove ClicSound e' una risorsa suono
End ifpero' dovrai attivare l'evento On After Keystroke non solo nelle proprieta'
dell'oggetto ma anche nelle proprieta' del Form.
Una cosa molto importante. Esiste una gerarchia nella esecuzione dei
methods. Per esempio quando clicchi sul pulsante OK che conferma una scheda,
vengono eseguiti i seguenti methods, nell'ordine:
1) il method del pulsante che hai azionato (se attivato "On Clicked")
2) il method del form che contiene il pulsante, piu' volte:
On clicked per il pulsante premuto
On Validate per avere confermato le modifiche
...
3) il trigger del table cui appartiene il record,
perche' e' stato registrato
Quindi in conseguenza di uno stesso evento e' possibile eseguire prima il
method dell'oggetto e poi del form.
Inviato da: Roberto Vergani |
|
Visite: 17732 |
Se accedi con utente e password, puoi aggiungere dei commenti.