Uno di Lingua Delphi caratteristiche non presenti in altre lingue moderne è la nozione di set.
Delphi diimpostare il tipo è una raccolta di valori dello stesso tipo ordinale.
Un set viene definito usando set di parola chiave:
I tipi di set sono generalmente definiti con subrange.
Nell'esempio sopra, TMagicNumber è un tipo subrange personalizzato che consente alle variabili del tipo TMagicNumber di ricevere valori da 1 a 34. In poche parole, un tipo di sottorange rappresenta un sottoinsieme dei valori in un altro tipo ordinale.
I valori possibili del tipo di set sono tutti i sottoinsiemi del tipo di base, incluso il set vuoto.
Una limitazione sui set è che possono contenere fino a 255 elementi.
Nell'esempio sopra, il tipo di set TMagicSet è un set di elementi TMagicNumber - numeri interi compresi tra 1 e 34.
La dichiarazione TMagicSet = set di TMagicNumber è uguale alla seguente dichiarazione: TMagicSet = set di 1..34.
Imposta variabili di tipo
Nell'esempio sopra, le variabili emptyMagicSet, oneMagicSet e anotherMagicSet sono set di TMagicNumber.
Per assegnare un valore in una variabile di tipo set, utilizzare le parentesi quadre ed elencare tutti gli elementi dell'insieme. Come in:
Nota 1: ogni variabile di tipo set può contenere l'insieme vuoto, indicato da [].
Nota 2: l'ordine degli elementi in un set non ha significato, né è significativo che un elemento (valore) sia incluso due volte in un set.
La parola chiave IN
Per verificare se un elemento è incluso nel set (variabile) utilizzare il NEL parola chiave:
Imposta operatori
Allo stesso modo in cui puoi sommare due numeri, puoi avere un set che è la somma di due set. Con i set il tuo evento ha più operatori:
- + restituisce l'unione di due set.
- - restituisce la differenza di due serie.
- * restituisce l'intersezione di due serie.
- = restituisce vero se due insiemi sono uguali - hanno lo stesso elemento.
- <= restituisce vero se il primo set è un sottoinsieme del secondo set.
- > = restituisce vero se il primo set è un superset del secondo set.
- <> restituisce vero se due insiemi non sono identici.
- IN restituisce vero se un elemento è incluso nel set.
Ecco un esempio:
La procedura ShowMessage verrà eseguita? In tal caso, cosa verrà visualizzato?
Ecco l'implementazione della funzione DisplayElements:
Suggerimento: si. Visualizzato: "18 | 24 |".
Numeri interi, Personaggi, Booleani
Naturalmente, quando si creano tipi di set, non si è limitati ai valori interi. I tipi ordinali di Delphi includono caratteri e valori booleani.
Per impedire agli utenti di digitare i tasti alfabetici, aggiungere questa riga in OnKeyPress di un controllo di modifica:
Imposta con enumerazioni
Uno scenario comunemente usato nel codice Delphi è quello di mescolare sia tipi enumerati che tipi di set.
Ecco un esempio:
Domanda: verrà visualizzato il messaggio? Risposta: no :(
Imposta in Proprietà controllo Delphi
Quando è necessario applicare "grassetto" al carattere utilizzato nei controlli TEdit, utilizzare la finestra di ispezione oggetti o il codice seguente:
La proprietà Stile del carattere è una proprietà di tipo set! Ecco come viene definito:
Pertanto, un tipo enumerato TFontStyle viene utilizzato come tipo base per il tipo set TFontStyles. La proprietà Style della classe TFont è di tipo TFontStyles, quindi una proprietà di tipo set.
Un altro esempio include il risultato della funzione MessageDlg. Una funzione MessageDlg viene utilizzata per visualizzare una finestra di messaggio e ottenere la risposta dell'utente. Uno dei parametri della funzione è il parametro Buttons di tipo TMsgDlgButtons.
TMsgDlgButtons è definito come un insieme di (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp).
Se visualizzi un messaggio all'utente contenente i pulsanti Sì, OK e Annulla e desideri eseguire un codice se fai clic sui pulsanti Sì o OK, puoi utilizzare il codice successivo:
Parola finale: i set sono fantastici. I set potrebbero apparire confusi con a Principiante Delphi, ma non appena inizierai a utilizzare le variabili di tipo set scoprirai che forniscono molto di più di quanto suonasse all'inizio.