Текущий архив: 2003.11.27;
Скачать: CL | DM;
ВнизАлгоритм отображения календаря Найти похожие ветки
← →
nejest (2003-11-18 17:01) [0]Меня интересует, алгоритм отображения календаря в многострочном виде. В качестве входящих данных, имеется одномерный массив с числом элементов, равным числе дней в данном месяце, в ячейке хранится номер дня недели. Номера дней недели в таком соответствии:
1: Воскресенье
2: Понедельник
3: Вторник
4: Среда
5: Четверг
6: Пятница
7: Суббота
качастве выходных должен появитсякалендарь следующего вида:
пн вт ср чт пт вс
1 2
3 4 5 6 7 8
9 10 11 12 13 14
<тут поскипанно>
29 30
← →
NickBat (2003-11-18 17:09) [1]Скромненько. :))
Дабы совсем не облегчать тебе задачу приведу скрипт такого календаря на JavaScript. :)))
<SCRIPT LANGUAGE=Javascript>
cal = new Date();
var monthname = new Array ("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь" );
var daycount = new Array (31,28,31,30,31,30,31,31,30,31,30,31);
var dayname = new Array ("Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота","Воскресенье");
now_day = cal.getDay();
now_date = cal.getDate();
month=cal.getMonth();
year = cal.getYear();
if (year<1900) year=year+1900;
if ((((year%4)==0) && ((year%100)!=0)) || ((year%400)==0)) daycount[1]=29;
cal.setDate(1);
f_day=cal.getDay();
now_day--;
f_day--;
if (now_day==-1) now_day=6;
if (f_day==-1) f_day=6;
document.write("<FONT SIZE=3 FACE=tahoma color=#000000> "+monthname[month]+" "+year+"</FONT>")
document.write("</tr><tr BGCOLOR=#ebeb92><td align=center style="border-right:none"> пн</td><td align=center style="border-right:none;border-left:none"> вт</td><td align=center style="border-right:none;border-left:none"> ср</td><td align=center style="border-right:none;border-left:none"> чт</td><td align=center style="border-right:none;border-left:none"> пт</td><td align=center style="border-right:none;border-left:none"><FONT COLOR=#bb0000> сб</td><td align=center style="border-left:none"><FONT COLOR=#bb0000> вс</td></tr>");
idate=1-f_day;
while (idate<=daycount[month])
{
iday=0;
document.write("<tr>");
while (iday<=6)
{
if ((idate<1) || (idate>daycount[month])) document.write("<td align=center><FONT SIZE=1 FACE=TAHOMA> </td>");
else if (idate==now_date) document.write("<td BGCOLOR=#fafafa align=center><FONT SIZE=1 FACE=TAHOMA color=#0000dd> "+idate+"</td>");
else document.write("<td align=center><FONT SIZE=1 FACE=TAHOMA>"+idate+"</td>");
idate++
iday++;
}
document.write("</tr>");
}
</SCRIPT>
← →
nejest (2003-11-18 18:20) [2]немного подумав, я сам сделал программу.
>NickBat из твоего алгорима я смог разобрать, ту вещь с которой при составлении программы у меня возникла проблемма, это когда надо переводить строку. Я пытался сделать перед выводом каждого понедельника и у меня глючило. Но после просмотра вашего исходника я понял, что удобней после каждого воскресения.
Вот мой исходник:
for i:=2 to 7 do
cfvfn.Canvas.TextOut(startX+(sizeX*2+space)*(i-2),startY+(sizeY+space),nDw[i]);
// здесь выводятся имена дней недели с понедельника по пятницу
// они хранятся в массиве nDw
cfvfn.Canvas.TextOut(startX+(sizeX*2+space)*(i-2),startY+(sizeY+space),nDw[1]);
// здесь выводится вс
nWeek:=2;
// данная переменная указывает на номер строки на которую будет
//выводится текст
for i:=0 to nNdw-1 do
begin
if nTkal[i]>1 then
// если день не воскресение
begin
cfvfn.Canvas.TextOut(startX+(sizeX*2+space)*(nTkal[i]-2),startY+((sizeY+space)*(nWeek)),IntToStr(i+1));
// startX, startY начальные координаты X,Y, sizeX,sizeY размеры
//символа, space интервал между символами
end
else
if nTkal[i]=1 then
//если воскресение
begin
cfvfn.Canvas.TextOut(startX+(sizeX*2+space)*(7-1),startY+((sizeY+space)*(nWeek)),IntToStr(i+1));
nWeek:=nWeek+1;
// переводим строку
end;
end;
Страницы: 1 вся ветка
Текущий архив: 2003.11.27;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c