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

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga:

Faq

Ho trovato 29 faq.

Categoria Argomento Commenti
Novizi Novizi I quattro stati dei pulsanti nelle picture della tool box
È possibile creare all'interno della picture library delle icone a 4 stati, le icone cioè cambiano in funzione dello stato del pulsante relativo. Dall'alto in basso i quattro stati rappresentati sono:

  • pulsante cliccabile
  • pulsante sotto fuoco (on focus)
  • pulsante cliccato
  • pulsante non cliccabile



Novizi Novizi Scorciatoie da tastiera *
Ecco alcune scorciatoie utilizzabili da tastiera:

- Chiusura di tutte le finestre di design (eccetto la struttura): Alt+Clik su uno qualsiasi dei bottoni di chiusura.

- Chiusura di tutte le finestre di design passando alla modalità User o Custom: Shift mantre si cambia modalità.

- Aprire il metodo selezionato: Ctrl+p.

- Rinominare gli oggetti solo selezionabili: Ctrl+Clic sul nome.

- Copiare il testo selezionato in un posto specifico degli appunti: Ctrl+Shift+un numero da 1 a 9.

- Incollare il testo da un posto specifico degli appunti:Ctrl+un numero da 1 a 9.

- Selezionare tutti gli oggetti di uno stesso tipo in un form: Ctrl(Command su Mac)+clik su uno degli oggetti da selezionare.

- Selezionare/deselezionare tutti gli eventi relativi ad un oggetto: Ctrl(Command su Mac)+clik su un evento.

- Creare un subrecord: Ctrl(Command su Mac)+/ (questa impostazione è modificabile usando 4D Customizer Plus).


4
Novizi Novizi Convertire un'applicazione da Macintosh a Windows
In linea di massima, 4d in versione windows apre la struttura e i dati creati su Mac.

In particolare, ecco alcuni punti da verificare:

1. Struttura dei file

Se la versione di 4d è la 2003 occorre splittare i file Mac separando il documento dalle risorse, con le estensioni finali 4DB e RSR per la struttura e 4DD e 4DR per i dati, usando l'applicativo 4D Transporter (gratuito, scaricabile dal sito di 4d, funziona su Mac).

Se il programma è invece stato creato con la 2004 dovrebbe essere già splittato.

2. Plugin

Se la versione di 4d è la 2003 ci potrebbe essere allo stesso livello della struttura una cartella Mac4DX con dei plugin di comandi aggiuntivi; occorrerà avere una cartella Win4DX e controllare che ci siano gli stessi plugin in versione windows.

Nella versione di 4D 2004 le cartelle Mac4DX e Win4DX sonos sostituite dalla cartella Plugins che contiene una versione dei plugin multipiattaforma, per cui in questo caso non ci sarebbe niente da fare.

3. Estetica

Nella versione per Mac potrebbero essere stati usati font e dimensione di campi non perfettamente riproducibili in automatico su Windows. Ci sono varie tecniche per assegnare font in automatico (tipo usando gli stili), ma dipende da come è stato disegnato il programma. In generale, bisogna fare un giro nelle varie maschere a verificarne la leggibilità.


Novizi Novizi Numero di record limitato o illimitato
Quando si usa il comando SET QUERY LIMIT per limitare il numero di record ritornati da una query, è necessario reimpostare subito dopo il numero di record ritornati a "illimitato", usando

SET QUERY LIMIT(0)

Altrimenti, infatti, il numero di record ritornati dalle query all'interno del processo corrente sarà sempre limitato.
Novizi Novizi Date antecedenti
Per ottenere un valore di tipo date partire da un altro si usa il comando Add to date.
E' importante sottolineare che il comando accetta anche numeri negativi come parametro: questo significa che per portare indietro di due mesi la data contenuta nella variabile $data_d posso scrivere:

$data_d:=Add to date($data_d;0;-2;0)
Novizi Novizi Iniziare a programmare con 4D
Segnaliamo un un'unica faq i link alle risorse con cui iniziare a farsi un'idea del funzionamento di 4D.

