Значит, смотри:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Grids, Calendar;
type
// Первое - определяем промежуточный класс с именем TCalendar (унаследованный
// от того типа, который описан в Дельфийском модуле Calendar, чтоб не регистрировать
// свой компонент), в котором будет нужный нам функционал. Конкретнее - подправим
// процедуру отрисовки ячейки.
// Этот класс должен обязательно быть описан ПЕРЕД классом формы, потому что
// в TForm1 уже используется тип TCalendar.Нсли я свой класс опишу ниже по тексту,
// то будет использовано то, что и так есть в модуле Calendar, и никаких изменений не будет.
TCalendar = class (Calendar.TCalendar)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override ;
constructor Create(AOwner: TComponent); override ;
published
{ Published declarations }
end ;
TForm1 = class (TForm)
Label13: TLabel;
SpinEdit1: TSpinEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Cal1: TCalendar;
Cal2: TCalendar;
Cal3: TCalendar;
Cal4: TCalendar;
Cal5: TCalendar;
Cal6: TCalendar;
Cal7: TCalendar;
Cal8: TCalendar;
Cal9: TCalendar;
Cal10: TCalendar;
Cal11: TCalendar;
Cal12: TCalendar;
procedure OnChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end ;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Собственно, реализация добавленных методов
constructor TCalendar.Create(AOwner: TComponent);
begin
DefaultDrawing := false;
inherited create(AOwner);
end ;
procedure TCalendar.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var
OldCanvas: TCanvas;
begin
inherited DrawCell(ACol, ARow, ARect, AState);
if (gdSelected in AState) then begin
OldCanvas := TCanvas.create;
try
OldCanvas.brush.color := canvas.brush.color;
OldCanvas.font.color := canvas.font.color;
canvas.brush.color := clWhite;
canvas.font.color := clBlack;
inherited DrawCell(ACol, ARow, ARect, AState);
canvas.font.color := OldCanvas.font.color;
canvas.brush.color := canvas.brush.color;
finally
OldCanvas.free;
end ;
end ;
end ;
// А это - то, что было у тебя, но чуть-чуть подправленное. Вместо Copy/Paste
// используются возможности Дельфи по нахождению компонентов на форме.
procedure TForm1.OnChange(Sender: TObject);
var
i: integer;
myCalend: TCalendar;
begin
for i := 1 to 12 do
begin
with Form1.FindComponent('Cal' + IntToStr(i)) as TCalendar do
begin
Year := SpinEdit1.Value; Month := i;
end ;
end ;
// Cal1.Year:=SpinEdit1.Value; Cal1.Month:=1;
// Cal2.Year:=SpinEdit1.Value; Cal2.Month:=2;
// Cal3.Year:=SpinEdit1.Value; Cal3.Month:=3;
// Cal4.Year:=SpinEdit1.Value; Cal4.Month:=4;
// Cal5.Year:=SpinEdit1.Value; Cal5.Month:=5;
// Cal6.Year:=SpinEdit1.Value; Cal6.Month:=6;
// Cal7.Year:=SpinEdit1.Value; Cal7.Month:=7;
// Cal8.Year:=SpinEdit1.Value; Cal8.Month:=8;
// Cal9.Year:=SpinEdit1.Value; Cal9.Month:=9;
// Cal10.Year:=SpinEdit1.Value; Cal10.Month:=10;
// Cal11.Year:=SpinEdit1.Value; Cal1.Month:=11;
end ;
procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
Cal1.UseCurrentDate:=True;
SpinEdit1.Value:=Cal1.Year;
Cal1.UseCurrentDate:=False;
for i := 1 to 12 do
with Form1.FindComponent('Cal' + IntToStr(i)) as TCalendar do
begin
Year := SpinEdit1.Value; Month := i;
end ;
// Cal1.Year:=SpinEdit1.Value; Cal1.Month:=1;
// Cal2.Year:=SpinEdit1.Value; Cal2.Month:=2;
// Cal3.Year:=SpinEdit1.Value; Cal3.Month:=3;
// Cal4.Year:=SpinEdit1.Value; Cal4.Month:=4;
// Cal5.Year:=SpinEdit1.Value; Cal5.Month:=5;
// Cal6.Year:=SpinEdit1.Value; Cal6.Month:=6;
// Cal7.Year:=SpinEdit1.Value; Cal7.Month:=7;
// Cal8.Year:=SpinEdit1.Value; Cal8.Month:=8;
// Cal9.Year:=SpinEdit1.Value; Cal9.Month:=9;
// Cal10.Year:=SpinEdit1.Value; Cal10.Month:=10;
// Cal11.Year:=SpinEdit1.Value; Cal11.Month:=11;
// Cal12.Year:=SpinEdit1.Value; Cal12.Month:=12;
end ;
end .
Вообще-то (по хорошему) надо бы вынести эти циклы в отдельный метод, но для начала пойдет и так.
Второй модуль, MyCalendar, вообще можешь убрать - я его не использовал.