Hallo.
Ich bin dabei, eine einfache
VCL zu entwickeln, die das Ereignis OnGetMonthInfo() von TMonthCalendar um den Parameter "Year" erweitert. Dazu muss ich auf das Ereignis OnGetMonthInfo abfangen, den Zusatzparameter berechnen und dann OnGetMonthInfoExt aufrufen. Es handelt sich hierbei um meine erste
VCL, die ich entwickle. Ich möchte in dem Gebiet auch mal was dazulernen.
Das Problem ist nun: Der Benutzer erhält bei der Komponente 2 Events: OnGetMonthInfo und OnGetMonthInfoExt. OnGetMonthInfo wird jedoch beim Create() Ereignis belegt und soll vom Benutzer nicht mehr verändert werden! Bei der Ableitung TExtMonthCalendar soll also OnGetMonthInfo von TMonthCalendar verschwinden.
Delphi-Quellcode:
unit ExtMonthCalendar;
interface
uses
SysUtils, Classes, Controls, ComCtrls, Messages, Windows, CommCtrl;
type
TOnGetMonthInfoExtEvent =
procedure(Sender: TObject; Month, Year: LongWord;
var MonthBoldInfo: LongWord)
of object;
TExtMonthCalendar =
class(TMonthCalendar)
private
FOnGetMonthInfoExt: TOnGetMonthInfoExtEvent;
procedure MyGetMonthInfo(Sender: TObject; Month: LongWord;
var MonthBoldInfo: LongWord);
protected
public
constructor Create(AOwner: TComponent);
override;
published
property OnGetMonthInfoExt: TOnGetMonthInfoExtEvent
read FOnGetMonthInfoExt
write FOnGetMonthInfoExt;
end;
procedure Register;
implementation
constructor TExtMonthCalendar.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
OnGetMonthInfo := MyGetMonthInfo;
end;
procedure TExtMonthCalendar.MyGetMonthInfo(Sender: TObject; Month: LongWord;
var MonthBoldInfo: LongWord);
var
Year: integer;
begin
if Assigned(FOnGetMonthInfoExt)
then
begin
Year := 2007;
// ToDo
FOnGetMonthInfoExt(Sender, Month, Year, MonthBoldInfo);
end;
end;
procedure Register;
begin
RegisterComponents('
Samples', [TExtMonthCalendar]);
end;
end.
Ich dachte mir nun, ich könnte meine neue Methode einfach auch OnGetMonthInfo anstelle von OnGetMonthInfoExt nennen. Dadurch kann der Benutzer auf das OnGetMonthInfo von TMonthCalendar nicht mehr zugreifen. Aber dann habe ich das Problem, dass ich bei der Create()-Methode das OnGetMonthInfo von TMonthCalendar nicht mehr setzen kann.
Ich hatte auch mal ausprobiert, über die Message CN_NOTIFY zu gehen, um das Ereignis auszulösen, aber dann müsste ich Quellcode von der ComCtrls.pas kopieren und das wäre dann keine wirkliche Ableitung mehr...
Gruß
blackdrake