Hola:
Form (FMes) con:
- Label (LMesAno) para el mes y año
- StringGrid (SGMes) con 7 filas y 7 columnas, la primera fila para los nombres de los dias de la semana.
- ComboBox (CBMes) para los nombres de los meses
- SpinEdit (SPAnio) para el año
Y este código (la nota del examen la mitad para mi...).
Código Delphi
[-]
procedure TFMes.FormCreate(Sender: TObject);
var
i : integer;
begin
for i := 0 to 6 do
SGMes.Cells[i,0] := Copy(FormatDateTime('dddd',EncodeDate(2004,3,i+1)),1,7);
for i := 1 to 12 do
CBMes.Items.Add(FormatDateTime('mmmm',EncodeDate(2000,i,1)));
CBMes.ItemIndex := MonthOf(Date) - 1;
SEAnio.Text := IntToStr(YearOf(Date));
end;
procedure TFMes.SEAnioKeyPress(Sender: TObject; var Key: Char);
begin
if ( StrScan('0123456789,'+chr(7)+chr(8), Key) = nil ) then
begin
Key := #0;
end;
end;
procedure TFMes.SEAnioChange(Sender: TObject);
var
iDiasemana : integer;
i, j, iAnio: integer;
iFila, iColum : integer;
begin
iAnio := StrToInt('0'+SEAnio.Text);
if iAnio = 0 then
iAnio := 1;
for i := 1 to 7 do
for j := 1 to 7 do
SGMes.Cells[j-1,i] := ' ' ;
LMesAno.Caption := CBMes.Text + ' ' + IntToStr(iAnio);
iDiasemana := DayOfWeek(EncodeDate(iAnio, CBMes.ItemIndex + 1, 1)) - 1;
if iDiasemana = 0 then
iDiasemana := 7;
iFila := 1;
iColum := iDiasemana - 1 ;
for i := 1 to DaysInAMonth(iAnio, CBMes.ItemIndex + 1) do
begin
SGMes.Cells[iColum,iFila] := IntToStr(i);
iColum := iColum + 1;
if iColum = 7 then
begin
iFila := iFila + 1;
iColum := 0;
end;
end;
end;