TvPlanIt: Add event OnPrepareEventFont to TVpDayView, TVpWeekView and TVpMonthView. (https://forum.lazarus.freepascal.org/index.php/topic,61758.0.html).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8667 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2022-12-31 12:55:15 +00:00
parent fcdd876a2b
commit 77c9810c0a
7 changed files with 61 additions and 39 deletions

View File

@ -83,6 +83,9 @@ type
TVpDateChangedEvent = procedure (Sender: TObject; TVpDateChangedEvent = procedure (Sender: TObject;
Date: TDateTime) of object; Date: TDateTime) of object;
TVpPrepareEventFontEvent = procedure (Sender: TObject;
AEvent: TVpEvent; AFont: TFont) of object;
{ contact events } { contact events }
TVpContactEvent = procedure(Sender: TObject; Contact: TVpContact) of object; TVpContactEvent = procedure(Sender: TObject; Contact: TVpContact) of object;

View File

@ -284,6 +284,7 @@ type
FOnDrawIcons: TVpOnDVDrawIcons; FOnDrawIcons: TVpOnDVDrawIcons;
FOnHoliday: TVpHolidayEvent; FOnHoliday: TVpHolidayEvent;
FOnModifyEvent: TVpOnModifyEvent; FOnModifyEvent: TVpOnModifyEvent;
FOnPrepareEventFont: TVpPrepareEventFontEvent;
FOwnerDrawCells: TVpOwnerDrawRowEvent; FOwnerDrawCells: TVpOwnerDrawRowEvent;
FOwnerDrawColHead: TVpOwnerDrawEvent; FOwnerDrawColHead: TVpOwnerDrawEvent;
FOwnerDrawRowHead: TVpOwnerDrawRowEvent; FOwnerDrawRowHead: TVpOwnerDrawRowEvent;
@ -534,6 +535,7 @@ type
property OnHoliday: TVpHolidayEvent read FOnHoliday write FOnHoliday; deprecated 'Use TControlLink.OnHoliday instead'; property OnHoliday: TVpHolidayEvent read FOnHoliday write FOnHoliday; deprecated 'Use TControlLink.OnHoliday instead';
property OnModifyEvent: TVpOnModifyEvent read FOnModifyEvent write FOnModifyEvent; property OnModifyEvent: TVpOnModifyEvent read FOnModifyEvent write FOnModifyEvent;
property OnOwnerEditEvent: TVpEditEvent read FOwnerEditEvent write FOwnerEditEvent; property OnOwnerEditEvent: TVpEditEvent read FOwnerEditEvent write FOwnerEditEvent;
property OnPrepareEventFont: TVpPrepareEventFontEvent read FOnPrepareEventFont write FOnPrepareEventFont;
property OnClick; property OnClick;
end; end;

View File

@ -883,6 +883,9 @@ begin
RenderCanvas, GutterRect, tmpRect, IconRect); RenderCanvas, GutterRect, tmpRect, IconRect);
end; end;
if Assigned(FDayView.OnPrepareEventFont) then
FDayView.OnPrepareEventFont(FDayView, AEvent, RenderCanvas.Font);
if FDayView.IconAttributes.ShowInPrint then if FDayView.IconAttributes.ShowInPrint then
DrawIcons(IconRect); DrawIcons(IconRect);

View File

@ -162,6 +162,7 @@ type
FOnModifyEvent: TVpOnModifyEvent; FOnModifyEvent: TVpOnModifyEvent;
FOwnerDrawCells: TVpOwnerDrawDayEvent; FOwnerDrawCells: TVpOwnerDrawDayEvent;
FOwnerEditEvent: TVpEditEvent; FOwnerEditEvent: TVpEditEvent;
FOnPrepareEventFont: TVpPrepareEventFontEvent;
{ property methods } { property methods }
function IsStoredDateLabelFormat: Boolean; function IsStoredDateLabelFormat: Boolean;
@ -343,6 +344,7 @@ type
property OnHoliday: TVpHolidayEvent read FOnHoliday write FOnHoliday; deprecated 'Use TControlLink.OnHoliday instead'; property OnHoliday: TVpHolidayEvent read FOnHoliday write FOnHoliday; deprecated 'Use TControlLink.OnHoliday instead';
property OnModifyEvent: TVpOnModifyEvent read FOnModifyEvent write FOnModifyEvent; property OnModifyEvent: TVpOnModifyEvent read FOnModifyEvent write FOnModifyEvent;
property OnOwnerEditEvent: TVpEditEvent read FOwnerEditEvent write FOwnerEditEvent; property OnOwnerEditEvent: TVpEditEvent read FOwnerEditEvent write FOwnerEditEvent;
property OnPrepareEventFont: TVpPrepareEventFontEvent read FOnPrepareEventFont write FOnPrepareEventFont;
end; end;

