Hallo,
ein besserer Titel ist mir leider nicht eingefallen, hoffe man versteht trotzdem was ich meine.
Bin immer noch am entwickeln meiner ersten Komponente, stehe aber im Moment gerade vor dem nächsten Problem. Zur Zeit verwende ich folgenden Source, um die Mausbotschaften MouseOver und MouseLeave meiner Items an die Komponente DateLine zu übergeben.
Delphi-Quellcode:
TControlDateItem = class(TGraphicControl)
private
FOnMouseOver : TNotifyEvent;
FOnMouseLeave : TNotifyEvent;
procedure MouseOver(var Message : TMessage); message CM_MOUSEENTER;
procedure MouseLeave(var Message : TMessage); message CM_MOUSELEAVE;
...
published
property OnMouseOver : TNotifyEvent read FOnMouseOver write FOnMouseOver;
property OnMouseLeave : TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
...
end;
TDateLine = class(TCustomGrid)
private
FItemMouseOver : TNotifyEvent;
FItemMouseLeave : TNotifyEvent;
procedure ItemMouseOver(Sender : TObject);
procedure ItemMouseLeave(Sender : TObject);
...
published
property OnItemLeave : TNotifyEvent read FItemMouseLeave write FItemMouseLeave;
property OnItemDown : TMouseEvent read FItemMouseDown write FItemMouseDown;
...
end;
procedure TDateLine.UpdateItem(Item : TDateItem);
begin
if Item <> nil then
begin
with Item.FControlDateItem do
begin
OnMouseOver := ItemMouseOver;
OnMouseLeave := ItemMouseLeave;
end;
end;
end;
Nun möchte ich auch MouseDown, MouseUp usw. übergeben.
Ich denke mal, daß ich mit folgendem Source auf dem richtigen Weg bin.
Delphi-Quellcode:
TControlDateItem = class(TGraphicControl)
private
FOnMouseDown : TMouseEvent;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); override;
...
published
property OnMouseDown : TMouseEvent read FOnMouseDown write FOnMouseDown;
...
end;
TDateLine = class(TCustomGrid)
private
FItemMouseDown : TMouseEvent;
procedure ItemMouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer);
...
published
property OnItemDown : TMouseEvent read FItemMouseDown write FItemMouseDown;
...
end;
Die Zuweisung
Delphi-Quellcode:
procedure TDateLine.UpdateItem(Item : TDateItem);
begin
if Item <> nil then
begin
with Item.FControlDateItem do
begin
...
OnMouseDown := ItemMouseDown;
end;
end;
end;
funktioniert natürlich nicht da noch die Parameter
(Button: TMouseButton; Shift: TShiftState;X, Y: Integer);
übergeben werden müssen, und hier liegt mein Problem wie sollte die Syntax genau aussehen?
Danke schonmal an alle die sich dieses Problems annehmen.
Uwe