diff --git a/components/callite/callight_pkg.lpk b/components/callite/callight_pkg.lpk
index 0b69f7ace..8b9601bb2 100644
--- a/components/callite/callight_pkg.lpk
+++ b/components/callite/callight_pkg.lpk
@@ -21,6 +21,10 @@
+
+
+
+
diff --git a/components/callite/demo2/umaintestcallite.lfm b/components/callite/demo2/umaintestcallite.lfm
index 1761fb96c..69606c88c 100644
--- a/components/callite/demo2/umaintestcallite.lfm
+++ b/components/callite/demo2/umaintestcallite.lfm
@@ -142,6 +142,7 @@ object Form1: TForm1
'Polish'
'Finnish'
'Greek'
+ '(custom)'
)
OnClick = rgLanguageClick
TabOrder = 4
diff --git a/components/callite/demo2/umaintestcallite.pp b/components/callite/demo2/umaintestcallite.pp
index b0a55daa8..ee7f6cd6a 100644
--- a/components/callite/demo2/umaintestcallite.pp
+++ b/components/callite/demo2/umaintestcallite.pp
@@ -147,6 +147,9 @@ begin
demoCal.Top := PSettings.Height + 10;
demoCal.Width := seWidth.Value;
demoCal.Height := seHeight.Value;
+ demoCal.DayNames := 'SUN,MON,TUE,WED,THU,FRI,SAT';
+ demoCal.MonthNames := 'JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC';
+ demoCal.DisplayTexts := 'TODAY: %s,d.m.yy,HOLIDAYS %d,NO HOLIDAYS SET UP IN %d,"dddd d.m.yyyy",mmmm yy';
demoCal.OnGetHolidays := @GetHolidays;
demoCal.OnDateChange:= @RespondToDateChange;
demoCal.OnMonthChange := @RespondToMonthChange;
@@ -201,6 +204,15 @@ procedure TForm1.rgLanguageClick(Sender: TObject);
begin
demoCal.Languages := TLanguage(rgLanguage.ItemIndex);
copyCal.Languages := demoCal.Languages;
+ exit;
+
+
+
+ if demoCal.Languages = lgCustom then begin
+ demoCal.DayNames := 'S,M,T,W,T,F,S';
+ demoCal.MonthNames := 'Ja,Fe,Mr,Ap,Ma,Jn,Jl,Au,Sp,Oc,Nv,Dc';
+ demoCal.DisplayTexts := 'Today,"mmm yyyy",Holidays,"No holidays in"';
+ end;
end;
procedure TForm1.rgStartingDOWClick(Sender: TObject);
diff --git a/components/callite/source/calendarlite.pas b/components/callite/source/calendarlite.pas
index f39355a04..ff0937561 100644
--- a/components/callite/source/calendarlite.pas
+++ b/components/callite/source/calendarlite.pas
@@ -45,59 +45,7 @@ uses
ExtCtrls, Menus;
const
- TopRow = 0;
- DayRow = 1;
- FirstDateRow = 2;
- LastDateRow = 7;
LastCol = 7;
- TodayRow = 8;
- LastRow: word = 0;
- DefCalHeight = 160;
- DefCalWidth = 210;
- DefMinHeight = 120;
- DefMinWidth = 120;
- DefTStyle: TTextStyle = (Alignment : taCenter; Layout : tlCenter;
- SingleLine : False; Clipping : True;
- ExpandTabs : False; ShowPrefix : False;
- Wordbreak : True; Opaque : False;
- SystemFont : False; RightToLeft: False;
- EndEllipsis: False);
-
- DefaultDisplayText = 'Today is,"mmm dd"","" yyyy",Holidays during,There are no holidays set for';
- EnglishDays = 'Sun,Mon,Tue,Wed,Thu,Fri,Sat';
- EnglishMonths = 'January,February,March,April,May,June,July,August,September,October,November,December';
-
- HebrewDays = 'א,ב,ג,ד,ה,ו,ש';
- HebrewMonths = ('ינואר,פברואר,מרץ,אפריל,מאי,יוני, יולי,אוגוסט,ספטמבר,אוקטובר,נובמבר,דצמבר');
- HebrewTexts = 'היום הוא,yyyy-mm-dd,במהלך החגים, אין חגים מוגדרים עבור';
-
- FrenchDays = 'dim,lun,mar,mer,jeu,ven,sam';
- FrenchMonths = 'janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre';
- FrenchTexts = 'Est aujourd''hui,dd/mm/yyyy,vacances pendant,Il n''y a pas de jours fériés fixés pour';
-
- GermanMonths = 'Januar,Februar,März,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember';
- GermanDays = 'So,Mo,Di,Mi,Do,Fr,Sa';
- GermamTexts = 'Heute ist,dd.mm.yyyy,Urlaub während,Es gibt keine Feiertage im';
-
- SpanishDays = 'dom,lun,mar,mié,jue,vie,sáb';
- SpanishMonths = 'enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre';
- SpanishTexts = 'Hoy es,dd/mm/yyyy,Dias de fiestas,No hay dias feriados establecidos para';
-
- ItalianDays = 'dom,lun,mar,mer,gio,ven,sab';
- ItalianMonths = 'gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicembre';
- ItalianTexts = 'Oggi è,dd/mmm/yyyy,Vacanze durante,Non ci sono vacanze fissati per';
-
- PolishDays = 'nie,pon,wto,Śro,czw,pią,sob';
- PolishMonths = 'Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień';
- PolishTexts = 'Dziś jest,dd/mmm/yyyy,urlop w czasie,Brak święta określone dla';
-
- FinnishTexts ='Tänään on,dd.mm.yyyy,Lomapäivät,Lomapäiviä ei ole asetettu';
- FinnishMonths = 'Tammikuu,Helmikuu,Maaliskuu,Huhtikuu,Toukokuu,Kesäkuu,Heinäkuu,Elokuu,Syyskuu,Lokakuu,Marraskuu,Joulukuu';
- FinnishDays = 'Su,Ma,Ti,ke,To,Pe,La';
-
- GreekDays = 'Κυρ,Δευ,Τρί,Τετ,Πεμ,Παρ,Σαβ';
- GreekMonths = 'Ιανουάριος,Φεβρουάριος,Μάρτιος,Απρίλος,Μάιος,Ιούνιος,Ιούλιος,Αύγουστος,Σεπτέμβριος,Οκτώβριος,Νοέμβριος,Δεκέμβριος';
- GreekTexts = 'Σήμερα είναι,"mmm dd"","" yyyy",Καμία γιορτή,Δεν έχει καμία αργία';
type
TCalendarLite = class;
@@ -113,7 +61,8 @@ type
dowThursday=5, dowFriday=6, dowSaturday=7);
TDaysOfWeek = set of TDayOfWeek;
- TDisplayText = (dtToday=0, dtTodayFormat=1, dtHolidaysDuring=2, dtNoHolidaysDuring=3);
+ TDisplayText = (dtToday=0, dtTodayFormat=1, dtHolidaysDuring=2,
+ dtNoHolidaysDuring=3, dtTodayFormatLong=4, dtCaptionFormat=5);
THolidays = DWord;
TGetHolidaysEvent = procedure (Sender: TObject; AMonth, AYear: Integer;
@@ -144,7 +93,7 @@ type
smFirstWeek, smNextWeek, smNextWeekRange);
TLanguage = (lgEnglish, lgFrench, lgGerman, lgHebrew, lgSpanish, lgItalian,
- lgPolish, lgFinnish, lgGreek);
+ lgPolish, lgFinnish, lgGreek, lgCustom);
{ TCalDateList }
@@ -185,7 +134,7 @@ type
FThisDay: word;
FThisMonth: word;
FThisYear: word;
- FTStyle: TTextStyle;
+ FTextStyle: TTextStyle;
procedure CalcSettings;
procedure DrawArrow(ARect: TRect; AHead: TArrowhead; ADirec: TArrowDirection);
procedure DrawDayCells;
@@ -245,7 +194,10 @@ type
FCalDrawer: TCalDrawer;
FColors: TCalColors;
FDate: TDateTime;
- FDisplayTexts: TStringList;
+ FCustomDayNames: string;
+ FCustomDisplayTexts: String;
+ FCustomMonthNames: string;
+ FDisplayTexts: array[TDisplayText] of string;
FOnDateChange: TNotifyEvent;
FOnMonthChange: TNotifyEvent;
FOnGetDayText: TCalGetDayTextEvent;
@@ -277,16 +229,19 @@ type
procedure PopulateHolidayPopupMenu;
procedure PopulateMonthPopupMenu;
procedure PopulateYearPopupMenu;
+ procedure SetCustomDayNames(const AValue: String);
+ procedure SetCustomDisplayTexts(const AValue: String);
+ procedure SetCustomMonthNames(const AValue: String);
procedure SetDate(AValue: TDateTime);
- procedure SetDayNames(const AValue: String);
+ procedure SetDefaultDayNames;
procedure SetDefaultDisplayTexts;
+ procedure SetDefaultMonthNames;
procedure SetDisplayTexts(AValue: String);
- procedure SetMonthNames(const AValue: String);
+ procedure SetLanguage(AValue: TLanguage);
procedure SetMultiSelect(AValue: Boolean);
procedure SetOptions(AValue: TCalOptions);
procedure SetStartingDayOfWeek(AValue: TDayOfWeek);
procedure SetWeekendDays(AValue: TDaysOfWeek);
- procedure SetLanguage(AValue: TLanguage);
procedure TimerExpired(Sender: TObject);
procedure YearMenuItemClicked(Sender: TObject);
@@ -305,6 +260,11 @@ type
function SelMode(Shift: TShiftState): TCalSelMode;
procedure Paint; override;
+ procedure UseDayName(ADayOfWeek: TDayOfWeek; const AValue: String);
+ procedure UseDayNames(const AValue: String);
+ procedure UseDisplayTexts(const AValue: String);
+ procedure UseMonthName(AMonth: Integer; const AValue: String);
+ procedure UseMonthNames(const AValue: String);
{ Hints }
procedure ShowHintWindow(APoint: TPoint; ADate: TDate);
@@ -370,9 +330,9 @@ type
// new properties
property Colors: TCalColors read FColors write FColors;
property Date: TDateTime read FDate write SetDate;
- property DayNames: String read GetDayNames write SetDayNames;
- property DisplayTexts: String read GetDisplaytexts write SetDisplayTexts;
- property MonthNames: String read GetMonthnames write SetMonthNames;
+ property DayNames: String read FCustomDayNames write SetCustomDayNames;
+ property DisplayTexts: String read GetDisplayTexts write SetCustomDisplayTexts;
+ property MonthNames: String read FCustomMonthNames write SetCustomMonthNames;
property MultiSelect: Boolean read FMultiSelect write SetMultiSelect
default false;
property Options: TCalOptions read FOptions write SetOptions
@@ -382,7 +342,7 @@ type
property WeekendDays: TDaysOfWeek read FWeekendDays
write SetWeekendDays default [dowSunday];
property Languages: TLanguage read FLanguage
- write SetLanguage default lgEnglish; deprecated 'Use DayNames, DisplayTexts, and MonthNames instead.';
+ write SetLanguage default lgEnglish;
// new event properties
property OnDateChange: TNotifyEvent read FOnDateChange write FOnDateChange;
@@ -408,9 +368,106 @@ implementation
uses
LCLType, LazUTF8, dateutils, math;
+resourcestring
+ rsCalTodayIs = 'Today is %s';
+ rsCalTodayFormat = 'mmm dd, yyyy';
+ rsCalTodayFormatLong = 'dddd mmm dd, yyyy';
+ rsCalCaptionFormat = 'mmmm yyyy';
+ rsCalHolidaysIn = 'Holidays in %d';
+ rsCalNoHolidaysIn = 'There are no holidays set for %d';
+
+ rsCalJanuary = 'January|Jan';
+ rsCalFebruary = 'February|Feb';
+ rsCalMarch = 'March|Mar';
+ rsCalApril = 'April|Apr';
+ rsCalMay = 'May|May';
+ rsCalJune = 'June|Jun';
+ rsCalJuly = 'July|Jul';
+ rsCalAugust = 'August|Aug';
+ rsCalSeptember = 'September|Sp';
+ rsCalOctober = 'October|Oct';
+ rsCalNovember = 'November|Nov';
+ rsCalDecember = 'December|Dec';
+
+ rsCalSunday = 'Sunday|Sun';
+ rsCalMonday = 'Monday|Mon';
+ rsCalTuesday = 'Tuesday|Tue';
+ rsCalWednesday = 'Wesnesday|Wed';
+ rsCalThursday = 'Thursday|Thu';
+ rsCalFriday = 'Friday|Fri';
+ rsCalSaturday = 'Saturday|Sat';
+
+
const
- DBLCLICK_INTERVAL = 300; // Interval (ms) for detection of a double-click
- DESIGNTIME_PPI = 96;
+ TopRow = 0;
+ DayRow = 1;
+ FirstDateRow = 2;
+ LastDateRow = 7;
+ TodayRow = 8;
+ LastRow: word = 0;
+ DefCalHeight = 160;
+ DefCalWidth = 210;
+ DefMinHeight = 120;
+ DefMinWidth = 120;
+ DefTextStyle: TTextStyle = (
+ Alignment : taCenter; Layout : tlCenter;
+ SingleLine : False; Clipping : True;
+ ExpandTabs : False; ShowPrefix : False;
+ Wordbreak : True; Opaque : False;
+ SystemFont : False; RightToLeft: False;
+ EndEllipsis: False
+ );
+
+ // IMPORTANT NOTE: NO SPACES IN FRONT OF QUOTES !!!
+
+ EnglishDays = 'Sunday|Sun,Monday|Mon,Tuesday|Tue,Wednesday|Wed,Thursday|Thu,Friday|Fri,Saturday|Sat';
+ EnglishMonths = 'January|Jan,February|Feb,March|Mar,April|Apr,May|May,June|Jun,'+
+ 'July|Jul,August|Aug,September|Sep,October|Oct,November|Nov,December|Dec';
+ EnglishTexts = 'Today is %s,"mmm dd"", ""yyyy",Holidays in %d,'+
+ 'There are no holidays set for %d,"dddd"", "" mmm dd"", ""yyyy",mmmm yyyy';
+
+ HebrewDays = 'א,ב,ג,ד,ה,ו,ש';
+ HebrewMonths = ('ינואר,פברואר,מרץ,אפריל,מאי,יוני, יולי,אוגוסט,ספטמבר,אוקטובר,נובמבר,דצמבר');
+ HebrewTexts = 'היום הוא,yyyy-mm-dd,במהלך החגים, אין חגים מוגדרים עבור';
+
+ FrenchDays = 'dimanche|dim,lundi|lun,mardi|mar,mercredi|mer,jeudi|jeu,vendredi|ven,samedi|sam';
+ FrenchMonths = 'janvier|janv.,février|févr.,mars|mars,avril|avr.,mai|mai,juin|juin,'+
+ 'juillet|juill.,août|août,septembre|sept.,octobre|oct.,novembre|nov.,décembre|déc.';
+ FrenchTexts = 'Est aujourd''hui %s, dd/mm/yyyy, vacances pendant %d, '+
+ 'Il n''y a pas de jours fériés fixés pour %d, dddd dd/mm/yyyy, mmmm yyyy';
+
+ GermanDays = 'Sonntag|So,Montag|Mo,Dienstag|Di,Mittwoch|Mi,Donnerstag|Do,Freitag|Fr,Samstag|Sa';
+ GermanMonths = 'Januar|Jan.,Februar|Febr.,März|März,April|Apr.,Mai|Mai,Juni|Jun,'+
+ 'Juli|Jul,August|Aug.,September|Sept.,Oktober|Okt.,November|Nov.,Dezember|Dez.';
+ GermamTexts = 'Heute ist %s, dd.mm.yyyy, Feiertage in %d, '+
+ 'Keine Feiertage vorbereitet für %d, dddd dd.mm.yyyy, mmmm yyyy';
+
+ SpanishDays = 'dom,lun,mar,mié,jue,vie,sáb';
+ SpanishMonths = 'enero|ene,febrero|feb,marzo|mar,abril|abr,mayo|may,junio|jun,'+
+ 'julio|jul,agosto|ago,septiembre|sep,octubre|oct,noviembre|nov,diciembre|dic';
+ SpanishTexts = 'Hoy es %s, dd/mm/yyyy, Dias de fiestas %d, '+
+ 'No hay dias feriados establecidos para %d, dddd dd/mm/yyyy, mmmm yyyy';
+
+ ItalianDays = 'domenica|dom,lunedi|lun,martedi|mar,mercoledì|mer,giovedì|gio,venerdì|ven,sabato|sab';
+ ItalianMonths = 'gennaio|gen,febbraio|feb,marzo|mar,aprile|apr,maggio|mag,giugno|giu,'+
+ 'luglio|lug,agosto|ago,settembre|set,ottobre|ott,novembre|nov,dicembre|dic';
+ ItalianTexts = 'Oggi è %s, dd/mmm/yyyy, Vacanze durante %d, '+
+ 'Non ci sono vacanze fissati per %d,"dddd, dd/mmm/yyyy",mmmm yyyy';
+
+ PolishDays = 'nie,pon,wto,Śro,czw,pią,sob';
+ PolishMonths = 'Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień';
+ PolishTexts = 'Dziś jest,dd/mmm/yyyy,urlop w czasie,Brak święta określone dla';
+
+ FinnishDays = 'Su,Ma,Ti,ke,To,Pe,La';
+ FinnishMonths = 'Tammikuu,Helmikuu,Maaliskuu,Huhtikuu,Toukokuu,Kesäkuu,Heinäkuu,Elokuu,Syyskuu,Lokakuu,Marraskuu,Joulukuu';
+ FinnishTexts ='Tänään on %s, dd.mm.yyyy, Lomapäivät %d, Lomapäiviä ei ole asetettu %d';
+
+ GreekDays = 'Κυρ,Δευ,Τρί,Τετ,Πεμ,Παρ,Σαβ';
+ GreekMonths = 'Ιανουάριος,Φεβρουάριος,Μάρτιος,Απρίλος,Μάιος,Ιούνιος,Ιούλιος,Αύγουστος,Σεπτέμβριος,Οκτώβριος,Νοέμβριος,Δεκέμβριος';
+ GreekTexts = 'Σήμερα είναι,"mmm dd"","" yyyy",Καμία γιορτή,Δεν έχει καμία αργία';
+
+ DBLCLICK_INTERVAL = 300; // Interval (ms) for detection of a double-click
+ DESIGNTIME_PPI = 96;
{ Holiday helpers }
@@ -594,7 +651,7 @@ constructor TCalDrawer.Create(ACanvas: TCanvas);
begin
inherited Create;
FCanvas:= ACanvas;
- FTStyle:= DefTStyle;
+ FTextStyle:= DefTextStyle;
end;
procedure TCalDrawer.CalcSettings;
@@ -610,9 +667,9 @@ var
sz: TSize;
begin
if (FOwner.BiDiMode = bdLeftToRight) then
- FTStyle.RightToLeft:= False
+ FTextStyle.RightToLeft:= False
else
- FTStyle.RightToLeft:= True;
+ FTextStyle.RightToLeft:= True;
SetLength(FRowPositions, 0);
if (coShowTodayRow in FOwner.Options) then
LastRow := TodayRow
@@ -863,7 +920,7 @@ begin
s := IntToStr(d);
if Assigned(FOwner.FOnGetDayText) then
FOwner.FOnGetDayText(FOwner, y, m, d, s);
- FCanvas.TextRect(rec, 0, 0, s, FTStyle);
+ FCanvas.TextRect(rec, 0, 0, s, FTextStyle);
end;
dt:= dt + 1;
@@ -895,7 +952,7 @@ begin
for c:= Low(FColPositions) to High(FColPositions) do
begin
rec := GetCellAtColRow(c, DayRow);
- FCanvas.TextRect(rec, 0, 0, lbls[c], FTStyle);
+ FCanvas.TextRect(rec, 0, 0, lbls[c], FTextStyle);
end;
if (coDayLine in FOwner.Options) then begin
rec := GetCellAtColRow(GetLeftColIndex, DayRow);
@@ -911,6 +968,7 @@ var
r1, r2: TRect;
w1, w2, w3, rem, halfRem: integer;
s: String;
+ ds: String;
begin
if (LastRow <> TodayRow) then Exit;
r1 := GetCellAtColRow(2, TodayRow);
@@ -929,9 +987,17 @@ begin
FCanvas.Font.Style := [];
s:= FOwner.GetDisplayText(dtToday);
- if (coShowTodayName in FOwner.Options) then
- s := Format('%s %s',[s, FOwner.GetDayName(TDayOfWeek(DayOfWeek(Date())))]);
- AppendStr(s, ' ' + FormatDateTime(FOwner.GetDisplayText(dtTodayFormat), Date(), FOwner.FFormatSettings));
+ if pos('%s', s) = 0 then begin
+ if (coShowTodayName in FOwner.Options) then
+ s := Format('%s %s',[s, FOwner.GetDayName(TDayOfWeek(DayOfWeek(Date())))]);
+ AppendStr(s, ' ' + FormatDateTime(FOwner.GetDisplayText(dtTodayFormat), Date(), FOwner.FFormatSettings));
+ end else begin
+ if coShowTodayName in FOwner.Options then
+ ds := FormatDateTime(FOwner.GetDisplayText(dtTodayFormatLong), Date(), FOwner.FFormatSettings)
+ else
+ ds := FormatDateTime(FOwner.GetDisplayText(dtTodayFormat), Date(), FOwner.FFormatSettings);
+ s := Format(s, [ds]);
+ end;
w1 := FCanvas.TextWidth('aaa');
w2 := FCanvas.TextWidth(' ');
w3 := FCanvas.TextWidth(s);
@@ -960,13 +1026,14 @@ begin
FCanvas.Font.Style := [fsBold]
else
FCanvas.Font.Style := [];
- FCanvas.TextRect(r2, 0, 0, s, FTStyle);
+ FCanvas.TextRect(r2, 0, 0, s, FTextStyle);
end;
procedure TCalDrawer.DrawTopRow;
var
r: TRect;
s: String;
+ dt: TDateTime;
begin
if coUseTopRowColors in FOwner.Options then begin
FCanvas.Font.Color:= FOwner.Colors.TopRowTextColor;
@@ -998,8 +1065,10 @@ begin
r:= GetCellAtColRow(3, TopRow);
end;
end;
- s := FOwner.GetMonthName(FThisMonth) + ' ' + IntToStr(FThisYear);
- FCanvas.TextRect(r, 0, 0, s, FTStyle);
+ dt := EncodeDate(FThisYear, FThisMonth, 1);
+ s := FormatDateTime(FOwner.GetDisplayText(dtCaptionFormat), dt, FOwner.FFormatSettings);
+// s := FOwner.GetMonthName(FThisMonth) + ' ' + IntToStr(FThisYear);
+ FCanvas.TextRect(r, 0, 0, s, FTextStyle);
end;
function TCalDrawer.GetCellAt(aPoint: TPoint): TSize;
@@ -1297,10 +1366,12 @@ begin
Constraints.MinWidth := ScaleY(DefMinWidth, DESIGNTIME_PPI);
Canvas.Brush.Style := bsSolid;
TabStop := true;
- FDisplayTexts := TStringList.Create;
- FDisplayTexts.StrictDelimiter := True;
- FDisplayTexts.Delimiter := ',';
+ SetDefaultDayNames;
+// FCustomDayNames := GetDayNames;
+ SetDefaultMonthNames;
+// FCustomMonthNames := GetMonthNames;
SetDefaultDisplayTexts;
+ FCustomDisplayTexts := GetDisplayTexts;
FPopupMenu := TPopupMenu.Create(Self);
FCalDrawer := TCalDrawer.Create(Canvas);
FCalDrawer.FOwner:= Self;
@@ -1319,7 +1390,6 @@ end;
destructor TCalendarLite.Destroy;
begin
FreeAndNil(FSelDates);
- FreeAndNil(FDisplayTexts);
FreeAndNil(FColors);
SetLength(FCalDrawer.FRowPositions, 0);
FreeAndNil(FCalDrawer);
@@ -1455,7 +1525,7 @@ begin
L := TStringList.Create;
try
for i:= 1 to 7 do
- L.Add(FFormatSettings.ShortDayNames[i]);
+ L.Add(FFormatSettings.LongDayNames[i] + '|' + FFormatSettings.ShortDayNames[i]);
Result := L.CommaText;
finally
L.Free;
@@ -1464,12 +1534,22 @@ end;
function TCalendarLite.GetDisplayText(aTextIndex: TDisplayText): String;
begin
- Result := FDisplayTexts[Integer(aTextIndex)];
+ Result := FDisplayTexts[aTextIndex];
end;
function TCalendarLite.GetDisplayTexts: String;
+var
+ L: TStrings;
+ dt: TDisplayText;
begin
- Result := FDisplayTexts.CommaText;
+ L := TStringList.Create;
+ try
+ L.StrictDelimiter := true;
+ for dt in TDisplayText do L.Add(FDisplayTexts[dt]);
+ Result := L.CommaText;
+ finally
+ L.Free;
+ end;
end;
function TCalendarLite.GetMonthName(AMonth: Integer): String;
@@ -1485,7 +1565,7 @@ begin
L := TStringList.Create;
try
for i:=1 to 12 do
- L.Add(FFormatSettings.ShortMonthNames[i]);
+ L.Add(FFormatSettings.LongMonthNames[i] + '|' + FFormatSettings.ShortMonthNames[i]);
Result := L.CommaText;
finally
L.Free;
@@ -1624,10 +1704,10 @@ begin
end;
case (BiDiMode = bdLeftToRight) of
- False: if not FCalDrawer.FTStyle.RightToLeft then
- FCalDrawer.FTStyle.RightToLeft := True;
- True : if FCalDrawer.FTStyle.RightToLeft then
- FCalDrawer.FTStyle.RightToLeft := False;
+ False: if not FCalDrawer.FTextStyle.RightToLeft then
+ FCalDrawer.FTextStyle.RightToLeft := True;
+ True : if FCalDrawer.FTextStyle.RightToLeft then
+ FCalDrawer.FTextStyle.RightToLeft := False;
end;
Canvas.Brush.Color:= Colors.BackGroundColor;
@@ -1656,11 +1736,16 @@ var
population: integer = 0;
hols: THolidays = 0;
dt: TDateTime;
+ s: String;
begin
with FPopupMenu.Items do begin
Clear;
item:= TMenuItem.Create(Self);
- item.Caption:= Format('%s %d', [GetDisplayText(dtHolidaysDuring), FCalDrawer.FThisYear]);
+ s := GetDisplayText(dtHolidaysDuring);
+ if pos('%d', s) = 0 then
+ item.Caption:= s + ' ' + IntToStr(FCalDrawer.FThisYear)
+ else
+ item.Caption := Format(s, [FCalDrawer.FThisYear]);
Add(item);
item:= TMenuItem.Create(Self);
item.Caption:= '-';
@@ -1688,8 +1773,13 @@ begin
until d > dayCount;
end;
Items[0].Enabled := (population <> 0);
- if not Items[0].Enabled then
- Items[0].Caption := Format('%s %d', [GetDisplayText(dtNoHolidaysDuring), FCalDrawer.FThisYear]);
+ if not Items[0].Enabled then begin
+ s := GetDisplayText(dtNoHolidaysDuring);
+ if pos('%d', s) = 0 then
+ Items[0].Caption := s + ' ' + IntToStr(FCalDrawer.FThisYear)
+ else
+ Items[0].Caption := Format(s, [FCalDrawer.FThisYear]);
+ end;
end;
end;
@@ -1762,6 +1852,27 @@ begin
Result := smNextSingle;
end;
+procedure TCalendarLite.SetCustomDayNames(const AValue: String);
+begin
+ FCustomDayNames := AValue;
+ if FLanguage = lgCustom then
+ SetLanguage(lgCustom);
+end;
+
+procedure TCalendarLite.SetCustomDisplayTexts(const AValue: String);
+begin
+ FCustomDisplayTexts := AValue;
+ if FLanguage = lgCustom then
+ SetLanguage(lgCustom);
+end;
+
+procedure TCalendarLite.SetCustomMonthNames(const AValue: String);
+begin
+ FCustomMonthNames := AValue;
+ if FLanguage = lgCustom then
+ SetLanguage(lgCustom);
+end;
+
procedure TCalendarLite.SetDate(AValue: TDateTime);
var
oldMonth: Integer;
@@ -1777,30 +1888,63 @@ begin
Invalidate;
end;
-procedure TCalendarLite.SetDayNames(const AValue: String);
-var
- i: Integer;
- L: TStrings;
+procedure TCalendarLite.SetDefaultDayNames;
begin
- L := TStringList.Create;
- try
- L.CommaText := AValue;
- for i := 1 to 7 do
- FFormatSettings.ShortDayNames[i] := L[i-1];
- Invalidate;
- finally
- L.Free;
- end;
+ UseDayName(dowSunday, rsCalSunday);
+ UseDayName(dowMonday, rsCalMonday);
+ UseDayName(dowTuesday, rsCalTuesday);
+ UseDayName(dowWednesday, rsCalWednesday);
+ UseDayName(dowThursday, rsCalThursday);
+ UseDayName(dowFriday, rsCalFriday);
+ UseDayName(dowSaturday, rsCalSaturday);
end;
procedure TCalendarLite.SetDefaultDisplayTexts;
begin
- FDisplayTexts.CommaText := DefaultDisplayText;
+ FDisplayTexts[dtToday] := rsCalTodayIs;
+ FDisplayTexts[dtHolidaysDuring] := rsCalHolidaysIn;
+ FDisplayTexts[dtNoHolidaysDuring] := rsCalNoHolidaysIn;
+
+ FDisplayTexts[dtTodayFormat] := rsCalTodayFormat;
+ FDisplayTexts[dtTodayFormatLong] := rsCalTodayFormatLong;
+ FDisplayTexts[dtCaptionFormat] := rsCalCaptionFormat;
+
+ FCustomDisplayTexts := GetDisplayTexts;
+end;
+
+procedure TCalendarLite.SetDefaultMonthNames;
+begin
+ UseMonthName(1, rsCalJanuary);
+ UseMonthname(2, rsCalFebruary);
+ UseMonthName( 3, rsCalMarch);
+ UseMonthName( 4, rsCalApril);
+ UseMonthname( 5, rsCalMay);
+ UseMonthname( 6, rsCalJune);
+ UseMonthname( 7, rsCalJuly);
+ UseMonthName( 8, rsCalAugust);
+ UseMonthname( 9, rsCalSeptember);
+ UseMonthName(10, rsCalOctober);
+ UseMonthName(11, rsCalNovember);
+ UseMonthName(12, rsCalDecember);
end;
procedure TCalendarLite.SetDisplayTexts(AValue: String);
+var
+ L: TStrings;
+ i: Integer;
begin
- FDisplayTexts.CommaText := AValue;
+ L := TStringList.Create;
+ try
+ L.StrictDelimiter := True;
+ L.CommaText := AValue;
+ for i:=0 to L.Count - 1 do begin
+ if i >= ord(High(TDisplayText)) then
+ exit;
+ FDisplayTexts[TDisplayText(i)] := trim(L[i]);
+ end;
+ finally
+ L.Free;
+ end;
Invalidate;
end;
@@ -1812,80 +1956,69 @@ begin
case FLanguage of
lgEnglish: begin
- DayNames := EnglishDays;
- MonthNames := EnglishMonths;
- DisplayTexts := DefaultDisplayText;
+ UseDayNames(EnglishDays);
+ UseMonthNames(EnglishMonths);
+ UseDisplayTexts(EnglishTexts);
BiDiMode:= bdLeftToRight;
end;
- lgFrench: begin
- DayNames := FrenchDays;
- MonthNames := FrenchMonths;
- DisplayTexts := FrenchTexts;
- BiDiMode:= bdLeftToRight;
- end;
- lgGerman: begin
- DayNames := GermanDays;
- MonthNames := GermanMonths;
- DisplayTexts := GermamTexts;
+ lgFrench: begin
+ UseDayNames(FrenchDays);
+ UseMonthNames(FrenchMonths);
+ UseDisplayTexts(FrenchTexts);
BiDiMode:= bdLeftToRight;
end;
- lgHebrew: begin
- DayNames := HebrewDays;
- MonthNames := HebrewMonths;
- DisplayTexts := HebrewTexts;
+ lgGerman: begin
+ UseDayNames(GermanDays);
+ UseMonthNames(GermanMonths);
+ UseDisplayTexts(GermamTexts);
+ BiDiMode:= bdLeftToRight;
+ end;
+ lgHebrew: begin
+ UseDayNames(HebrewDays);
+ UseMonthNames(HebrewMonths);
+ UseDisplayTexts(HebrewTexts);
BiDiMode:= bdRightToLeft;
end;
lgSpanish: begin
- DayNames := SpanishDays;
- MonthNames := SpanishMonths;
- DisplayTexts := SpanishTexts;
+ UseDayNames(SpanishDays);
+ UseMonthNames(SpanishMonths);
+ UseDisplayTexts(SpanishTexts);
BiDiMode:= bdLeftToRight;
end;
lgItalian: begin
- DayNames := ItalianDays;
- MonthNames := ItalianMonths;
- DisplayTexts := ItalianTexts;
+ UseDayNames(ItalianDays);
+ UseMonthNames(ItalianMonths);
+ UseDisplayTexts(ItalianTexts);
BiDiMode:= bdLeftToRight;
end;
lgPolish: begin
- DayNames := PolishDays;
- MonthNames := PolishMonths;
- DisplayTexts := PolishTexts;
+ UseDayNames(PolishDays);
+ UseMonthNames(PolishMonths);
+ UseDisplayTexts(PolishTexts);
BiDiMode:= bdLeftToRight;
end;
lgFinnish: begin
- DayNames := FinnishDays;
- MonthNames := FinnishMonths;
- DisplayTexts := FinnishTexts;
+ UseDayNames(FinnishDays);
+ UseMonthNames(FinnishMonths);
+ UseDisplayTexts(FinnishTexts);
BiDiMode := bdLeftToRight;
end;
lgGreek: begin
- DayNames := GreekDays;
- MonthNames := GreekMonths;
- DisplayTexts := GreekTexts;
+ UseDayNames(GreekDays);
+ UseMonthNames(GreekMonths);
+ UseDisplayTexts(GreekTexts);
BiDiMode := bdLeftToRight;
end;
+ lgCustom: begin
+ UseDayNames(FCustomDayNames);
+ UseMonthNames(FCustomMonthNames);
+ UseDisplayTexts(FCustomDisplayTexts);
+ end;
end;
Invalidate;
end;
-procedure TCalendarLite.SetMonthNames(const AValue: String);
-var
- i: Integer;
- L: TStrings;
-begin
- L := TStringList.Create;
- try
- L.CommaText := AValue;
- for i:= 1 to 12 do
- FFormatSettings.ShortMonthNames[i] := L[i-1];
- Invalidate;
- finally
- L.Free;
- end;
-end;
-
procedure TCalendarLite.SetMultiSelect(AValue: Boolean);
begin
if AValue = FMultiSelect then
@@ -1933,6 +2066,80 @@ begin
InternalClick;
end;
+procedure TCalendarlite.UseDayName(ADayOfWeek: TDayOfWeek; const AValue: String);
+var
+ p: Integer;
+ d: Integer;
+begin
+ if AValue = '' then exit;
+ d := ord(ADayOfWeek);
+ p := pos('|', AValue);
+ if p > 0 then begin
+ FFormatSettings.LongDayNames[d] := Trim(Copy(AValue, 1, p-1));
+ FFormatSettings.ShortDayNames[d] := Trim(Copy(AValue, p+1, MaxInt));
+ end else begin
+ FFormatSettings.LongDayNames[d] := Trim(AValue);
+ FFormatSettings.ShortDayNames[d] := FFormatSettings.LongDayNames[d];
+ end;
+end;
+
+procedure TCalendarLite.UseDayNames(const AValue: String);
+var
+ L: TStrings;
+ i, d: Integer;
+begin
+ L := TStringList.Create;
+ try
+ L.CommaText := AValue;
+ for i:=0 to L.Count-1 do begin
+ d := succ(i);
+ if d <= 7 then
+ UseDayName(TDayOfWeek(d), L[i]);
+ end;
+ finally
+ L.Free;
+ end;
+end;
+
+procedure TCalendarLite.UseDisplayTexts(const AValue: String);
+begin
+ SetDisplayTexts(AValue);
+end;
+
+procedure TCalendarLite.UseMonthName(AMonth: Integer; const AValue: String);
+var
+ p: Integer;
+begin
+ if AValue = '' then
+ exit;
+ p := pos('|', AValue);
+ if p <> 0 then begin
+ FFormatSettings.LongMonthNames[AMonth] := Trim(Copy(AValue, 1, p-1));
+ FFormatSettings.ShortMonthNames[AMonth] := Trim(Copy(AValue, p+1, MaxInt));
+ end else begin
+ FFormatSettings.LongMonthNames[AMonth] := Trim(AValue);
+ FFormatSettings.ShortMonthNames[AMonth] := FFormatSettings.LongMonthNames[AMonth];
+ end;
+end;
+
+procedure TCalendarLite.UseMonthNames(const AValue: String);
+var
+ L: TStrings;
+ i, m: Integer;
+begin
+ L := TStringList.Create;
+ try
+ L.CommaText := AValue;
+ for i:=0 to L.Count - 1 do begin
+ m := succ(i);
+ if m <= 12 then
+ UseMonthName(m, L[i]);
+ end;
+ finally
+ L.Free;
+ end;
+end;
+
procedure TCalendarLite.YearMenuItemClicked(Sender: TObject);
begin
FCalDrawer.GotoYear(TMenuItem(Sender).Tag);