Ver Mensaje Individual
  #4  
Antiguo 14-10-2004
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Reputación: 22
Tomás Va por buen camino
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
  //literal días de la semana en cabecera (coger de marzo de 2004 que empieza en lunes)
  for i := 0 to 6 do
    SGMes.Cells[i,0] := Copy(FormatDateTime('dddd',EncodeDate(2004,3,i+1)),1,7);
  //añadir al combo el literal de los meses (coger de cualquier año)
  for i := 1 to 12 do
    CBMes.Items.Add(FormatDateTime('mmmm',EncodeDate(2000,i,1)));
  //situarse en mes y año actual
  CBMes.ItemIndex := MonthOf(Date) - 1;
  SEAnio.Text := IntToStr(YearOf(Date));
end;

procedure TFMes.SEAnioKeyPress(Sender: TObject; var Key: Char);
begin
  //controlar entrada dígitos para año
  if ( StrScan('0123456789,'+chr(7)+chr(8), Key) = nil ) then
  begin
    Key := #0;
  end;
end;

//evento OnChange del ComboBox y del SpinEdit
procedure TFMes.SEAnioChange(Sender: TObject);
var
  iDiasemana : integer;
  i, j, iAnio: integer;
  iFila, iColum : integer;
begin
  //controlar entrada año no sea 0 ni blanco
  iAnio := StrToInt('0'+SEAnio.Text);
  if iAnio = 0 then
    iAnio := 1;
  //limpiar SGrid
  for i := 1 to 7 do
    for j := 1 to 7 do
      SGMes.Cells[j-1,i] := ' ' ;
  //mes y año en label título
  LMesAno.Caption := CBMes.Text + '  ' + IntToStr(iAnio);
  //ver qué día de la semana es el día 1 del mes pedido (restar 1 porque semana empieza en domingo)
  iDiasemana := DayOfWeek(EncodeDate(iAnio, CBMes.ItemIndex + 1, 1)) - 1;
  //porque domingo es el 7
  if iDiasemana = 0 then
    iDiasemana := 7;
  //valores iniciales de fila y columna
  iFila := 1;
  iColum := iDiasemana - 1 ;
  //relleno stringgrid con bucle for hasta total días que tiene el mes pedido
  for i := 1 to DaysInAMonth(iAnio, CBMes.ItemIndex + 1) do
    begin
      SGMes.Cells[iColum,iFila] := IntToStr(i);
      //controlar cambio de fila
      iColum := iColum + 1;
      if iColum = 7 then
        begin
          iFila := iFila + 1;
          iColum := 0;
        end;
    end;
end;
Responder Con Cita