Una soluzione molto pratica potrebbe essere quella di mantenere memorizzato il valore TTime in una variabile separata dalla casella di testo TMaskEdit usata per l'input.
Ad esempio, si potrebbe aggiungere un campo FMyTime alla dichiarazione del form affinchè contenga il valore dell'ora introdotta dall'utente:
Magari, si può inizializzare la variabile al momento della creazione del form usando l'ora corrente (oppure un valore caricato da un'altra sorgente):codice:TTimeForm = class(TForm) private FMyTime: TTime; public end;
TimeMaskEdit è il controllo MaskEdit usato per l'input.codice:procedure TTimeForm.FormCreate(Sender: TObject); begin FMyTime := Now; TimeMaskEdit.Text := FormatDateTime('hh:nn', FMyTime); end;
Sull'evento OnExit, puoi tentare di convertire il valore inserito dall'utente usando la funzione StrToTimeDef, la quale converte il valore dell'ora assegnando un valore di default in caso di errore; ovviamente, il valore di default sarà il valore precedente memorizzato nel campo FMyDate:
L'effetto del codice è quello di memorizzare l'ora se la conversione va a buon fine e di ripristinare nella casella di testo il valore dell'ora convertito; in caso di input non valido, il valore restituito da StrToTimeDef è quello precedente, pertanto sulla casella apparirà nuovamente tale valore.codice:procedure TTimeForm.TimeMaskEditExit(Sender: TObject); begin FMyTime := StrToTimeDef(TimeMaskEdit.Text, FMyTime); TimeMaskEdit.Text := FormatDateTime('hh:nn', FMyTime); end;
Il campo FMyTime è quello che dovrai considerare quando vorrai sapere l'ora introdotta dall'utente (senza leggere direttamente il contenuto della casella di testo "mascherata").
Se vuoi "tagliare la testa al toro", considera l'uso del TDateTimePicker così come ti è già stato suggerito.
Ciao!![]()

Rispondi quotando