Se il software che state sviluppando per un dispositivo mobile compie un'operazione lunga, potete mostrare sullo schermo una clessidra - l'Hourglass dell'oggetto di questo post. Con Windows Mobile 5.0, questa clessidra in realtà è un piccolo cerchio centrato sullo schermo, diviso in 4 settori colorati (rosso/giallo/blu/verde). Ovviamente tale clessidra non è modale, perciò il vostro codice prosegue l'esecuzione fino a quando non siete voi a decidere che la clessidra non è più necessaria. Un'altra piccola precisazione: su palmari non avete il concetto di puntatore del mouse, perciò non potete fare quello che è possibile con il .NET Framework standard, ovvero cambiare il puntatore solo su un controllo che volete voi. Difatti, la visualizzazione della clessidra è consentita solo al centro dello schermo.
Come farlo nelle vostre applicazioni per palmari? Seguite la ricetta che ho preparato per voi.
Ingredienti per uno sviluppatore (difficoltà bassa)
Una costante di tipo int
Due funzioni extern static importate dalla coredll.dll
Una funzione managed con un parametro di tipo bool e ritorna void
Preparazione
Prendete una Windows Form, e dichiarate quanto segue:
private const int HourGlassCursorID = 32514;
[DllImport("coredll.dll")]
private extern static int LoadCursor(int zeroValue, int cursorID);
[DllImport("coredll.dll")]
private extern static int SetCursor(int cursorHandle);
Lasciar cuocere 1 minuto a fuoco lento. La costante è di tipo int e deve valere 32514, equivalente a 0x7F02. Poi vengono dichiarate due funzioni extern, tramite P/Invoke, entrambe definite nella library coredll.dll. La funzione LoadCursor carica un cursore dato un cursorID; il cursore viene ritornato da un tipo int che è un cursorHandle.
Quello che manca è la funzione managed:
private void ShowWaitCursor(bool ShowCursor)
{
int cursorHandle = 0;
if (ShowCursor)
{
cursorHandle = LoadCursor(0, HourGlassCursorID);
}
SetCursor(cursorHandle);
}
Dare una mescolata con un cucchiaio di legno. La vostra applicazione può tranquillamente utilizzare la funzione ShowWaitCursor per visualizzare/nascondere la clessidra sul display del palmare. Attenzione, come dicevo prima, la clessidra, indipendentemente dalla forma che assume, non è modale, perciò, per esempio, potete scrivere quanto segue:
private void btnMioBottone_Click(object sender, EventArgs e)
{
ShowWaitCursor(true);
/* Faccio 1.000 cose che durano un po' */
ShowWaitCursor(false);
}
Ricordatevi sempre ed in ogni caso di disattivare la clessidra, altrimenti questa rimane visibile sullo schermo anche se l'applicazione continua a funzionare regolarmente, ma disturbando notevolmente la digestione dell'utente.
Da servire freddo, magari con un buon vino del Friuli. :-)
Buon appetito.