Vladimir_S |
28.02.2012 17:19 |
Вложений: 1
Цитата:
Сообщение от kreol
(Сообщение 690992)
А с графикой в дельфи примерно то же самое что и в паскале. Только работа с канвой...
|
Да знаю - писал когда-то графические программы в 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.
|