Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Calendario


Question

Dias de 31 ou 29 no bisexto gera erro."Invalid argument to date encode".
alguém pode dar uma ajuda a contornar isso?


procedure TFormAgenda.ScrollBar1Change(Sender: TObject);
begin
     if ScrollBar1.Position=1 Then
      Panel1.Caption:='Janeiro'
     Else if ScrollBar1.Position=2 Then
      Panel1.Caption:='Fevereiro'
     Else if ScrollBar1.Position=3 Then
      Panel1.Caption:='Março'
     Else if ScrollBar1.Position=4 Then
      Panel1.Caption:='Abril'
     Else if ScrollBar1.Position= 5 Then
      Panel1.Caption:='Maio'
     Else if ScrollBar1.Position=6 Then
      Panel1.Caption:='Junho'
     Else if ScrollBar1.Position=7 Then
      Panel1.Caption:='Julho'
     Else if ScrollBar1.Position=8 Then
      Panel1.Caption:='Agosto'
     Else if ScrollBar1.Position=9 Then
      Panel1.Caption:='Setembro'
     Else if ScrollBar1.Position=10 Then
      Panel1.Caption:='Outubro'
     Else if ScrollBar1.Position=11 Then
      Panel1.Caption:='Novembro'
     Else if ScrollBar1.Position=12 Then
      Panel1.Caption:='Dezembro';
     if ScrollBar1.Position=13 Then begin
      ScrollBar1.Position:=1;
       Panel3.Caption:=FloatToStr(StrToFloat(Panel3.Caption)+1);
       
        end;
     if ScrollBar1.Position=0 Then begin
      ScrollBar1.Position:=12;
       Panel3.Caption:=FloatToStr(StrToFloat(Panel3.Caption)-1);
        end;
     Calendar1.Month:=ScrollBar1.Position;
   Calendar1.Year:=StrToInt(Panel3.Caption);
end;

 

Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Voce não respondeu a minha pergunta....

O erro ocorre nessas linhas ?

     Calendar1.Month:=ScrollBar1.Position;
   Calendar1.Year:=StrToInt(Panel3.Caption);
"Argumento inválido para codificação de data".

significa que voce esta tentanto atribuir um valor invalido para a data

 

Link to post
Share on other sites
  • 0
11 horas atrás, Jhonas disse:

Voce não respondeu a minha pergunta....

O erro ocorre nessas linhas ?

     Calendar1.Month:=ScrollBar1.Position;
   Calendar1.Year:=StrToInt(Panel3.Caption);
"Argumento inválido para codificação de data".

significa que voce esta tentanto atribuir um valor invalido para a data

 

Sim,mas terá um jeito de ultrapassar isso? estou por exemplo com uma data de 31 seleccionada no Calendar e avanço para o més seguinte no scrollbar que será de 30 dias, como o 31 não existe no més dá erro. Como contorno isso? Ao avançar para o més seguinte se for de 30.

Link to post
Share on other sites
  • 0

Acho que é isso que voce está querendo fazer

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin

     if ScrollBar1.Position=1 Then
      Panel1.Caption:='Janeiro'
     Else if ScrollBar1.Position=2 Then
      Panel1.Caption:='Fevereiro'
     Else if ScrollBar1.Position=3 Then
      Panel1.Caption:='Março'
     Else if ScrollBar1.Position=4 Then
      Panel1.Caption:='Abril'
     Else if ScrollBar1.Position= 5 Then
      Panel1.Caption:='Maio'
     Else if ScrollBar1.Position=6 Then
      Panel1.Caption:='Junho'
     Else if ScrollBar1.Position=7 Then
      Panel1.Caption:='Julho'
     Else if ScrollBar1.Position=8 Then
      Panel1.Caption:='Agosto'
     Else if ScrollBar1.Position=9 Then
      Panel1.Caption:='Setembro'
     Else if ScrollBar1.Position=10 Then
      Panel1.Caption:='Outubro'
     Else if ScrollBar1.Position=11 Then
      Panel1.Caption:='Novembro'
     Else if ScrollBar1.Position=12 Then
      Panel1.Caption:='Dezembro';

     if ScrollBar1.Position=13 Then
     begin
        ScrollBar1.Position:=1;
        Calendar1.Year := Calendar1.Year+1;
     end;

     if ScrollBar1.Position=0 Then
     begin
        ScrollBar1.Position:=12;
        Calendar1.Year := Calendar1.Year-1;
     end;

     Calendar1.Month:=ScrollBar1.Position;
     Panel3.Caption:= inttostr(Calendar1.Year);
end;

abraço

Link to post
Share on other sites
  • 0
5 horas atrás, Jhonas disse:

Acho que é isso que voce está querendo fazer

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin

     if ScrollBar1.Position=1 Then
      Panel1.Caption:='Janeiro'
     Else if ScrollBar1.Position=2 Then
      Panel1.Caption:='Fevereiro'
     Else if ScrollBar1.Position=3 Then
      Panel1.Caption:='Março'
     Else if ScrollBar1.Position=4 Then
      Panel1.Caption:='Abril'
     Else if ScrollBar1.Position= 5 Then
      Panel1.Caption:='Maio'
     Else if ScrollBar1.Position=6 Then
      Panel1.Caption:='Junho'
     Else if ScrollBar1.Position=7 Then
      Panel1.Caption:='Julho'
     Else if ScrollBar1.Position=8 Then
      Panel1.Caption:='Agosto'
     Else if ScrollBar1.Position=9 Then
      Panel1.Caption:='Setembro'
     Else if ScrollBar1.Position=10 Then
      Panel1.Caption:='Outubro'
     Else if ScrollBar1.Position=11 Then
      Panel1.Caption:='Novembro'
     Else if ScrollBar1.Position=12 Then
      Panel1.Caption:='Dezembro';

     if ScrollBar1.Position=13 Then
     begin
        ScrollBar1.Position:=1;
        Calendar1.Year := Calendar1.Year+1;
     end;

     if ScrollBar1.Position=0 Then
     begin
        ScrollBar1.Position:=12;
        Calendar1.Year := Calendar1.Year-1;
     end;

     Calendar1.Month:=ScrollBar1.Position;
     Panel3.Caption:= inttostr(Calendar1.Year);
