Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];

Вниз

Алгоритм отображения календаря   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-89981
tmv
2003-11-17 10:00
2003.11.27
Просмотр файлов


3-89677
Vovik_tyan
2003-11-06 15:17
2003.11.27
Dos кодировка в Win


1-89916
Sandman25
2003-11-18 13:48
2003.11.27
IntToStr и Const


14-90066
ZeroDivide
2003-11-05 16:54
2003.11.27
Ладно, пусть будет с обоснованиеми и без инвенктивной лексики


8-90005
Darlock
2003-07-23 14:20
2003.11.27
Проблемы с JPEG





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский