Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.
Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.
Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.
Да знаю - писал когда-то графические программы в Delphi... вот только обленился и всё перезабыл. Ну ладно, вот текст программы-календаря. Пояснение: модуль GrfStart - самописный, он, помимо еще кое-каких мелочей, содержит процедуру INITIALIZE, в которой прописаны всякие там параметры графических драйверов, пути и собственно сама процедура InitGfaph.А с графикой в дельфи примерно то же самое что и в паскале. Только работа с канвой...
USES GRAPH, GrfStart, CRT;
CONST
NumDays:ARRAY[1..2,1..12] of WORD=((31,28,31,30,31,30,31,31,30,31,30,31),
(31,29,31,30,31,30,31,31,30,31,30,31));
Ds:ARRAY[1..7] of STRING=('Mo',
'Tu',
'We',
'Th',
'Fr',
'Sa',
'Su');
Months:ARRAY[1..12] of STRING=('JANUARU',
'FEBRUARY',
'MARCH',
'APRIL',
'MAY',
'JUNE',
'JULY',
'AUGUST',
'SEPTEMBER',
'OCTOBER',
'NOVEMBER',
'DECEMBER');
DY=12;
DX=20;
VAR
D400,M400,D100,M100,D4,M4,SumDays1,SumDays,Mo:LongInt;
i,line,day,month,CurYear,X0,Y0,Xcur,Ycur:WORD;
YearType,Cl,WeekDay,WeDa:ShortInt;
Function Int2Str(L : LongInt) : string;
{ Converts an integer to a string for use with OutText, OutTextXY }
var
S : string;
begin
Str(L, S);
Int2Str := S;
end; { Int2Str }
PROCEDURE WD(CY,CM,CD:LongInt;VAR YT,DW:ShortInt);
BEGIN
D400:=(CY-1) div 400;
M400:=(CY-1) mod 400;
D100:=M400 div 100;
M100:=M400 mod 100;
D4:=M100 div 4;
M4:=M100 mod 4;
SumDays1:=D400*146097+D100*36524+D4*1461+M4*365;
SumDays:=SumDays1;
M400:=CY mod 400;
M100:=M400 mod 100;
M4:=M100 mod 4;
IF (M400=0) OR ((M100>0) AND (M4=0)) THEN YT:=2 ELSE YT:=1;
FOR Month:=1 TO CM-1 DO
SumDays:=SumDays+NumDays[YearType,Month];
SumDays:=SumDays+CD;
DW:=SumDays mod 7;
END;
BEGIN
WRITE('Enter the year: '); Readln(CurYear);
INITIALIZE;
ClearDevice;
SetTextStyle(TriplexScriptFont, HorizDir, 7);
SetTextJustify(CenterText, TopText);
SetColor(LightCyan);
OutTextXY(320,10,Int2Str(CurYear));
SetTextStyle(DefaultFont, HorizDir, 1);
SetTextJustify(LeftText,TopText);
FOR Line:=1 TO 3 DO
FOR Day:=1 TO 7 DO
BEGIN
IF (Day=6) OR (Day=7) THEN SetColor(LightRed) ELSE SetColor(Yellow);
X0:=30;
Y0:=100+(Line-1)*120+Day*DY;
OutTextXY(X0,Y0,Ds[Day]);
X0:=610;
OutTextXY(X0,Y0,Ds[Day]);
END;
FOR Mo:=1 TO 12 DO
BEGIN
SetTextStyle(DefaultFont, HorizDir, 1);
SetTextJustify(CenterText,BottomText);
SetColor(LightGreen);
IF Mo<5 THEN
BEGIN
X0:=80+(Mo-1)*140;
Y0:=100;
OutTextXY(X0+50,Y0+4,Months[Mo]);
END ELSE
IF Mo<9 THEN
BEGIN
X0:=80+(Mo-5)*140;
Y0:=220;
OutTextXY(X0+50,Y0+4,Months[Mo]);
END ELSE
BEGIN
X0:=80+(Mo-9)*140;
Y0:=340;
OutTextXY(X0+50,Y0+4,Months[Mo]);
END;
SetTextStyle(DefaultFont, HorizDir, 1);
SetTextJustify(RightText,TopText);
WD(CurYear,Mo,1,YearType,WeekDay);
IF WeekDay=0 THEN WeDa:=1 ELSE WeDa:=8-WeekDay;
FOR i:=1 TO NumDays[YearType,Mo] DO
BEGIN
IF i<=WeDa THEN Xcur:=0 ELSE Xcur:=(((i-1-WeDa) div 7)+1)*DX;
IF i<=WeDa THEN Ycur:=(7-(WeDa-i))*DY ELSE Ycur:=((i-WeDa) mod 7)*DY;
IF Ycur=0 THEN Ycur:=7*DY;
IF (Ycur div DY = 6) OR (Ycur div DY = 7) THEN SetColor(LightRed)
ELSE SetColor(Yellow);
OUTTEXTXY(Xcur+X0,Ycur+Y0,Int2Str(i));
END;
END;
ReadKey;
CloseGraph;
END.
Ну да. Суть программы в том, чтобы по номеру года правильно определить день недели 1 января, учесть тип года (високосный/обычный), ну и расположить оптимально.то есть - это создание граф.. Календаря через программирование?
А где исходникartos
Проверил. Никаких изменений не увидел: например, 2100 год как был поставлен високосным, так им и остался, а должен быть обычным. И в экран не лезет...Вот подправил... Проверьте...
Если б я всё это знал...В Юлианском календаре каждый четвертый год - високосный, т.е. в феврале 29 дней. А вот в принятом сейчас почти во всём мире Григорианском - чуть сложнее: вековые года (1900, 2100, 2200 и т.д) - невисокосные, кроме тех, что кратны 400. Таким образом, 2000, 2400 и т.п. - високосные, как и в Юлианском календаре. Именно поэтому дальнейшего расхождения календарей в 2000 году не произошло. А вот если существующая система сохранится до 2100 года, то после него Рождество переедет с 7 на 8 января, а Старый новый год - с 14 на 15.
Да уж это как получится.А вот с разрешением сложновато. Это получается надо пропорционально все размеры менять? Установить какой-нибудь общий коэфицент для прорисовки каждой части календаря и изменять его в зависимости от разрешения?