PDA

Visualizza la versione completa : [delphi] - MaskEdit


cla80
09-05-2004, 10:20
Ho un MaskEdit con InputMask = ShortTime ossia ho una maskedit con solo il campo ora: es. __.__ le 10.18 .

Ora il mio problema è realizzare una sorta di controllo su di esso al fine che l'utente non possa inserire un orario non corretto.

Es. 1_.18 qui dovrebbe dare errore perchè non è stato inserito l'orario correttamente

Es. 45.52 qui dovrebbe dare errore perchè non esiste l'ora 45 e 52 minuti.

ecc. ecc.

COME FARE??

AIUTOOOOOO.

cla80
09-05-2004, 12:08
aiutoooooooooooooooooooooooooooooo

123delphi321
09-05-2004, 12:15
ciao,

credo che tu possa agire sull'evento OnExit del maskedit o in alternativa potresti usare un controllo DateTimePicker.

ciao

cla80
09-05-2004, 12:52
.. con un esempio??

123delphi321
09-05-2004, 13:24
io ho avuto un problema simile al tuo legato, pero, alla data e non all'orario.

ho risolto inserendo il componente TDateTimePicker dalla palette win32.

se tu lo inserisci nel tuo form costringi l'utente ad inserire un orario valido, che non puo essere 45.52

per ottenere l'input di un orario devi settare la proprieta Kind dell'oggetto TdateTimePicker a dtkTime.

:ciauz:

alka
10-05-2004, 01:46
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:


TTimeForm = class(TForm)
private
FMyTime: TTime;
public
end;


Magari, si può inizializzare la variabile al momento della creazione del form usando l'ora corrente (oppure un valore caricato da un'altra sorgente):


procedure TTimeForm.FormCreate(Sender: TObject);
begin
FMyTime := Now;
TimeMaskEdit.Text := FormatDateTime('hh:nn', FMyTime);
end;


TimeMaskEdit è il controllo MaskEdit usato per l'input.

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:


procedure TTimeForm.TimeMaskEditExit(Sender: TObject);
begin
FMyTime := StrToTimeDef(TimeMaskEdit.Text, FMyTime);
TimeMaskEdit.Text := FormatDateTime('hh:nn', FMyTime);
end;

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.

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! :ciauz:

Loading