Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [delphi] - MaskEdit

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    [delphi] - MaskEdit

    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    nessuno mi risponde

    aiutoooooooooooooooooooooooooooooo

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    ciao,

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

    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    potresi essere piu preciso

    .. con un esempio??

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    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.


  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    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:
    codice:
      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):
    codice:
    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:
    codice:
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.