La versione demo di 4th Dimension è scaricabile dal sito di 4D: fra i download proposti, scegliere la versione del file "4th Dimension vvvv" (mentre scriviamo vvvv sta per 2004) per la propria piattaforma: quella scaricata è la versione più recente del sistema di sviluppo e, se non avete acquistato 4D, potrete utilizzarlo tranquillamente e totalmente in modalità "Demo", l'unica limitazione è data dalla dimensione del progetto (come numero di tabelle/archivi/file e numero di method/procedure/scripts). Se siete studenti, insegnanti o organizzazioni no-profit, potete ottenere una versione di 4D gratis o ad un prezzo simbolico.

Scaricato il file siete già pronti a partire: vediamo come fare ciò che vogliamo fare.

Su questo sito si trova una sorta di "compendio breve" su 4D, inviato da Roberto Vergani, ecco i link:

Prima introduzione a 4d: EVENTI e gerarchia esecuzione

Prima introduzione a 4d: FILE E CAMPI

Prima introduzione a 4d: FORMS [schermate]

Prima introduzione a 4d: METODI [procedure, scripts]

Prima introduzione a 4d: SUBTABLE

Un manuale completo, Jumpstart 4D, in inglese, è segnalato in questa faq.

Novizi Novizi Control flow nell'esecuzione di un metodo: profondità
Abbiamo analizzato i vari metodi di controllo di flusso di 4D. Le varie strutture sono variamente combinabili.

È interessante notare come il limite di profondità nell'inserire tali strutture (If/While/For/Case of/Repeat) è di 512 livelli.

