IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> программа «Календарь», показывающую любой день любого месяца любого года
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Sergey

Репутация: -  0  +


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

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


Прикрепленные файлы
Прикрепленный файл  _________.rar ( 206.51 килобайт ) Кол-во скачиваний: 162
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Значит, смотри:
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, вообще можешь убрать - я его не использовал.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской
Реальное имя: Sergey

Репутация: -  0  +


Спасибо большое! то что надо =)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

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

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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 26.06.2018 0:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"