Ir ao conteúdo
  • Cadastre-se

Calendário com StringGrid


Posts recomendados

Olá, Boa tarde

 

Estou fazendo um programa de agendamentos e estava pensando em usar stringgrid para fazer o calendário e deixa-lo parecido com o do outlook, entretanto eu não sei como ajustar os dias da semana, por exemplo:

 

| dom | seg | ter | qua | qui | sex | sab |      => Nesse caso o primeiro dia do mês foi na segunda

              1      2      3

 

Achei um post num fórum onde a pessoa usou o monthcalendar e "passou" os dias para a stringgrid, mas ele só mostra o mês pré-determinado no código, que no caso era o mês de fevereiro de um ano bissexto. Eu até tentei mudar pra faze-lo passar o mês adiante a cada clique, mas como eu sou iniciante não sei muito bem como alterar isso. 

 

Link do fórum: 

 

http://www.delphipages.com/forum/showthread.php?t=83100

 

Agradeço desde já!  :)

Link para o comentário
Compartilhar em outros sites

Olá @New Nerd Bom dia

 

Eu peguei o exemplo do fórum que eu achei.

unit Agenda;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, XPMan, ComCtrls, ExtCtrls, StdCtrls, Menus, Mask, ActnMan,  ActnColorMaps, Grids, Buttons, DBCtrls;type  TFormAgenda = class(TForm)    StringGridCal: TStringGrid;    MonthCalendar1: TMonthCalendar;    BitBtn1: TBitBtn;    DBRichEditComp: TDBRichEdit;    LabelComp: TLabel;    procedure FormCreate(Sender: TObject);    procedure BitBtn1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  FormAgenda: TFormAgenda;implementationuses MenuPrincipal, ProjetoSistemaTCC;{$R *.dfm}procedure TFormAgenda.FormCreate(Sender: TObject);beginend;procedure TFormAgenda.BitBtn1Click(Sender: TObject);vardays: array[0..6] of string;i, iNumDays, iDay: Integer;iRowCtr, iColCtr: Integer;begindays[0] := 'Sun';days[1] := 'Mon';days[2] := 'Tue';days[3] := 'Wed';days[4] := 'Thu';days[5] := 'Fri';days[6] := 'Sat';with StringGridCal dobeginfor i := 0 to 6 doCells[i, 0] := days[i]end;// pegar o número de diasiNumDays := MonthDays[IsLeapYear(2016), 2];ShortDateFormat := 'dd/mm/yyyy';iDay := DayOfWeek(StrToDate('01/02/2016'));iRowCtr := 1;iColCtr := iDay - 1;for i := 1 to iNumDays dobeginStringGridCal.Cells[iColCtr, iRowCtr] := IntToStr(i);Inc(iColCtr);if iColCtr > 6 thenbeginiColCtr := 0;Inc(iRowCtr);end;end;end;end.

UlvWN6b.png?1

 

 

Quando executo ele, a StringGrid vem vazia e só "pega" os dias quando se aperta o botão.

Se eu ver que estiver muito complexo, vou tentar fazer essa agenda de outro jeito porque tenho outra tela que ainda não fiz e não tenho muito tempo disponível até entregar esse projeto.

Ta bem simples porque eu ainda to aprendendo, então releve as noobices.

 

Obrigada pela resposta :D

Link para o comentário
Compartilhar em outros sites

Boa Tarde,

 

Fiz algumas alterações e criei um procedimento utilizando o código que preenche o grid; assim podendo passar  o mês e o ano através de variaveis e cada click no botão muda

o mês no grid.

Espere que ajude, boa sorte!

unit Agenda;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, XPMan, ComCtrls, ExtCtrls, StdCtrls, Menus, Mask, ActnMan,  ActnColorMaps, Grids, Buttons, DBCtrls;type  TFormAgenda = class(TForm)    StringGridCal: TStringGrid;    MonthCalendar1: TMonthCalendar;    BitBtn1: TBitBtn;    DBRichEditComp: TDBRichEdit;    LabelComp: TLabel;    procedure FormCreate(Sender: TObject);    procedure BitBtn1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  FormAgenda: TFormAgenda;  Meses: Integer = 1; //Variavel global para contar passagem pelos mesesimplementationuses MenuPrincipal, ProjetoSistemaTCC;{$R *.dfm}procedure Dias(Mes: Integer; Ano: Integer);vardays: array[0..6] of string;x, i, iNumDays, iDay: Integer; //Acrescentada variavel x para loop...iRowCtr, iColCtr: Integer;begin//Loops para limpar celulas do Grid antes de preencher o proximo mes, pode ser removido para ver o que ocorre.    for x := 0 to 6 do begin        FormAgenda.StringGridCal.Cells[x, 1] := '';    end;    for x := 0 to 6 do begin        FormAgenda.StringGridCal.Cells[x, 5] := '';    end;//////////////days[0] := 'Sun';days[1] := 'Mon';days[2] := 'Tue';days[3] := 'Wed';days[4] := 'Thu';days[5] := 'Fri';days[6] := 'Sat';with FormAgenda.StringGridCal dobeginfor i := 0 to 6 doCells[i, 0] := days[i]end;// pegar o número de diasiNumDays := MonthDays[IsLeapYear(Ano), Mes]; //Modifiquei aqui >ShortDateFormat := 'dd/mm/yyyy';iDay := DayOfWeek(StrToDate('01/'+IntToStr(Mes)+'/'+IntToStr(Ano)));  //E aqui para receber as variaveis Ano e MêsiRowCtr := 1;iColCtr := iDay - 1;for i := 1 to iNumDays dobeginFormAgenda.StringGridCal.Cells[iColCtr, iRowCtr] := IntToStr(i);Inc(iColCtr);if iColCtr > 6 thenbeginiColCtr := 0;Inc(iRowCtr);end;end;end;procedure TFormAgenda.FormCreate(Sender: TObject);beginDias(1,2015); //Ano e mês desejado para preencher o grid assim que iniciar.end;procedure TFormAgenda.BitBtn1Click(Sender: TObject);beginInc(Meses); //Soma 1 a variavel meses, Cada click mostra o próximo mês.if Meses >= 13 then Meses := 1;Dias(Meses,2015); //Agora ainda terá de decidir como será definido o ano.//Poderá utilizar uma varaivel no lugar onde está escrito 2015 para passar o ano para//o procedimento que escreverá no grid.end;
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...