View File

@ -566,6 +566,8 @@ begin
{$ENDIF} {$ENDIF}
if TVpMonthViewOpener(FMonthView).mvMonthDayArray[I].OffDay then if TVpMonthViewOpener(FMonthView).mvMonthDayArray[I].OffDay then
RenderCanvas.Font.Color := FMonthView.OffDayFontColor; RenderCanvas.Font.Color := FMonthView.OffDayFontColor;
if Assigned(FMonthView.OnPrepareEventFont) then
FMonthView.OnPrepareEventFont(FMonthView, event, RenderCanvas.Font);
StrLen := RenderCanvas.TextWidth(Str); StrLen := RenderCanvas.TextWidth(Str);
if StrLen > WidthOf(TextRect) - txtMargin * 2 then if StrLen > WidthOf(TextRect) - txtMargin * 2 then

View File

@ -186,6 +186,7 @@ type
FOnHoliday: TVpHolidayEvent; FOnHoliday: TVpHolidayEvent;
FOnModifyEvent: TVpOnModifyEvent; FOnModifyEvent: TVpOnModifyEvent;
FOwnerEditEvent: TVpEditEvent; FOwnerEditEvent: TVpEditEvent;
FOnPrepareEventFont: TVpPrepareEventFontEvent;
// Property getter and setter methods // Property getter and setter methods
function IsStoredDateLabelFormat: Boolean; function IsStoredDateLabelFormat: Boolean;
@ -377,6 +378,7 @@ type
property OnHoliday: TVpHolidayEvent read FOnHoliday write FOnHoliday; deprecated 'Use TControlLink.OnHoliday instead'; property OnHoliday: TVpHolidayEvent read FOnHoliday write FOnHoliday; deprecated 'Use TControlLink.OnHoliday instead';
property OnModifyEvent: TVpOnModifyEvent read FOnModifyEvent write FOnModifyEvent; property OnModifyEvent: TVpOnModifyEvent read FOnModifyEvent write FOnModifyEvent;
property OnOwnerEditEvent: TVpEditEvent read FOwnerEditEvent write FOwnerEditEvent; property OnOwnerEditEvent: TVpEditEvent read FOwnerEditEvent write FOwnerEditEvent;
property OnPrepareEventFont: TVpPrepareEventFontEvent read FOnPrepareEventFont write FOnPrepareEventFont;
end; end;

View File

