Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ программа «Календарь»

Автор: Lis 12.10.2010 3:57

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

Мне нужно чтобы этого выделения не было на всех месяцах, хотя б на текущем, или вообще ни на каком.
Программку прикрепил..


Прикрепленные файлы
Прикрепленный файл  _________.rar ( 206.51 килобайт ) Кол-во скачиваний: 516

Автор: volvo 12.10.2010 5:21

Значит, смотри:

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 19.10.2010 3:00

Спасибо большое! то что надо =)

Автор: -Дмитрий- 29.03.2017 18:21

Цитата(Lis @ 19.10.2010 3:00) *

Спасибо большое! то что надо =)

программа не будет работать, 29,30,31 числа каждого месяцабудет видавать invalid argument to date encode
кто знает как єто исправить

Автор: is there a legitimate canadian p 29.08.2021 14:24

Cheap Doxycycline Online Uk

Автор: buy zithromax online without a p 5.12.2021 12:16

Priligy Tablets

Автор: hydroxychloroquine price walgree 6.12.2021 20:01

viagra original pas cher en la seyne-sur-mer

Автор: generic finasteride internationa 20.12.2021 4:51

Chlamydia Keflex

Автор: nishaknapp 16.01.2023 6:19

Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. https://ezwebblog.com/3-popular-online-casino-games-you-can-play-today/