end;

abraço

  Teste assim ,data 31 de Agosto seleccionada no Calendar e avançe para o més seguinte no scrollbar que será Setembro  de 30 dias, como o 31 não existe no més  de Setembro dá erro.

Link to post
Share on other sites
  • 0
3 horas atrás, António44 disse:

  Teste assim ,data 31 de Agosto seleccionada no Calendar e avançe para o més seguinte no scrollbar que será Setembro  de 30 dias, como o 31 não existe no més  de Setembro dá erro.

Resolvido;

  
     if ScrollBar1.Position=1 Then
      Panel1.Caption:='Janeiro'
     Else if ScrollBar1.Position=2 Then
      Panel1.Caption:='Fevereiro'
     Else if ScrollBar1.Position=3 Then
      Panel1.Caption:='Março'
     Else if ScrollBar1.Position=4 Then
      Panel1.Caption:='Abril'
     Else if ScrollBar1.Position= 5 Then
      Panel1.Caption:='Maio'
     Else if ScrollBar1.Position=6 Then
      Panel1.Caption:='Junho'
     Else if ScrollBar1.Position=7 Then
      Panel1.Caption:='Julho'
     Else if ScrollBar1.Position=8 Then
      Panel1.Caption:='Agosto'
     Else if ScrollBar1.Position=9 Then
      Panel1.Caption:='Setembro'
     Else if ScrollBar1.Position=10 Then
      Panel1.Caption:='Outubro'
     Else if ScrollBar1.Position=11 Then
      Panel1.Caption:='Novembro'
     Else if ScrollBar1.Position=12 Then
      Panel1.Caption:='Dezembro';
     if ScrollBar1.Position=13 Then begin
      ScrollBar1.Position:=1;
       Panel3.Caption:=FloatToStr(StrToFloat(Panel3.Caption)+1);
        end;
     if ScrollBar1.Position=0 Then begin
      ScrollBar1.Position:=12;
       Panel3.Caption:=FloatToStr(StrToFloat(Panel3.Caption)-1);
        end;
Calendar1.NextMonth; Usando assim funciona na perfeição
     //Calendar1.Month:=ScrollBar1.Position;>>>>>>Retirado
   Calendar1.Year:=StrToInt(Panel3.Caption);

end;

Obrigado.

Link to post
Share on other sites
  • 0

Ok ... mas observe os dias dos meses seguintes ( o dia que está selecionado ... exemplo:

31 de janeiro para o dia 28 de Fevereiro

28 de Fevereiro para o dia 31 de Março

31 de Março para o dia 30 de Abril

o código a seguir, soluciona esse problema ... se quiser usá-lo

var
  Form1: TForm1;
  dd : integer = 0;
  dia : integer = 0;
implementation

{$R *.dfm}

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin

     if ScrollBar1.Position=1 Then
      Panel1.Caption:='Janeiro'
     Else if ScrollBar1.Position=2 Then
      Panel1.Caption:='Fevereiro'
     Else if ScrollBar1.Position=3 Then
      Panel1.Caption:='Março'
     Else if ScrollBar1.Position=4 Then
      Panel1.Caption:='Abril'
     Else if ScrollBar1.Position= 5 Then
      Panel1.Caption:='Maio'
     Else if ScrollBar1.Position=6 Then
      Panel1.Caption:='Junho'
     Else if ScrollBar1.Position=7 Then
      Panel1.Caption:='Julho'
     Else if ScrollBar1.Position=8 Then
      Panel1.Caption:='Agosto'
     Else if ScrollBar1.Position=9 Then
      Panel1.Caption:='Setembro'
     Else if ScrollBar1.Position=10 Then
      Panel1.Caption:='Outubro'
     Else if ScrollBar1.Position=11 Then
      Panel1.Caption:='Novembro'
     Else if ScrollBar1.Position=12 Then
      Panel1.Caption:='Dezembro';

     if ScrollBar1.Position=13 Then
     begin
        ScrollBar1.Position:=1;
        Calendar1.Year := Calendar1.Year+1;
     end;

     if ScrollBar1.Position=0 Then
     begin
        ScrollBar1.Position:=12;
        Calendar1.Year := Calendar1.Year-1;
     end;


     case ScrollBar1.Position of
     2 :
        case Calendar1.Day of
          29: Calendar1.Day := Calendar1.Day-1;
          30: Calendar1.Day := Calendar1.Day-2;
          31: Calendar1.Day := Calendar1.Day-3;
        end;

     4,6,9,11 :
        case Calendar1.Day of
          31: Calendar1.Day := Calendar1.Day-1;
        end;

     end;

     Calendar1.Month:=ScrollBar1.Position;
     Panel3.Caption:= inttostr(Calendar1.Year);

     case Calendar1.Month of
      4,6,9,11 : Calendar1.Day := dia;
      1,3,5,7,8,10,12 : Calendar1.Day := dia;
     end;

end;

procedure TForm1.Calendar1Click(Sender: TObject);
begin
   if dd = 0 then
      begin
        dia := Calendar1.Day;
        dd := 1;
      end;
end;

procedure TForm1.Calendar1Exit(Sender: TObject);
begin
   if dd = 1 then
      dia := Calendar1.Day;
   dd := 0; 
end;

abraço

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148681
    • Total Posts
      644506
×
×
  • Create New...