![]() |
Vererbung von Events
HiHo,
ich versuche folgendes:
Die Einfache Vererbung einer "protected"-Eigenschaft habe ich mit OnClick ziemlich einfach hinbekommen. Die Sache mit OnMouseDown gestaltet sich komplizierter... :pale: Aus den Beiträgen von ![]() ![]() ![]() ![]() Hier kommt die Cource:
Delphi-Quellcode:
An der Stelle wie immer herzlichen Dank für's lesen, und ich freue mich auf eure Antworten.
type
Wechselbutton = class(TCustomControl) private FOnMouseDown :TMouseEvent; b_MouseDown :Boolean; protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic; published Property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown; Property OnClick; end; implementation Procedure Wechselbutton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnMouseDown) then Begin FOnMouseDown(Self, Button, Shift, X, Y); b_MouseDown := True; End; end; MfG, hanselmansel |
Re: Vererbung von Events
Ich würde sagen, du solltest das Event in Ruhe lassen, und einfach auf die Message reagieren, das sähe so ähnlich aus:
Delphi-Quellcode:
(Dieses Control piepst jetzt einfach nur beim anklicken ;) )
TMyClass = class (TCustomControl)
protected procedure MouseDown (var Msg: TWMLButtonDown); message WM_LBUTTONDOWN; procedure MouseUp (var Msg: TWMLButtonUp); message WM_LBUTTONUP; published property OnMouseDown; end; { TMyClass } procedure TMyClass.MouseDown(var Msg: TWMLButtonDown); begin Windows.Beep(440, 100); end; procedure TMyClass.MouseUp(var Msg: TWMLButtonUp); begin Windows.Beep(880, 100); end; |
Re: Vererbung von Events
HiHo,
riesen Dank! Es klappt nun! :-D Der Vollständigkeit halber (wir wollen ja, dass der Thread auch späteren Lesern was bringt) sei gesagt, dass man die Unit Messages in die Uses-Klausel schreiben sollte, und der Prozedur einen Parameter übergeben muss.
Delphi-Quellcode:
Damit funktioniert schon mal ziemlich gut! :thumb:
procedure MouseDown(var Msg: TWMChar); message WM_LBUTTONDOWN;
vielen Dank für die schnelle Antwort! hanselmansel |
Re: Vererbung von Events
Hallo,
das müsste ausreichen.
Delphi-Quellcode:
OnMouseDown wird durch TControl eingeführt. In deiner Komponente musst Du lediglich OnMouseDown
type
Wechselbutton = class(TCustomControl) published Property OnMouseDown; Property OnClick; end; veröffentlichen. Wenn Du da Verhalten von OnMouseDown erweitern o. verändern willst kannst Du MouseDown überschreiben.
Delphi-Quellcode:
type
Wechselbutton = class(TCustomControl) protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; published Property OnMouseDown; Property OnClick; end; |
Re: Vererbung von Events
Du hättest einfach nur die Property in den published Teil schieben müssen.
So hast du einen *neuen* Event dklariert und somit den des Vorfahren versteckt!
Delphi-Quellcode:
published
property OnMouseMove; |
Re: Vererbung von Events
Hallo,
Zitat:
Delphi-Quellcode:
Damit überschreibst Du die originale MouseDown-Methode (die ist nicht umsonst as dynamic deklariert). So spart Du Dir die Sache mit den Events und machst es gleichzeitig so, wie die VCL das vorsieht.
type
TWechselbutton = class(TCustomControl) private b_MouseDown :Boolean; protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; // <-- published Property OnMouseDown; Property OnClick; end; implementation TWechselButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin b_MouseDown := True; inherited; end; Gruß xaromz //Edit: ja, ja, der rote Kasten... |
Re: Vererbung von Events
HiHo alle zusammen!
Ich habe es jetzt nach den Anweisungen von xaromz geschrieben, und es funktioniert wunderbar! (Sogar noch besser als vorher, denn jetzt funktionieren auch OnClick und OnMouseDown zusammen fehlerfrei :!: )Danke für die vielen, schnellen und ausführlichen Antworten! Love you all, :love: hanselmansel P.S.: :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz