Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2011, 06:24   #1
Стелс
Я с вами :-)
Форумчанин
 
Аватар для Стелс
 
Регистрация: 19.10.2008
Сообщений: 110
По умолчанию Календарь

Суть вопроса : при прокрутке календаря вперед даты соответствуют дням недели но при обратном отсчете какая то билиберда получается вот прошу помощи подсказать где я ошибиться мог

Код:
StringGrid1: TStringGrid;
    Button4: TButton;
    Button5: TButton;

    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);

var
  Form1: TForm1;
  d_R:integer=0;
  d_L:integer=0;
  S:integer=31;
  Year:integer=2012;

 const
 stDay : array[1..7] of string[2] = ('Вс','Пн','Вт',
                                       'Ср','Чт','Пт','Сб');
  stMonth : array[1..12] of string[8] = ('Январь','Февраль','Март',
                                          'Апрель','Май','Июнь','Июль',
                                          'Август','Сентябрь','Октябрь',
                                          'Ноябрь','Декабрь');
ИЗВИНЯЮСЬ упустил вам выложить еще кусочек
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Код:
  Rect: TRect; State: TGridDrawState);
begin
 StringGrid1.ColCount :=S;
end;
Код:
 
procedure TForm1.Button4Click(Sender: TObject);//листаем вперед
var
C:integer;
begin
 if (stMonth[d]='Февраль')then S :=28+ord(IsLeapYear(year));
 if (stMonth[d]='Январь')or(stMonth[d]='Март')or(stMonth[d]='Май')or
    (stMonth[d]='Июль')or(stMonth[d]='Август')or(stMonth[d]='Октябрь')or
    (stMonth[d]='Декабрь')then S:=31;
 if (stMonth[d]='Апрель')or(stMonth[d]='Июнь')or(stMonth[d]='Сентябрь')or
    (stMonth[d]='Ноябрь')then S :=30;

for C:=0 to s  do begin
   Inc(d_R);
if d_R >7 then d_R:=1;
   StringGrid1.Cells[C,0]:=stDay[d_R];
   StringGrid1.Cells[C,1]:=Inttostr(C+1);
end;
 with StringGrid1 do begin
         if  Cells[s,0]= 'Пн' then d_R:=1;
         if  Cells[s,0]= 'Вт' then d_R:=2;
         if  Cells[s,0]= 'Ср' then d_R:=3;
         if  Cells[s,0]= 'Чт' then d_R:=4;
         if  Cells[s,0]= 'Пт' then d_R:=5;
         if  Cells[s,0]= 'Сб' then d_R:=6;
         if  Cells[s,0]= 'Вс' then d_R:=7;
           end;
end;

procedure TForm1.Button5Click(Sender: TObject);//листаем назад
var
C:integer;
begin
 if (stMonth[d]='Февраль')then S :=28+ord(IsLeapYear(year));
 if (stMonth[d]='Январь')or(stMonth[d]='Март')or(stMonth[d]='Май')or
    (stMonth[d]='Июль')or(stMonth[d]='Август')or(stMonth[d]='Октябрь')or
    (stMonth[d]='Декабрь')then S:=31;
 if (stMonth[d]='Апрель')or(stMonth[d]='Июнь')or(stMonth[d]='Сентябрь')or
    (stMonth[d]='Ноябрь')then S :=30;

//ВОТ С ЭТОГО МЕСТА КОДА И НАЧИНАЮТСЯ ВЕЛИКИЕ ГРАБЛИ

with StringGrid1 do begin
         if  Cells[0,0]= 'Пн' then d_R:=1;
         if  Cells[0,0]= 'Вт' then d_R:=2;
         if  Cells[0,0]= 'Ср' then d_R:=3;
         if  Cells[0,0]= 'Чт' then d_R:=4;
         if  Cells[0,0]= 'Пт' then d_R:=5;
         if  Cells[0,0]= 'Сб' then d_R:=6;
         if  Cells[0,0]= 'Вс' then d_R:=7;
           end;

for C:=S downto 0 do begin
 Dec(d_L);
if d_l <1 then d_l:=7;
  StringGrid1.Cells[C,0]:=stDay[d_L];
  StringGrid1.Cells[C,1]:=Inttostr(C+1);
end;
 end;

жду критики

Причина закрытия темы подробно описана в самом первом пункте правил раздела...
Там даже примеры приведены, как следует называть свою тему, а как не следует.
Так что увы...
٩(๏̯͡๏)۶٩(๏̯͡๏)۶٩(๏̯͡๏)۶ моя любимая книга - Окна for чайников . Кодить начал ещё вчера . ......кто там кодит ? Да не кто не кодит это я куякнулся

Последний раз редактировалось mihali4; 05.12.2011 в 01:41.
Стелс вне форума Ответить с цитированием
Старый 04.12.2011, 12:44   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

1. Две процедуры Button4Click - это ноу-хау?
2. В первой из них end не хватает
3. d где определено и где значение присваивается
4. DayOfWeek - функция определения дня недели
DayOfTheMonth - к-во дней в месяце
EncodeDate - получение даты из года, месяца, числа
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2011, 17:11   #3
Стелс
Я с вами :-)
Форумчанин
 
Аватар для Стелс
 
Регистрация: 19.10.2008
Сообщений: 110
По умолчанию

