Sign in Join
Wiki copytemporary

CalLite: Flag days in Finland/fi: what changed

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

OldNewLine
11# Liputuspäivät Suomessa
22
33![](/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.
44
55## unit uFinlandFlagDays
66
77``` pascal
88unit uFinlandFlagDays;
99
1010{$mode objfpc}{$H+}
1111
1212interface
1313
1414uses
1515 Classes, SysUtils, CalendarLite, DateUtils;
1616
1717procedure CalendarGetFlagDaysInFinland( AMonth, AYear: Integer;
1818 var Holidays: THolidays);
1919
2020implementation
2121const
2222 SATURDAY = 6;
2323 SUNDAY = 7;
2424 FEBRUARY = 2;
2525 MARCH = 3;
2626 APRIL = 4;
2727 MAY = 5;
2828 JUNE = 6;
2929 JULY = 7;
3030 OCTOBER = 10;
3131 NOVEMBER = 11;
3232 DECEMBER = 12;
3333
3434function MothersDay(year:integer):integer; //Äitienpäivä
3535var
3636 day : integer;
3737 a_date : TDateTime;
3838begin
3939 day := 7;
4040 repeat
4141 inc(day);
4242 a_date := EncodeDate(year, MAY, day);
4343 until DayOfTheWeek( a_date ) = SUNDAY;
4444 result := day;
4545end;
4646
4747function FathersDay(year:integer):integer; // Isänpäivä
4848var
4949 day : integer;
5050 a_date : TDateTime;
5151begin
5252 day := 7;
5353 repeat
5454 inc(day);
5555 a_date := EncodeDate(year, NOVEMBER, day);
5656 until DayOfTheWeek( a_date ) = SUNDAY;
5757 result := day;
5858end;
5959
6060function MidsummerDay(year:integer):integer; // Juhannus
6161var
6262 day : integer;
6363 a_date : TDateTime;
6464begin
6565 day := 20-1;
6666 repeat
6767 inc(day);
6868 a_date := EncodeDate(year, JUNE, day);
6969 until DayOfTheWeek( a_date ) = SATURDAY;
7070 result := day;
7171end;
7272
7373function MemorialDayWarDead(year:integer):integer; //Kaatuneiden muistopäivä
7474var
7575 day : integer;
7676 a_date : TDateTime;
7777begin
7878 day := MothersDay(year);
7979 repeat
8080 inc(day);
8181 a_date := EncodeDate(year, MAY, day);
8282 until DayOfTheWeek( a_date ) = SUNDAY;
8383 result := day;
8484end;
8585
8686procedure CalendarGetFlagDaysInFinland( AMonth, AYear: Integer;
8787 var Holidays: THolidays);
8888begin
8989 ClearHolidays(Holidays);
9090 begin
9191 case AMonth of
9292 FEBRUARY: begin
9393 AddHoliday( 5, Holidays);// J. L. Runebergin päivä
9494 AddHoliday(28, Holidays);// Kalevalan päivä
9595 end;
9696 MARCH: AddHoliday(19, Holidays);// Tasa-arvon päivä, Minna Canthin päivä
9797
9898 APRIL: begin
9999 AddHoliday( 9, Holidays);// Suomen kielen päivä, Mikael Agricolan
100100 // ja Elias Lönnrotin päivä
101101 AddHoliday(27, Holidays);// Kansallinen veteraanipäivä
102102 end;
103103 MAY: begin
104104 AddHoliday( 1, Holidays);// Suomalaisen työn päivä, vappu
105105 AddHoliday( 9, Holidays);// Eurooppa-päivä
106106 AddHoliday(12, Holidays);// Suomalaisuuden päivä, J. V. Snellmanin päivä
107107
108108 AddHoliday(MothersDay(AYear), Holidays); // Äitienpäivä
109109 AddHoliday(MemorialDayWarDead(AYear), Holidays);//Kaatuneiden
110110 //muistopäivä
111111 end;
112112 JUNE: begin
113113 AddHoliday( 4, Holidays);// Puolustusvoimain lippujuhlan päivä
114114 // Gustaf Mannerheimin päivä
115115 AddHoliday(MidsummerDay(AYear), Holidays);// Suomen lipun päivä
116116 // Juhannuspäivä
117117 end;
118118 JULY: AddHoliday( 6, Holidays);// Runon ja suven päivä,
119119 // Eino Leinon päivä
120120 OCTOBER: begin
121121 AddHoliday(10, Holidays);// Suomalaisen kirjallisuuden päivä
122122 // Aleksis Kiven päivä
123123 AddHoliday(24, Holidays);// Yhdistyneiden kansakuntien päivä
124124 end;
125125 NOVEMBER: begin
126126 AddHoliday( 6, Holidays);// Ruotsalaisuuden päivä,
127127 // Kustaa Aadolfin päivä
128128 AddHoliday(FathersDay(AYear), Holidays);//Isänpäivä
129129 end;
130130 DECEMBER: begin
131131 AddHoliday( 6, Holidays);// Itsenäisyyspäivä
132132 AddHoliday( 8, Holidays);// Suomalaisen musiikin päivä,
133133 // Jean Sibeliuksen päivä
134134
135135 end;
136136 end;
137137 end;
138138end;
139139
140140end.
141141```
142142
143143## unit unitFinlandFlagDays
144144
145145``` pascal
146146unit unitFinlandFlagDays;
147147
148148{$mode objfpc}{$H+}
149149
150150interface
151151
152152uses
153153 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, CalendarLite,
154154 Types, lcltype, uFinlandFlagDays;
155155
156156type
157157
158158 { TForm1 }
159159
160160 TForm1 = class(TForm)
161161 CalendarLite1: TCalendarLite;
162162 procedure CalendarLite1DrawCell(Sender: TObject; ACanvas: TCanvas; AYear,
163163 AMonth, ADay: Word; AState: TCalCellStates; var ARect: TRect;
164164 var AContinueDrawing: Boolean);
165165 procedure FormCreate(Sender: TObject);
166166 private
167167
168168 public
169169
170170 end;
171171
172172var
173173 Form1: TForm1;
174174
175175implementation
176176
177177procedure FlagOfFinland(var Bitmap: TBitmap); // Suomen lippu
178178const
179179 FFH = 11; // FinlandFlagHeight
180180 FFCH1 = 4; // FinlandFlagCrossH1
181181 FFCH2 = 7; // FinlandFlagCrossH2
182182 FFW = 18; // FinlandFlagWidth
183183 FFCW1 = 5; // FinlandFlagCrossW1
184184 FFCW2 = 8; // FinlandFlagCrossW2
185185begin
186186 Bitmap.Canvas.Pen.Color := clWhite;
187187 Bitmap.Canvas.Brush.Style:=bsSolid;
188188 Bitmap.Canvas.Brush.Color:= clWhite;
189189 Bitmap.Canvas.FillRect(0, 0, Bitmap.Width, Bitmap.Height);
190190 Bitmap.Canvas.Brush.Color:=RGBToColor(0, 47, 108) ;
191191 Bitmap.Canvas.FillRect(0,MulDiv(Bitmap.Height,FFCH1,FFH),
192192 Bitmap.Width,MulDiv(Bitmap.Height,FFCH2,FFH));
193193 Bitmap.Canvas.FillRect(MulDiv(Bitmap.Width,FFCW1,FFW),
194194 0,MulDiv(Bitmap.Width,FFCW2,FFW),Bitmap.Height);
195195end;
196196
197197{$R *.lfm}
198198
199199{ TForm1 }
200200
201201procedure TForm1.CalendarLite1DrawCell(Sender: TObject; ACanvas: TCanvas;
202202 AYear, AMonth, ADay: Word; AState: TCalCellStates; var ARect: TRect;
203203 var AContinueDrawing: Boolean);
204204
205205var
206206 Bitmap: TBitmap;
207207 Flagdays: THolidays;
208208begin
209209 CalendarGetFlagDaysInFinland(AMonth,AYear,Flagdays);
210210 if IsHoliday(aDay,Flagdays) and not (csOtherMonth in AState) then begin
211211 Bitmap := TBitmap.Create;
212212 try
213213 // Initializes the Bitmap Size
214214 Bitmap.Height := 11;
215215 Bitmap.Width := 18;
216216 FlagOfFinland(Bitmap); // Suomen lipun piirto
217217 ACanvas.Draw(ARect.Left, (ARect.Top + ARect.Bottom - Bitmap.Height) div 2,
218218 Bitmap);
219219 inc(ARect.Left, Bitmap.Width + 2);
220220 // Not changing AContinueDrawing from its default value (true) means
221221 // that the day text is drawn by the built-in procedure into
222222 // the reduced rectangle
223223 finally
224224 Bitmap.Free;
225225 end;
226226 end;
227227end;
228228
229229procedure TForm1.FormCreate(Sender: TObject);
230230begin
231231 CalendarLite1.Languages := lgFinnish;
232232 CalendarLite1.StartingDayOfWeek := dowMonday;
233233 CalendarLite1.Date:=now;
234234end;
235235
236236end.
237237```
238238
239239## unitFinlandFlagDays.lfm
240240
241-``` pascal
241+``` lfm
242242object Form1: TForm1
243243 Left = 543
244244 Height = 278
245245 Top = 159
246246 Width = 426
247247 Caption = 'Flag days in Finland'
248248 ClientHeight = 278
249249 ClientWidth = 426
250250 OnCreate = FormCreate
251251 LCLVersion = '1.8.0.5'
252252 object CalendarLite1: TCalendarLite
253253 Left = 72
254254 Height = 200
255255 Top = 56
256256 Width = 274
257257 Constraints.MinHeight = 120
258258 Constraints.MinWidth = 120
259259 ParentColor = False
260260 TabOrder = 0
261261 TabStop = True
262262 Colors.TodayFrameColor = clGray
263263 Date = 42993
264264 DayNames = 'Su,Ma,Ti,ke,To,Pe,La'
265265 DisplayTexts = '"Tänään on",dd.mm.yyyy,Lomapäivät,"Lomapäiviä ei ole asetettu"'
266266 MonthNames = 'Tammikuu,Helmikuu,Maaliskuu,Huhtikuu,Toukokuu,Kesäkuu,Heinäkuu,Elokuu,Syyskuu,Lokakuu,Marraskuu,Joulukuu'
267267 MultiSelect = False
268268 StartingDayOfWeek = dowMonday
269269 WeekendDays = [dowSunday, dowSaturday]
270270 Languages = lgFinnish
271271 OnDrawCell = CalendarLite1DrawCell
272272 end
273273end
274274```
275275
276276## program flagdays_project
277277
278278``` pascal
279279program flagdays_project;
280280
281281{$mode objfpc}{$H+}
282282
283283uses
284284 {$IFDEF UNIX}{$IFDEF UseCThreads}
285285 cthreads,
286286 {$ENDIF}{$ENDIF}
287287 Interfaces, // this includes the LCL widgetset
288288 Forms, unitFinlandFlagDays, uFinlandFlagDays
289289 { you can add units after this };
290290
291291{$R *.res}
292292
293293begin
294294 RequireDerivedFormResource:=True;
295295 Application.Initialize;
296296 Application.CreateForm(TForm1, Form1);
297297 Application.Run;
298298end.
299299```
300300
301301---
302302*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