@ -32,6 +32,7 @@ type
ADBackgroundColor: TColor; ADBackgroundColor: TColor;
ADEventBackgroundColor: TColor; ADEventBackgroundColor: TColor;
ADEventBorderColor: TColor; ADEventBorderColor: TColor;
FSavedFont: TFont;
protected protected
procedure Clear; procedure Clear;
@ -465,45 +466,50 @@ var
I: Integer; I: Integer;
realCenter: Integer; realCenter: Integer;
begin begin
with TVpWeekViewOpener(FWeekView) do begin FSavedFont := TFont.Create;
// Initialize weekday array try
for I := 0 to pred(Length(wvWeekdayArray)) do begin with TVpWeekViewOpener(FWeekView) do begin
wvWeekdayArray[I].Rec.TopLeft := Point(-1, -1); // Initialize weekday array
wvWeekdayArray[I].Rec.BottomRight := Point(-1, -1); for I := 0 to pred(Length(wvWeekdayArray)) do begin
wvWeekdayArray[I].Day := 0; wvWeekdayArray[I].Rec.TopLeft := Point(-1, -1);
wvWeekdayArray[I].Rec.BottomRight := Point(-1, -1);
wvWeekdayArray[I].Day := 0;
end;
// Initialize event array
EAIndex := 0;
for I := 0 to pred(Length(wvEventArray)) do begin
wvEventArray[I].Rec.TopLeft := Point(-1, -1);
wvEventArray[I].Rec.BottomRight := Point(-1, -1);
wvEventArray[I].Event := nil;
end;
end; end;
// Initialize event array RenderCanvas.Pen.Color := RealLineColor;
EAIndex := 0; RenderCanvas.Pen.Style := psSolid;
for I := 0 to pred(Length(wvEventArray)) do begin
wvEventArray[I].Rec.TopLeft := Point(-1, -1); // Build the first day rect
wvEventArray[I].Rec.BottomRight := Point(-1, -1); DayRectHeight := (RealBottom - RealTop - FHeaderHeight) div 3;
wvEventArray[I].Event := nil; DayRectWidth := (RealRight - RealLeft) div 2;
end; DayRect := Rect(
RealLeft,
RealTop + FHeaderHeight,
RealLeft + DayRectWidth,
RealTop + FHeaderHeight + DayRectHeight
);
// Draw the day frames and texts
for I := 0 to 6 do
DrawDay(I, DayRect, EAIndex);
// Draw the center vertical line
RenderCanvas.Pen.Color := RealLineColor;
realCenter := RealLeft + (RealRight - RealLeft) div 2;
TPSMoveTo(RenderCanvas, Angle, RenderIn, realCenter, RealTop + FHeaderHeight + 1);
TPSLineTo(RenderCanvas, Angle, RenderIn, realCenter, RealBottom - 1);
finally
FSavedFont.Free;
end; end;
RenderCanvas.Pen.Color := RealLineColor;
RenderCanvas.Pen.Style := psSolid;
// Build the first day rect
DayRectHeight := (RealBottom - RealTop - FHeaderHeight) div 3;
DayRectWidth := (RealRight - RealLeft) div 2;
DayRect := Rect(
RealLeft,
RealTop + FHeaderHeight,
RealLeft + DayRectWidth,
RealTop + FHeaderHeight + DayRectHeight
);
// Draw the day frames and texts
for I := 0 to 6 do
DrawDay(I, DayRect, EAIndex);
// Draw the center vertical line
RenderCanvas.Pen.Color := RealLineColor;
realCenter := RealLeft + (RealRight - RealLeft) div 2;
TPSMoveTo(RenderCanvas, Angle, RenderIn, realCenter, RealTop + FHeaderHeight + 1);
TPSLineTo(RenderCanvas, Angle, RenderIn, realCenter, RealBottom - 1);
end; end;
procedure TVpWeekViewPainter.DrawEvent(AEvent: TVpEvent; TextRect: TRect; procedure TVpWeekViewPainter.DrawEvent(AEvent: TVpEvent; TextRect: TRect;
@ -514,11 +520,11 @@ var
todayEndTime: TDateTime; todayEndTime: TDateTime;
txtMargin: Integer; txtMargin: Integer;
strLen: Integer; strLen: Integer;
oldFontColor: TColor;
eventCat: TVpCategoryInfo; eventCat: TVpCategoryInfo;
R: TRect; R: TRect;
begin begin
oldFontColor := RenderCanvas.Font.Color; FSavedFont.Assign(RenderCanvas.Font);
txtmargin := FWeekView.TextMargin; txtmargin := FWeekView.TextMargin;
{ format the display text } { format the display text }
@ -540,6 +546,8 @@ begin
{$ENDIF} {$ENDIF}
if AEvent.IsOverlayed then if AEvent.IsOverlayed then
RenderCanvas.Font.Color := clGray; RenderCanvas.Font.Color := clGray;
if Assigned(FWeekView.OnPrepareEventFont) then
FWeekView.OnPrepareEventFont(FWeekView, AEvent, RenderCanvas.Font);
// Draw event background // Draw event background
RenderCanvas.Brush.Color := RealColor; RenderCanvas.Brush.Color := RealColor;
@ -574,7 +582,7 @@ begin
dayStr dayStr
); );
RenderCanvas.Font.Color := oldFontColor; RenderCanvas.Font.Assign(FSavedFont);
end; end;
procedure TVpWeekViewPainter.DrawHeader; procedure TVpWeekViewPainter.DrawHeader;