ну это я сюда часть своего кода копировал так что неточности исправил уже )
Вот там где Button5Click у меня тупик (о_О стихи )

Код:
//ВОТ С ЭТОГО МЕСТА КОДА И НАЧИНАЮТСЯ ВЕЛИКИЕ ГРАБЛИ

with StringGrid1 do begin
         if  Cells[0,0]= 'Пн' then d_R:=1; 
         if  Cells[0,0]= 'Вт' then d_R:=2;
         if  Cells[0,0]= 'Ср' then d_R:=3;
         if  Cells[0,0]= 'Чт' then d_R:=4;
         if  Cells[0,0]= 'Пт' then d_R:=5;
         if  Cells[0,0]= 'Сб' then d_R:=6;
         if  Cells[0,0]= 'Вс' then d_R:=7;
           end;

for C:=S downto 0 do begin
 Dec(d_L);
if d_l <1 then d_l:=7;
 StringGrid1.Cells[C,0]:=stDay[d_L];
end;
Ну и все же как заставить работать МОЙ код ???
٩(๏̯͡๏)۶٩(๏̯͡๏)۶٩(๏̯͡๏)۶ моя любимая книга - Окна for чайников . Кодить начал ещё вчера . ......кто там кодит ? Да не кто не кодит это я куякнулся

Последний раз редактировалось Стелс; 04.12.2011 в 17:21.
Стелс вне форума Ответить с цитированием
Старый 04.12.2011, 17:23   #4
Стелс
Я с вами :-)
Форумчанин
 
Аватар для Стелс
 
Регистрация: 19.10.2008
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
3. d где определено и где значение присваивается
на эту переменную не обращайте внимания с ней все в норме )
Код:
//глобальная 
d:integer=0;
//в обработчике батона 4 //листаем вперед
 Inc(d);
 if d > 12 then begin d := 1;Year:= (Year)+1;end;
//ну и в обработчике батона 5 только листаем назад Dec(d)
грабли там где я закапсил
٩(๏̯͡๏)۶٩(๏̯͡๏)۶٩(๏̯͡๏)۶ моя любимая книга - Окна for чайников . Кодить начал ещё вчера . ......кто там кодит ? Да не кто не кодит это я куякнулся

Последний раз редактировалось Стелс; 04.12.2011 в 17:58.
Стелс вне форума Ответить с цитированием
Старый 04.12.2011, 18:15   #5
Стелс
Я с вами :-)
Форумчанин
 
Аватар для Стелс
 
Регистрация: 19.10.2008
Сообщений: 110
По умолчанию

уточняю вопрос если месяц заканчивается Пн то следующий начинается со Вт например, и тд-это батон 4
соответственно если месяц начался со Вт то предыдущий кончился Пн-это батон 5
٩(๏̯͡๏)۶٩(๏̯͡๏)۶٩(๏̯͡๏)۶ моя любимая книга - Окна for чайников . Кодить начал ещё вчера . ......кто там кодит ? Да не кто не кодит это я куякнулся
Стелс вне форума Ответить с цитированием
Старый 04.12.2011, 18:19   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

1. Месяц назад
Код:
dec(d);
if d=0 then begin d:=12; Dec(Year); end;
2. День недели первого числа месяца
Код:
DayOfWeek(EncodeDate(Year,d,1));
1 - вскр, 2 - пон ... 7 - суб. Это короче и проще

3. К-во дней в месяце
Код:
DayOfTheMonth(EncodeDate(Year,d,1));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 04.12.2011 в 18:57.
Аватар вне форума Ответить с цитированием
Старый 04.12.2011, 18:52   #7
Стелс
Я с вами :-)
Форумчанин
 
Аватар для Стелс
 
Регистрация: 19.10.2008
Сообщений: 110
По умолчанию

спасибо все очень понятно сей час буду втыкать в свою прогу
вам +
٩(๏̯͡๏)۶٩(๏̯͡๏)۶٩(๏̯͡๏)۶ моя любимая книга - Окна for чайников . Кодить начал ещё вчера . ......кто там кодит ? Да не кто не кодит это я куякнулся
Стелс вне форума Ответить с цитированием
Старый 06.12.2011, 23:45   #8
Стелс
Я с вами :-)
Форумчанин
 
Аватар для Стелс
 
Регистрация: 19.10.2008
Сообщений: 110
По умолчанию

Свой код я всё же заставил функционировать )
Михалыч ,а что сразу красная карточка ,а не желтая ?
٩(๏̯͡๏)۶٩(๏̯͡๏)۶٩(๏̯͡๏)۶ моя любимая книга - Окна for чайников . Кодить начал ещё вчера . ......кто там кодит ? Да не кто не кодит это я куякнулся

Последний раз редактировалось Стелс; 06.12.2011 в 23:56.
Стелс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Календарь Tattoquardas Паскаль, Turbo Pascal, PascalABC.NET 5 02.12.2011 09:37
Календарь и БД svyatoi777 Помощь студентам 4 21.01.2011 20:40
Календарь mineralkaaa Общие вопросы Delphi 5 11.09.2010 01:28
КАЛЕНДАРЬ В С++ ange11o Общие вопросы C/C++ 0 02.06.2010 14:18
календарь mineralkaaa Помощь студентам 6 20.05.2010 13:21