Novizi Novizi Control flow nell'esecuzione di un metodo: ramificata
Una struttura ramificata (anche se il termine inglese Branching rende meglio l'idea) controlla il verificarsi o meno di una condizione per far prendere al codice "strade" diverse, valutando se una certa espressione restituisce un valore TRUE o FALSE.

Un esempio di struttura ramificata è dato dalla sequenza If...Else...End if, dove il flusso del programma viene suddiviso in più percorsi.

Altro esempio è dato dall'insieme di Case of...Else...End case, che invece suddivide l'esecuzione in più percorsi.

Novizi Novizi Control flow nell'esecuzione di un metodo: ciclica
Una struttura ciclica viene utilizzata per eseguire più volte una certa quantità di codice. Per tale scopo, le strutture linguistiche usate sono:

While...End while

Repeat...Until

For...End for

I cicli sono controllati in due modi: o in base al verificarsi di una condizione o specificando il numero di cicli (anche se in realtà è possibile scmbiare i due sistemi senza problemi).

Quindi la differenza sostanziale sta nel fatto che i While e i Repeat vengono eseguiti un numero indefinito di volte, mentre i cicli For vengono eseguiti un numero prestabilito di volte.

Novizi Novizi Control flow nell'esecuzione di un metodo: sequenziale
Per quanto un metodo possa essere scritto in maniera semplice o complessa, i sistemi di scrittura del codice 4D (sistemi di controllo di flusso) sono sempre tre:

Sequenziale

Ramificato

Ciclico

cominciamo a entrare nel dettaglio.

Il sistema sequenziale è dato dalla esecuzione lineare, sequenziale appunto, di una serie di istruzioni 4th Dimension:

OUTPUT FORM([People]; "Listing")
ALL RECORDS([People])
DISPLAY SELECTION([People])

Si può anche usare una istruzione o un comando in un'unica riga, è sempre programmazione sequenziale:

[People]Last Name:=Uppercase([People]Last Name)

Novizi Novizi I tre ambienti di 4D
4D può lavorare in te modalità differenti:

- Design: è quella usata dal programmatore per sviluppare il database, dove si può accedere alla struttura delle tabelle, all'editor dei metodi, delle maschere, etc;

- User: è la modalità di inserimento diretto dei dati nelle tabelle; cioè in pratica è possibile navigare con gli strumenti standard di 4d all'interno di tutto il database; utilizzato in genere solo dal programmatore e dall'amministratore di sistema.

- Custom: è la modalità visibile all'utente finale (per capirci, quella che si vede utilizzando semplicemente 4D Runtime); l'utilizzo del programma è deciso dal programmatore con i menu personalizzati.

Per scegliere la modalità con cui si apre una applicazione, dal Design basta andare nel menu Edit-Preferences (o Mela-Preferences) e selezionare l'ambiente desiderato.
Novizi Novizi Le estensioni dei file 4D
Ecco un elenco delle estensioni dei vari tipi di file usati da 4th Dimension:

- .4db : la struttra del database;
- .rsr : risorse della struttura, quando si sposta una struttura bisogana spostare sia il file .4db che il file .rsr;
- .4dd : file dei dati, è indipendente dalla struttura;
- .4dr : file di risorse del file di dati, da spostare sempre insieme al .4dd;
- .4dc : database compilato;
- .4df : ricerca salvata (nel query editor);
- .4dl : file log;
- .4ds : data segment, i file dati "aggiuntivi" al file dati principale;
- .4dx : external package;
- .4fi : filtro ASCII;
- .4fr : formula;
- .4lb : etichette salvate nel label editor;
- .4qr : quick report salvati;
- .4st : set salvati;
- .4ug : utenti e gruppi;
- .4vr : varialbili;
- .tfr: formule (salvate ad esempio nel quick report o nell'order by);

Su Mac le risorse sono inserite nei file struttura e dati, la struttura non ha quindi estensione, mentre il file dati ha estensione ".data".

Novizi Novizi Puntatori
I puntatori sono uno strumento di programmazione avanzata, che principalmente permettono di scrivere del codice "generalizzato".

Tecnicamente un puntatore contiene un riferimento ad una tabella, campo, variabile di qualsiasi tipo compresi gli array o vettori. Ecco un esempio di puntatore ad una variabile:

C_TEXT(MiaVariabile_t)
C_POINTER(punta_ptr)
MiaVariabile_t:="Umberto Migliore"
punta_ptr:=->MiaVariabile_t

a questo punto:
ALERT(punta_ptr->) è come scrivere ALERT(MiaVariabile_t)

Ad esempio, se scrivo una procedura generica per la gestione dei pulsanti di una maschera posso usare una variabile di tipo puntatore invece di indicare la variabile stessa.

Se ad esempio scrivo un pezzo di codice come il seguente

If (Condizione) ` se la condizione è Vera…
  ENABLE BUTTON (MioPulsante) ` abilita questo pulsante
Else ` altrimenti…
  DISABLE BUTTON (MioPulsante) ` disabilitalo
End if

dovrò ripeterlo se ho molti pulsanti nel form.
Invece è possibile scrivere un metodo generico "ImpostaPulsante" così:

  ` metodo IMPOSTA PULSANTE
  ` IMPOSTA PULSANTE ( Pointer ; Boolean )
  ` IMPOSTA PULSANTE ( ->MioPulsante ; Abilita )
  `
  ` $1 – Puntatore al pulsante
  ` $2 – Booleano. Se TRUE, abilita il pulsante. Se FALSE, lo disabilita

If ($2)
  ENABLE BUTTON($1->)
Else
  DISABLE BUTTON($1->)
End if
Novizi Novizi Se un'immagine non viene visualizzata
Quando un'immagine non viene visualizzata, molto probabilmente questo significa che il tipo di pict non è supportato dalla macchina, o meglio dalla sua configurazione software: in genere basta installare Quicktime (che è gratuito) o anche solo aggiornarlo all'ultima versione.

Per conoscere i tipi di file immagine supportati si usa il comando:

PICTURE TYPE LIST (formatArray{; nameArray})

che riempie gli array passati come parametro con i codici di import/export di QuickTime che la macchina supporta.
Diventa facile così controllare se il tipo della pict in questione è supportato.
Novizi Novizi Scorrere una selezione di record
Esistono tre modi di scorrere una selezione di record, a seconda che si usino i comandi For...End for, Repeat...Until o While...End while . Ecco il dettaglio delle sintassi:

For ($i;1;Records in selection([Table 1]))
  ` esegui le operazioni
  NEXT RECORD([Table 1])
End for


Repeat
  ` esegui le operazioni
  NEXT RECORD([Table 1])
Until (End selection([Table 1]))



While (Not(End selection([Table 1])))
  ` esegui le operazioni
  NEXT RECORD([Table 1])
End while


Potrebbe essere necessario aggiungere prima del ciclo un FIRST RECORD([Table 1])

Novizi Novizi Quando impostare i valori delle variabili
Quando si accede ad un INPUT FORM (o maschera di inserimento) è consigliabile impostare i valori delle variabili o dei campi inserendo questi assegnamenti nella zona "On Load" del metodo del form. Ad esempio:

Case of
    :(Form event=On Load)
        una_variabile:=3
End case

Nell'evento on Load vanno preimpostati anche i vari oggetti del form. Ad esempio, se ho un tab control che uso per scorrere le pagine del form, posso impostare "l'etichetta" che deve essere selezionata in partenza.

L'evento on Load può in realtà essere controllato anche all'interno di ogni singolo oggetto, ma in genere è meglio raccogliere tutte queste impostazioni in un unico punto, il metodo del form: in questo modo è possibile valutare tutte le preimpostazioni e decidere anche la precedenza o la priorità di alcune.
Ad esempio, se ho un menu a scelta che mi mostra/nasconde alcuni campi di inserimento, o se devo cambiare il colore di qualche oggetto (magari un campo è rosso se è obbligatorio quando un altro campo è preimpostato).
Novizi Novizi Jumpstart 4D: ovvero un manuale completo di 4th Dimension
Uno degli aspetti più difficoltosi in cui un utente si imbatte iniziando a programmare con 4D è la vastità di informazioni dove attingere, dove per informazioni intendiamo ovviamente i manuali. Da quale parto? Cosa mi serve? E se non trovo ciò che mi serve?
Se le varie faq di introduzione a 4D sono troppo piccole, o se gli articoli di 4D sul passaggio da FileMaker Pro a 4th Dimension non vi hanno risolto il problema, un'altra strada da seguire potrebbe essere Jumpstart 4D, il manuale scritto da Steve Hussey che porta il programmatore ad avere una conoscenza di base ma completa del prodotto, partendo dalla struttura, passando poi agli ambienti User e Custom, password, compilazione e distribuzione del prodotto. Il tutto aiutato dalla costruzione guidata di un piccolo database di gestione fatture.

Le informazioni potete trovarle su 4D Press.
Jumpstart 4D è acquistabile per $29 in versione cartacea su Amazon o su 4D Store, oppure si può scaricare gratuitamente il PDF dal sito ftp di 4d.



1
Novizi Novizi Prima introduzione a 4d: FILE E CAMPI *
Prima cosa creare file e campi, nella terminologia di 4D si usano i termini
inglesi Table(s) e Field(s). E qui non ci sono problemi, i campi hanno il
loro type (tipo, cioe' se alfa, numerico, ecc.) che e' autoesplicativo. Non
esistono campi "calcolati" perche' in 4D ci sono funzioni molto piu' potenti
che vedremo in seguito.
L'unica nota particolare e' che Tables e Fields non si possono piu'
cancellare. Se crei un Table (un file) che poi non ti serve lo lasci dove si
trova e basta, semmai lo utilizzerai in seguito se servira'; se non aggiungi
records non occupa nemmeno memoria dati. Se in un Table crei un campo che
non ti serve, e' bene usare qualche accortezza per evitare di trovarselo tra
i piedi: primo dagli un nome che ricordi che e' inutile (per esempio
"spurio") poi impostalo come invisibile cosi' non compare inutilmente in
giro e poi imposta il type come booleano che e' il type che occupa meno
memoria (in RAM e su disco).
Nota che i nomi di Tables e Fields si possono cambiare quando si vuole.

1
Novizi Novizi L'elemento scelto di un array
Se ho definito l'array arrProva e lo uso come nome di un oggetto tipo scrollable area in un form, posso utilizzare la variabile arrProva per conoscere l'elemento che l'utente ha scelto: se ha scelto il terzo elemento dell'array, arrProva sarà uguale a 3 e arrProva{arrProva} è il valore del terzo elemento dell'array.

Nota: Esiste anche un elemento 0 degli array che normalmente non è usato. Quindi se dichiaro un array di 10 elementi, in realtà ne avrei a disposizione 11, ma è da sempre consigliato utilizzare gli elementi da {1} a {10}.
L'elemento 0 viene solitamente usato con combo box o scrollable area: In questi casi il valore di arrProva{arrProva} sarà uguale al valore di arrProva{0}.
Novizi Novizi Uso dei comandi in mono o multi utenza
Molti comandi 4D si possono comportare in maniera differente a seconda che vengano usati in versione monoutente o multiutente.
Ad esempio QUIT 4D permette di chiudere l'applicazione 4D. Se il comando viene però inserito in una "stored procedure", cioè in un processo da far eseguire al server, è possibile passare al comando un parametro numerico che indica quanti minuti attendere prima della chiusura.
Altro esempio può essere dati dai comandi "Current time" e "Current date", che solitamente restituiscono la data e l'ora della macchina su cui si sta lavorando; passando come parametro un asterisco, i dati restituiti saranno quelli relativi al server: questo risulta ad esempio molto utile quando si vuol essere certi della cronologia delle operazioni, in modo da usare una sorta di "orologio unico" per tutti i client.
Novizi Novizi Impedire l'accesso ai metodi all'utente finale
L'utente finale del vostro software 4th Dimension può facilmente conoscere i metodi che lo compongono dagli elenchi che compaiono in alcune finestre aperte da "Order by" e "Quick Report".
In alcuni casi (per i metodi che ritornano un valore utile) questo accesso è voluto e necessario, ma nella maggior parte dei casi può potenzialmente essere dannoso.

La soluzione è abilitare la proprietà "Invisible" per i metodi che si vogliono nascondere; con la versione 2003 si può usare la comoda opzione "Batch setting of attributes" per modificare le proprietà di più metodi contemporaneamente.
Novizi Novizi I cicli infiniti dei subform
Quando si usano i subform in un form di input, può capitare, durante la fase di sviluppo, di imbattersi in errori del tipo "Unable to Read Record" che vengono mostrati apparentemente all'infinito (questo capita solitamente quando la selezione del subform cambia in maniera inaspettata).
Per uscire da questo ciclo, fare Command+Ctrl+Clic su Mac o Ctrl+ClicDestro+ClicSinistro Contemporaneamente su Win mentre viene mostrata la finestra di errore per spostare la finestra che contiene il subform in maniera tale che quest'ultimo non sia più visibile sullo schermo. 4D non cercherà più di caricare il record e il messaggio non verrà più mostrato. A questo punto è possibile premere il pulsante di chiusura (o Command+Punto o Ctrl+Punto) per chiudere la finestra.
Novizi Novizi La finestra iniziale di una applicazione 4D
All'avvio di una applicazione, 4D mostra una finestra standard di avvio. Questa finestra è molto personalizzabile.

È possibile, ad esempio cambiarne l'immagine contenuta così:
- copiare negli appunti l'immagine che si vuole mostrare;
- scegliere la gestione dei menu nel design environment dell'applicazione, il menu di partenza e poi la voce nel menu "custom menu";
- incollare l'immagine.

A questo punto potrebbe essere necessario modificarne la dimensione all'avvio. Per fare questo si agisce sulla struttura aprendola col Customizer e scegliendo il tipo di "apertura" e, se serve, la dimensione.
Novizi Novizi Nascondere la finestra iniziale di una applicazione 4D
E' possibile non mostrare completamente la finestra di avvio di una applicazione 4th Dimension. Basta aprire la struttura col Customizer e nella sezione Window scegliere Hide window nel pop-up menu "Choose screen size".

Nascosta la finestra, è anche possibile ripristinarla andando nella modalità User della struttura e premendo Ctrl+U (Win) o Cmd+U (Mac)
Novizi Novizi Creare automaticamente un messaggio di posta
Il comando OPEN WEB URL permette di aprire un link. Seguendo lo stesso principio, il comando si può usare anche in una qualsiasi applicazione 4th Dimension nella forma:

OPEN WEB URL("mailto:nome@dominio.dom")

per creare un messaggio di posta dall'interno di un programma 4D.
Novizi Novizi Prima introduzione a 4d: SUBTABLE
Un ultimo consiglio per evitare difficolta' in cui cascano in molti, anche
sviluppatori professionisti, e in cui a suo tempo caddi anch'io: avrai
notato che quando si creano nuovi campi in un file, tra i molti tipi esiste
anche il type Subtable che, come dice il nome stesso, e' un campo che a sua
volta e' un file subordinato al primo in cui possono essere creati altri
campi. Se un file ha un campo Subtable, ogni record avra' i suoi subrecord,
per esempio:

Nome : ALBERTO
Nato : 23-10-1960
Interventi--------------(subtable)
           Tonsillectomia 16-09-1967
           Appendicectomia 01-06-1980

Nome : GIUSEPPE
Nato : 23-10-1940
Interventi--------------(subtable)
           Criptorchidia 21-05-1942
           Ernia inguinale 13-02-1970
           Nefrotomia 16-11-1995

Ecco, l'errore in cui si casca piu' o meno tutti e' quello di considerare il
Subtable come un file a tutti gli effetti, come ho fatto nei due esempi di
record che ho tracciato. NO, non farlo perche' i subrecords sono di
difficile gestione (per esempio non possono essere indicizzati); in questi
casi sempre creare un file vero e proprio, un file "figlio" collegato al
"padre" con le potenti relazioni di 4D. I subtables vanno considerati solo
come campi a valenza multipla, in cui accumulare dati solo descrittivi che
non necessitano di ricerche veloci o elaborazioni complesse.
Novizi Novizi Prima introduzione a 4d: METODI [procedure, scripts]
In 4D si puo' inserire codice eseguibile a molti livelli che sono ordinati
in modo gerarchico. Analogamente a moltissimi altri ambienti di sviluppo il
codice puo' essere associato ad eventi o eseguito su esplicito comando (o
chiamata).

Vediamo una panoramica di dove si puo' inserire codice eseguibile.

DataBase Methods:
Accessibili solo dall'Explorer, videata "Methods", aprire la voce "DataBase
Methods", c'e' l'elenco.
Sono Methods gia' presenti nella struttura e vengono eseguiti quando vengono
generati eventi globali, come aprire la base dati o uscire da 4D. Se per
esempio vuoi che il tuo programma saluti sempre l'utente quando finisce di
lavorare, puoi mettere l'istruzione: Alert ("Bye bye.") nel Database Method
"On Exit". Questo codice verra' eseguito ogni volta che si esce da 4D,
indipendentemente da quale sia l'ambito o la procedura o il codice che abbia
provocato l'uscita. I database method si usano solo per azioni di carattere
generale e globale, come per esempio controllare su quale sistema operativo
sta girando il programma, chiudere tutti i processi uscendo da 4D e cose del
genere.

Triggers:
Accessibili dall'Explorer, videata "Methods", aprire la voce "Form Methods &
Triggers", doppio clic sul nome di un Table per aprire il suo trigger.
Sono Methods gia' presenti nella struttura e legati ai Tables, ogni Table ha
il suo Trigger; il Trigger di un Table viene eseguito quando vengono
generati eventi globali (Database Events) che accedono a quel table, come
salvare un record, cancellare un record, ecc. Vedi il manuale alla voce
Trigger per dettagli, ma non ora.

Project Methods:
Accessibili dall'Explorer, videata "Methods", aprire la voce "Project
Methods", c'e' l'elenco; oppure quando il nome di un method e' usato nel
codice basta selezionarlo e scegliere la voce Edit Method dal menu Design
(su Mac tasti mela-P).
Sono procedure create dallo sviluppatore, accessibili ovunque nella base
dati e sono eseguite solo su esplicita chiamata, nel senso che ignorano gli
eventi. Possono essere chiamate da un menu' o da un qualunque altro methods,
ovunque si trovi. Per esempio, per accedere all'Archivio dei Clienti potrai
scrivere un Method che organizza la cosa: dichiarare quale form usare per la
lista dei record, quale form per editare il singolo record, scegliere una
selezione di record, aprire una finestra e mostrare all'utente la schermata
per permettere l'accesso alle registrazioni. Questo method che accede
all'Archivio Clienti potra' poi essere eseguito da un menu o, come esempio,
da un pulsante in un form: nell'archivio fatture puoi mettere un pulsante
"Clienti" che chiama quel method ed apre la finestra con l'Archivio Clienti.
Dato che i Project Methods sono accessibili ovunque, possono essere usati
anche come subroutine o concepiti come funzioni perche' e' possibile passare
dati da un Method ad un altro. I dati passati tra methods si chiamano
parametri, vedi il manuale alla voce Project Methods. Per esempio, se in
molti punti del tuo programma devi eseguire lo stesso calcolo su un campo,
e' sciocco riscrivere ogni volta le stesse istruzioni, basta creare un
method e usarlo ovunque serva, questo non solo fa risparmiare tempo ma -
soprattutto - rende la struttura piu' modulare, piu' facile da mantenere e
da correggere (ma queste sono linee guida generali per la programmazione che
tutti conosciamo). Tutti i Project Methods creati dallo sviluppatore vengono
aggiunti all'elenco dei comandi che compare nella finestra di editing dei
method, proprio per inserirli agevolmente nel proprio codice.

Form Methods:
Accessibili dall'Explorer, videata "Methods", aprire la voce "Form Methods",
c'e' l'elenco dei Tables, aprire un table e c'e' l'elenco dei form method
(hanno lo stesso nome dei forms).
Sono eseguiti quando vengono generati eventi nei Form, come cliccare,
inserire dati e moltri altri.

Object Method (contenuti negli oggetti presenti nei forms):
Accessibili aprendo la finestra delle proprietà di un oggetto con doppio
clic su di esso, oppure con un solo clic tenendo premuto il tasto opzione
(su Mac).
Sono eseguiti quando vengono generati eventi sull'oggetto, come cliccare o
inserire dati. Possono essere eseguiti anche quando vengono generati eventi
del form cui appartengono.
Novizi Novizi Prima introduzione a 4d: EVENTI e gerarchia esecuzione
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.
Novizi Novizi Prima introduzione a 4d: FORMS [schermate]
Per creare i form conviene usare le funzioni messe a disposizione del "New
Form Wizard", la finestra che compare quando da menu' scegli "New form...".
Nel Wizard puoi definire le varie caratteristiche del form, prova per vedere
come funziona. Puoi creare diversi form, e poi cancellarli (da Explorer).
Nota che un form e' cancellabile sono se NON e' l'Input o l'OUTPUT FORM per
quel file, nell'Explorer guarda se e' attivata l'opzione in fondo
all'elenco; per esempio se un form e' l'INPUT FORM e vuoi eliminarlo
seleziona un altro form di quel file (o creane uno se non ce ne sono altri),
attiva il check per farlo diventare l'INPUT FORM e poi potrai cancellare il
precedente.
Le funzioni del Form Wizard sono solo facilitazioni per velocizzare la
creazione di un form, ma tutte le caratteristiche possono ovviamente essere
modificate e oggetti aggiunti o rimossi anche dopo la creazione. Puoi anche
creare un form assolutamente vuoto e poi lavorarci come vuoi, oggetto per
oggetto, basta cliccare edit senza impostare nessuna funzione, salvo
scegliere il Table a cui deve appartenere quel form.
Con il Wizard puoi anche definire un tuo template grafico (funzione
avanzate) e salvarlo per utilizzarlo in tutti i forms creati
successivamente, ma per il momento usane uno esistente.

Nota che nel form saranno presenti solo i campi che hai selezionato
dall'elenco al momento della creazione. Se ne salti qualcuno non sarà
presente, se aggiungi dei campi al file DOPO la creazione del form, non
saranno aggiunti automaticamente ma dovrai farlo a mano.

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
307 utenti registrati

Pagina servita il 16/04/24 alle 13:47:30 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