Помощь - Поиск - Пользователи - Календарь
Полная версия: программа «Календарь»
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Lis
Здравствуйте!
Нужно создать программу «Календарь», показывающую любой день любого месяца любого года.
У меня есть готовая программа, признаюсь что не я ее делал, т.к. совсем недавно начал делфи изучать, а задают уже такие задания где сразу не сообразишь а сроки короткие.. но я был бы рад если бы мне кто нибудь помог доработать ее совсем чуть.
Дело в том что при запуске программы она показывает текущий день выделяя квадратик, все бы ничего, но это на всех месяцах..
вот скрин:
http://xmages.net/show.php/1906218_123-jpg.html

Мне нужно чтобы этого выделения не было на всех месяцах, хотя б на текущем, или вообще ни на каком.
Программку прикрепил..
volvo
Значит, смотри:
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, вообще можешь убрать - я его не использовал.
Lis
Спасибо большое! то что надо =)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.