Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga: Prev Next

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 if

il 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 case

Anche 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 if
End if

Nota 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 if

pero' 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: 17394

Se accedi con utente e password, puoi aggiungere dei commenti.


Accesso

User:
Pass: Accedi

Cerca

Se non trovi le informazioni che cerchi scrivi a aiuto@sviluppo4d.it

4D Principali

4D Discussioni

Faq random


Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
303 utenti registrati

Pagina servita il 29/03/24 alle 14:32:42 Valid HTML 4.01! Valid CSS!

Mutuo Facile, iDigitalScout, iDigitalTags e altre app di Nexid srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per IOS Apple iPhone, iPod, iPad