Ajde ipak varijanta bez eventa, verovatno ce ti biti lakse.
Nisam probao, ali trebalo bi otprilike ovako:
Code:
uses Calendar;
type
TMojKalendar = class (TCalendar)
// znaci klasa TMojKalendar nasledjuje klasu TCalendar
protected
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: GridDrawState); override;
// znaci da "preklapas" metodu (proceduru objekta) DrawCell (koja inace iscrtava sadrzaj celije grid-a), odnosno dajes svoju implementaciju te metode
end;
procedure Register;
implementation
procedure TMojKalendar.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var CellDay : word; CellDate : TDate;
begin
// prvo pozoves nasledjenu DrawCell metodu koja ce iscrtati celiju
inherited;
// zatim izracunas datum celije koja se iscrtava
CellDay := strtoint (CellText[ACol, ARow]);
CellDate := EncodeDate (Year, Month, CellDay);
// pa ako treba precrtati
if TrebaPrecrtatiDan (CellDate)
then begin
// precrtas celiju
Canvas.Pen.Color := clRed;
Canvas.MoveTo (ARect.Left, ARect.Top);
Canvas.LineTo (ARect.Right, ARect.Bottom);
end;
end;
// Ova procedura registruje komponentu tj. postavlja ju na "Samples" stranicu palete
procedure Register;
begin
RegisterComponents('Samples', [TMojKalendar]);
end;
Treba jos da:
1. dodas svoju funkciju "TrebaPrecrtatiDan" koja vraca true ako ga treba precrtati.
2. napravs Delfi paket (file/new/package), u njega dodas ovaj unit i instaliras paket.