Hallo,
ich bin am entwickeln meiner ersten Komponente, stehe aber im Moment gerade vor einem Problem. Zur Zeit verwende ich folgenden Source, um die Mausbotschaften MouseOver und MouseLeave meiner Items an die Komponente DateLine(StringGrid) zu übergeben. siehe auch ScreenShot.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| 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.
Dies ist mein Ansatz.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| 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-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TDateLine.UpdateItem(Item : TDateItem); begin if Item <> nil then begin with Item.FControlDateItem do begin ... OnMouseDown := ItemMouseDown; end; end; end; |
funktioniert so 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?
Wenn ich bei meinen Items nur die vorhandenen MouseDown, MouseUp überschreibe wird nur die mittlere und rechte Maustaste ausgewertet. Und das verstehe ich überhaupt nicht.
Danke schonmal an alle die sich dieses Problems annehmen.
Uwe