Sign in Join
Wiki copytemporary

CalLite: Flag days in Finland/fi: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: CalLite: Flag days in Finland/fi

OldNewLine
1+# Liputuspäivät Suomessa
2+
3+![](/wiki-images/e/ed/Flag_days_in_Finland.png) [[CalLite/fi|TCalendarLite]] on Kalenterikomponentti. Tämä demo näyttää kuinka CalLite komponenttiin voidaan lisätä Suomen liputuspäivat pienillä kuvakkeilla.
4+
5+## unit uFinlandFlagDays
6+
7+``` pascal
8+unit uFinlandFlagDays;
9+
10+{$mode objfpc}{$H+}
11+
12+interface
13+
14+uses
15+ Classes, SysUtils, CalendarLite, DateUtils;
16+
17+procedure CalendarGetFlagDaysInFinland( AMonth, AYear: Integer;
18+ var Holidays: THolidays);
19+
20+implementation
21+const
22+ SATURDAY = 6;
23+ SUNDAY = 7;
24+ FEBRUARY = 2;
25+ MARCH = 3;
26+ APRIL = 4;
27+ MAY = 5;
28+ JUNE = 6;
29+ JULY = 7;
30+ OCTOBER = 10;
31+ NOVEMBER = 11;
32+ DECEMBER = 12;
33+
34+function MothersDay(year:integer):integer; //Äitienpäivä
35+var
36+ day : integer;
37+ a_date : TDateTime;
38+begin
39+ day := 7;
40+ repeat
41+ inc(day);
42+ a_date := EncodeDate(year, MAY, day);
43+ until DayOfTheWeek( a_date ) = SUNDAY;
44+ result := day;
45+end;
46+
47+function FathersDay(year:integer):integer; // Isänpäivä
48+var
49+ day : integer;
50+ a_date : TDateTime;
51+begin
52+ day := 7;
53+ repeat
54+ inc(day);
55+ a_date := EncodeDate(year, NOVEMBER, day);
56+ until DayOfTheWeek( a_date ) = SUNDAY;
57+ result := day;
58+end;
59+
60+function MidsummerDay(year:integer):integer; // Juhannus
61+var
62+ day : integer;
63+ a_date : TDateTime;
64+begin
65+ day := 20-1;
66+ repeat
67+ inc(day);
68+ a_date := EncodeDate(year, JUNE, day);
69+ until DayOfTheWeek( a_date ) = SATURDAY;
70+ result := day;
71+end;
72+
73+function MemorialDayWarDead(year:integer):integer; //Kaatuneiden muistopäivä
74+var
75+ day : integer;
76+ a_date : TDateTime;
77+begin
78+ day := MothersDay(year);
79+ repeat
80+ inc(day);
81+ a_date := EncodeDate(year, MAY, day);
82+ until DayOfTheWeek( a_date ) = SUNDAY;
83+ result := day;
84+end;
85+
86+procedure CalendarGetFlagDaysInFinland( AMonth, AYear: Integer;
87+ var Holidays: THolidays);
88+begin
89+ ClearHolidays(Holidays);
90+ begin
91+ case AMonth of
92+ FEBRUARY: begin
93+ AddHoliday( 5, Holidays);// J. L. Runebergin päivä
94+ AddHoliday(28, Holidays);// Kalevalan päivä
95+ end;
96+ MARCH: AddHoliday(19, Holidays);// Tasa-arvon päivä, Minna Canthin päivä
97+
98+ APRIL: begin
99+ AddHoliday( 9, Holidays);// Suomen kielen päivä, Mikael Agricolan
100+ // ja Elias Lönnrotin päivä
101+ AddHoliday(27, Holidays);// Kansallinen veteraanipäivä
102+ end;
103+ MAY: begin
104+ AddHoliday( 1, Holidays);// Suomalaisen työn päivä, vappu
105+ AddHoliday( 9, Holidays);// Eurooppa-päivä
106+ AddHoliday(12, Holidays);// Suomalaisuuden päivä, J. V. Snellmanin päivä
107+
108+ AddHoliday(MothersDay(AYear), Holidays); // Äitienpäivä
109+ AddHoliday(MemorialDayWarDead(AYear), Holidays);//Kaatuneiden
110+ //muistopäivä
111+ end;
112+ JUNE: begin
113+ AddHoliday( 4, Holidays);// Puolustusvoimain lippujuhlan päivä
114+ // Gustaf Mannerheimin päivä
115+ AddHoliday(MidsummerDay(AYear), Holidays);// Suomen lipun päivä
116+ // Juhannuspäivä
117+ end;
118+ JULY: AddHoliday( 6, Holidays);// Runon ja suven päivä,
119+ // Eino Leinon päivä
120+ OCTOBER: begin
121+ AddHoliday(10, Holidays);// Suomalaisen kirjallisuuden päivä
122+ // Aleksis Kiven päivä
123+ AddHoliday(24, Holidays);// Yhdistyneiden kansakuntien päivä
124+ end;
125+ NOVEMBER: begin
126+ AddHoliday( 6, Holidays);// Ruotsalaisuuden päivä,
127+ // Kustaa Aadolfin päivä
128+ AddHoliday(FathersDay(AYear), Holidays);//Isänpäivä
129+ end;
130+ DECEMBER: begin
131+ AddHoliday( 6, Holidays);// Itsenäisyyspäivä
132+ AddHoliday( 8, Holidays);// Suomalaisen musiikin päivä,
133+ // Jean Sibeliuksen päivä
134+
135+ end;
136+ end;
137+ end;
138+end;
139+
140+end.
141+```
142+
143+## unit unitFinlandFlagDays
144+
145+``` pascal
146+unit unitFinlandFlagDays;
147+
148+{$mode objfpc}{$H+}
149+
150+interface
151+
152+uses
153+ Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, CalendarLite,
154+ Types, lcltype, uFinlandFlagDays;
155+
156+type
157+
158+ { TForm1 }
159+
160+ TForm1 = class(TForm)
161+ CalendarLite1: TCalendarLite;
162+ procedure CalendarLite1DrawCell(Sender: TObject; ACanvas: TCanvas; AYear,
163+ AMonth, ADay: Word; AState: TCalCellStates; var ARect: TRect;
164+ var AContinueDrawing: Boolean);
165+ procedure FormCreate(Sender: TObject);
166+ private
167+
168+ public
169+
170+ end;
171+
172+var
173+ Form1: TForm1;
174+
175+implementation
176+
177+procedure FlagOfFinland(var Bitmap: TBitmap); // Suomen lippu
178+const
179+ FFH = 11; // FinlandFlagHeight
180+ FFCH1 = 4; // FinlandFlagCrossH1
181+ FFCH2 = 7; // FinlandFlagCrossH2
182+ FFW = 18; // FinlandFlagWidth
183+ FFCW1 = 5; // FinlandFlagCrossW1
184+ FFCW2 = 8; // FinlandFlagCrossW2
185+begin
186+ Bitmap.Canvas.Pen.Color := clWhite;
187+ Bitmap.Canvas.Brush.Style:=bsSolid;
188+ Bitmap.Canvas.Brush.Color:= clWhite;
189+ Bitmap.Canvas.FillRect(0, 0, Bitmap.Width, Bitmap.Height);
190+ Bitmap.Canvas.Brush.Color:=RGBToColor(0, 47, 108) ;
191+ Bitmap.Canvas.FillRect(0,MulDiv(Bitmap.Height,FFCH1,FFH),
192+ Bitmap.Width,MulDiv(Bitmap.Height,FFCH2,FFH));
193+ Bitmap.Canvas.FillRect(MulDiv(Bitmap.Width,FFCW1,FFW),
194+ 0,MulDiv(Bitmap.Width,FFCW2,FFW),Bitmap.Height);
195+end;
196+
197+{$R *.lfm}
198+
199+{ TForm1 }
200+
201+procedure TForm1.CalendarLite1DrawCell(Sender: TObject; ACanvas: TCanvas;
202+ AYear, AMonth, ADay: Word; AState: TCalCellStates; var ARect: TRect;
203+ var AContinueDrawing: Boolean);
204+
205+var
206+ Bitmap: TBitmap;
207+ Flagdays: THolidays;
208+begin
209+ CalendarGetFlagDaysInFinland(AMonth,AYear,Flagdays);
210+ if IsHoliday(aDay,Flagdays) and not (csOtherMonth in AState) then begin
211+ Bitmap := TBitmap.Create;
212+ try
213+ // Initializes the Bitmap Size
214+ Bitmap.Height := 11;
215+ Bitmap.Width := 18;
216+ FlagOfFinland(Bitmap); // Suomen lipun piirto
217+ ACanvas.Draw(ARect.Left, (ARect.Top + ARect.Bottom - Bitmap.Height) div 2,
218+ Bitmap);
219+ inc(ARect.Left, Bitmap.Width + 2);
220+ // Not changing AContinueDrawing from its default value (true) means
221+ // that the day text is drawn by the built-in procedure into
222+ // the reduced rectangle
223+ finally
224+ Bitmap.Free;
225+ end;
226+ end;
227+end;
228+
229+procedure TForm1.FormCreate(Sender: TObject);
230+begin
231+ CalendarLite1.Languages := lgFinnish;
232+ CalendarLite1.StartingDayOfWeek := dowMonday;
233+ CalendarLite1.Date:=now;
234+end;
235+
236+end.
237+```
238+
239+## unitFinlandFlagDays.lfm
240+
241+``` pascal
242+object Form1: TForm1
243+ Left = 543
244+ Height = 278
245+ Top = 159
246+ Width = 426
247+ Caption = 'Flag days in Finland'
248+ ClientHeight = 278
249+ ClientWidth = 426
250+ OnCreate = FormCreate
251+ LCLVersion = '1.8.0.5'
252+ object CalendarLite1: TCalendarLite
253+ Left = 72
254+ Height = 200
255+ Top = 56
256+ Width = 274
257+ Constraints.MinHeight = 120
258+ Constraints.MinWidth = 120
259+ ParentColor = False
260+ TabOrder = 0
261+ TabStop = True
262+ Colors.TodayFrameColor = clGray
263+ Date = 42993
264+ DayNames = 'Su,Ma,Ti,ke,To,Pe,La'
265+ DisplayTexts = '"Tänään on",dd.mm.yyyy,Lomapäivät,"Lomapäiviä ei ole asetettu"'
266+ MonthNames = 'Tammikuu,Helmikuu,Maaliskuu,Huhtikuu,Toukokuu,Kesäkuu,Heinäkuu,Elokuu,Syyskuu,Lokakuu,Marraskuu,Joulukuu'
267+ MultiSelect = False
268+ StartingDayOfWeek = dowMonday
269+ WeekendDays = [dowSunday, dowSaturday]
270+ Languages = lgFinnish
271+ OnDrawCell = CalendarLite1DrawCell
272+ end
273+end
274+```
275+
276+## program flagdays_project
277+
278+``` pascal
279+program flagdays_project;
280+
281+{$mode objfpc}{$H+}
282+
283+uses
284+ {$IFDEF UNIX}{$IFDEF UseCThreads}
285+ cthreads,
286+ {$ENDIF}{$ENDIF}
287+ Interfaces, // this includes the LCL widgetset
288+ Forms, unitFinlandFlagDays, uFinlandFlagDays
289+ { you can add units after this };
290+
291+{$R *.res}
292+
293+begin
294+ RequireDerivedFormResource:=True;
295+ Application.Initialize;
296+ Application.CreateForm(TForm1, Form1);
297+ Application.Run;
298+end.
299+```
300+
301+---
302+*From the Free Pascal wiki, page "CalLite: Flag days in Finland/fi", as it stood on 2019-10-24 after a change by Djzepi, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history