Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: tiberi72 - Febbraio 09, 2012, 03:56:12 pm

Titolo: gestione delle date con tedit
Inserito da: tiberi72 - Febbraio 09, 2012, 03:56:12 pm
A volte mi vergogno anche delle domande che faccio, ma purtroppo sono causate dalla mia inesperienza con il programma :( :( :(.
Vorrei gestire campo tedit per inputare una data, ma dovrei assegnargli una maschera che me lo formatti in questa maniera: GG/MM/AAAA (sia in modifica del campo che in visualizzazione)
Come posso fare?
Titolo: Re:gestione delle date con tedit
Inserito da: xinyiman - Febbraio 09, 2012, 04:02:59 pm
Nella Tab "Misc" trovi l'oggetto TDateEdit che dovrebbe risolvere egregiamente quello che chiedi!
Titolo: Re:gestione delle date con tedit
Inserito da: tiberi72 - Febbraio 09, 2012, 04:18:00 pm
Mille grazie. Secondo te per i controlli sul secolo (ad esempio se inserisco 11/11/11 vorrei che all'uscita del campo scrivesse in automatico 11/11/2011, oppure se scrivo 13/13/13 vorrei che all'uscita del campo segnalasse un errore) devo impostare qualche proprieta' del campo oppure e' meglio svilupparci attorno un po' di codice?
Titolo: Re:gestione delle date con tedit
Inserito da: xinyiman - Febbraio 09, 2012, 05:17:48 pm
Ipotizziamo che l'oggetto si chiama DateEdit1 sull'evento Exit (puoi farlo anche sull'evento change). Io farei così


procedure TForm1.DateEdit1Exit(Sender: TObject);
begin
  DateEdit1.Text:=FormatDateTime('DD/mm/YY', DateEdit1.Date);
end;
Titolo: Re:gestione delle date con tedit
Inserito da: tiberi72 - Febbraio 10, 2012, 10:55:55 am
Ti confermo che funziona, anche se in realta' mi risolve il mio problema solo in parte.
In pratica io vorrei scrivere la data sul campo sia nel formato a due cifre che nel formato a 4 cifre, ma quando esco dal campo vorrei ritrovare sempre il campo a 4 cifre.
Utilizzando la riga di codice che hai scritto e mettendo DD/mm/YYYY, quando inserisco la data 01/03/12,  il programma scrive sul campo la data 01/03/0012 e non 01/03/2012
C'e' un modo per digitare la data a 2 cifre ma ritrovarmi sempre la data a 4 cifre con il secolo corretto?
Titolo: Re:gestione delle date con tedit
Inserito da: xinyiman - Febbraio 10, 2012, 10:59:45 am
mmmmmmmmmmmmmh non saprei...dovrei guardare un pochino!
Titolo: Re:gestione delle date con tedit
Inserito da: xinyiman - Febbraio 10, 2012, 02:32:00 pm
Prova a scrivere la seguente riga di codice al caricamento del progetto, in parole povere vai a cambiare il formato della data come vuoi tu per tutto il progetto.     

ShortDateFormat:='dd/mm/yyyy';  {http://www.freepascal.org/docs-html/rtl/sysutils/shortdateformat.html}

La lista di altre variabili simili le trovi qui:
http://www.freepascal.org/docs-html/rtl/sysutils/index-6.html


Titolo: Re:gestione delle date con tedit
Inserito da: tiberi72 - Febbraio 10, 2012, 04:33:53 pm
Cosi' sembra che funzioni senza la mask (sulla proprieta' dateorder devo mettere doNone).
C'e' la possibilita di inserire una mask di inserimento in modo che posso inserire in automatico anche i separatori?
Titolo: Re:gestione delle date con tedit
Inserito da: xinyiman - Febbraio 10, 2012, 04:36:19 pm
Bho mai fatto, dovrei provare! Spiegami bene cosa vuoi ottenere!
Titolo: Re:gestione delle date con tedit
Inserito da: tiberi72 - Febbraio 10, 2012, 06:20:48 pm
devo inserire la data, ma vorrei lasciare gli spazi prefissati ("  /  /    ").
In pratica la stessa cosa che fa con dateorder doDMY, solo che se lascio dateorder attivo poi non funziona il controllo che sto facendo per la gestione dell'anno a 2 e a 4 cifre
Titolo: Re:gestione delle date con tedit
Inserito da: tiberi72 - Febbraio 10, 2012, 08:31:14 pm
ciao, ti volevo segnalare che ho risolto inserendo, oltre alla riga che mia hai suggerito sull'apertura della form, anche questo codice sull'evento Onexit
Codice: [Seleziona]
if Pos('/', VDaData.Text) = 0 then
  begin
     if (length(trim(VDaData.Text)) = 8) or (length(trim(VDaData.Text)) = 6) then
     begin
        VDaData.Text:= trim(copy(VDaData.Text,1,2) + '/' + copy(VDaData.Text,3,2) + '/' + copy(VDaData.Text+'  ',5,4));
        VDaData.date:=strtodate(VDaData.Text);
     end
     else
     begin
       ShowMessage('Data non corretta! Inserisci i caratteri "/" e digita correttamente la data nel formato gg/mm/aaaa');
       Exit;
     end;
  end;
  VDaData.Text:=FormatDateTime('DD/mm/YYYY', VDaData.date);
Ti chiedevo un'ultima cortesia poi cerchero di non pressarti piu' sulle date: se io inserisco una data errata (ad esempio 22/22/2222) il sistema mi genera un'errore exception
Come faccio ad intercettare questo errore ed eventualmente dare un messaggio di errore non valido che non faccia terminare il programma (ad esempio:
Codice: [Seleziona]
       ShowMessage('Data non corretta!');
       Exit;
)?
Titolo: Re:gestione delle date con tedit
Inserito da: xinyiman - Febbraio 10, 2012, 10:57:52 pm
Guarda questo:

http://www.lazaruspascal.it/index.php?page=83

Funziona però solo sull'eseguibile. In fase di debug ti segnala l'errore.