LIST BOX – Dite addio al tasto Alt!

L’azione di trascinamento è un’azione standard nelle interfacce informatiche. Nel caso delle caselle di riepilogo, per spostare più elementi contemporaneamente è necessario premere il tasto “Alt”. O meglio “era” perché, a partire da 4D v19 R7, questo non è più un requisito necessario!

CASELLE DI ELENCO Possibilità di trascinamento

Un’interfaccia più semplice da usare

Per motivi tecnici e storici, questa operazione richiedeva la pressione del tasto “alt” sulla tastiera per spostare più elementi contemporaneamente. Questo obbligo appartiene ormai al passato. Si tratta di un miglioramento per l’utente, perché il nuovo comportamento è molto simile a quello utilizzato da macOS o Windows per gestire file e cartelle. Gli utenti non si confonderanno e questa azione sarà molto naturale!

E se…

Se gli utenti delle applicazioni esistenti sono abituati a premere il tasto alt durante il trascinamento, non c’è nulla di cui preoccuparsi. Il trascinamento funzionerà esattamente nello stesso modo. Il tasto alt verrà ignorato, a meno che non si programmi qualcosa che lo tenga in considerazione per qualsiasi altro scopo (ad esempio, se il tasto alt è abbassato, verrà eseguita la copia invece del semplice spostamento).

Prima conclusione

Il nuovo comportamento è più facile da usare perché imita i sistemi operativi e la maggior parte delle applicazioni funziona. Potremmo fermarci qui, ma cogliamo l’occasione per ricordare alcuni principi di funzionamento delle caselle di riepilogo, le loro proprietà e gli eventi che possono essere gestiti. Se siete interessati, continuate pure!

Modalità di selezione. Selezione multipla ed eventi

Tre possibili modalità di selezione

Le caselle di riepilogo hanno tre modalità di selezione determinate da una proprietà dell’elenco di proprietà.

  • Nessuna
  • Singola
  • Multipla

Due possibili modalità di selezione multipla.

È possibile selezionare più elementi utilizzando i tasti della tastiera .

  • Tenendo premuto il tasto shift, è possibile creare una selezione continua(ad esempio, da “Chloe” a “Mike”).
  • Tenendo premuto il tasto Ctrl( tastoCmd su macOS), è possibile creare una selezione discontinua(ad esempio: “Albert” e “John” e “Mike” e “Peter”).

Tre eventi

Durante il “trascinamento” è possibile gestire tre eventi.

  • on beginning drag over
  • on drag over
  • on drop

blank

Nota importante: questi eventi vengono attivati solo se le impostazioni delle azioni per trascinabile e rilasciabile sono impostate su personalizzate.

blank

1 – Il primo (on beginning drag over) viene attivato quando inizia il trascinamento nella casella di riepilogo “sorgente”. A questo punto, è necessario preparare “il passo successivo”, cioè guardare ciò che è stato selezionato e memorizzarlo in qualche modo. Ad esempio, può essere all’interno degli appunti o in una variabile del modulo. Si noti che questo evento viene attivato una sola volta.

If (Form event code=On Begin Drag Over)
 $drag:=New object
 // (…) put what you need in Form.drag object
 
 // put the object in a BLOB
 VARIABLE TO BLOB($drag; $blob)
 // and send the object to the PasteBoard with any signature (xxxx)
 APPEND DATA TO PASTEBOARD("xxxx"; $blob)
End if

2 – Il secondo (on drag over) viene attivato al passaggio del mouse su una casella di riepilogo, ma solo se è stato preceduto da un trascinamento iniziale o se è possibile far cadere qualsiasi altra cosa sulla casella di riepilogo.

Non è obbligatorio considerare questo evento, ma è vantaggioso perché permette di rifiutare una possibile “caduta” che potrebbe verificarsi in seguito.

Come fare? È sufficiente osservare il contenuto di ciò che è probabile che venga abbandonato. Se si è a posto con ciò che può essere lasciato cadere, si restituisce 0 (zero) in $0. Altrimenti, si restituisce -1 (meno uno), quindi il rilascio sarà rifiutato (e non sarà generato alcun evento “on drop”)

If (Form event code=On Drag Over)
 If (Pasteboard data size("xxxx")<=0)
  $0:=-1 //reject anything that does NOT contains what is expected
 Else
  $0:=0
 End if
End if

3 – Infine, il terzo (on the drop) viene generato, come indica il nome, nel momento in cui viene effettivamente eseguito un “drop” sulla listbox “target” (che può essere la stessa dell’origine).

Da quel momento in poi, è possibile verificare in quale posizione è stato effettuato il rilascio ed eseguire le operazioni necessarie a seconda del contenuto da rilasciare. Non dimenticate che la caduta non è necessariamente la conseguenza logica di un trascinamento da un’altra casella di riepilogo (o dalla casella di riepilogo stessa). Può anche trattarsi di un elemento esterno, persino esterno all’applicazione, come un file o una cartella dell’ambiente di sistema.

if(Form event code=On Drop)
 // read pasteboard content
 GET PASTEBOARD DATA("xxxx"; $blob)
 BLOB TO VARIABLE($blob; $drag)
 // do what you need to do with the object you got
  (…)
end if

Conclusione

Tutte queste informazioni sono contenute nell’esempio HDI, che vi invitiamo a scaricare per vedere un’implementazione pratica.

Buona codifica!

Roland Lannuzel
- Product Owner ed esperto di 4D - Dopo aver studiato elettronica, Roland è passato all'IT industriale come sviluppatore e consulente, realizzando soluzioni per i clienti con una varietà di database e tecnologie. Alla fine degli anni '80 si è innamorato di 4D e lo ha utilizzato per scrivere applicazioni aziendali che includono sistemi di contabilità, fatturazione e posta elettronica. Entrato a far parte dell'azienda nel 1997, Roland ha dato il suo prezioso contributo progettando specifiche, strumenti di test e demo, oltre a formare e parlare alla comunità 4D in occasione di numerose conferenze. Continua a plasmare attivamente il futuro di 4D definendo nuove funzionalità e strumenti di sviluppo di database.