![]() |
Ereignis vor überschreiben schützen
Hallo!
Ich hab eine Klasse von TGroupBox abgeleitet. Desweiteren weise ich im Constructor dem OnMouseMove-Ereignis ein Ereignis zu, dass die GroupBox verschiebbar ist. Wenn jetzt aber außerhalb der Unit, der Klasse ein OnMouseMove-Ereignis zugeweisen wird, dann ist ja das vordefinierte nichtmehr aktiv. Gibt es da eine Lösung? EDIT: Vielleicht ist es hilfreich wenn ich etwas Code poste:
Delphi-Quellcode:
unit Unit2;
interface uses StdCtrls, JvSimScope, Classes, JvSwitch, Controls, Windows, Messages; type TEkg = class(TGroupBox) (...) procedure EkgMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); public constructor Create(AOwner: TComponent); override; (...) end; implementation constructor TEkg.Create(AOwner: TComponent); begin inherited Create(AOwner); OnMouseMove := EkgMouseMove; (...) end; procedure TEkg.EkgMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Shift = [ssLeft] then begin ReleaseCapture; SendMessage((Sender as TGroupBox).Handle, WM_NCLBUTTONDOWN, 2, 0); end; end; (...) end. |
Re: Ereignis vor überschreiben schützen
Die Komponente würde ich nicht benutzen :wink: . Du musst die Message selbst abfangen, dann ist das Event auch für "Außenstehende" benutzbar.
|
Re: Ereignis vor überschreiben schützen
Daran hab ich auch schon gedacht...
Nur kenn ich mich mit den Messages nicht aus... ^^ Kann mir wer helfen? |
Re: Ereignis vor überschreiben schützen
Habe ich zwar noch nie gebraucht, aber ich probier es mal:
Delphi-Quellcode:
In Message steckt noch einiges drin:
type
TEkg = class(TGroupBox) (...) procedure EkgMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE; public constructor Create(AOwner: TComponent); override; (...) end; [...] procedure TControl.WMMouseMove(var Message: TWMMouseMove); begin inherited; [...] end;
Delphi-Quellcode:
TWMMouse = packed record
Msg: Cardinal; Keys: Longint; case Integer of 0: ( XPos: Smallint; YPos: Smallint); 1: ( Pos: TSmallPoint; Result: Longint); end; |
Re: Ereignis vor überschreiben schützen
Aus akutem Lustmangel irgendeine IDE zu öffnen ziel' ich mal ins Blaue...
Hat der Vorgänger deiner Klasse nicht eine virtual protected methode namens DoMouseMove? Einfach mal das ![]() Ich kapiere übrigens nicht wirklich wie du den Thread üersehen konntest, da schon der Titel danach aussieht als ob er für dich interessant sein könnte... :gruebel: Nachtrag: @Khabarakh Warum sich unnütz die Finger an API Calls dreckig machen, wenn das schon jemand im Vorgänger erledigt hat? :zwinker: |
Re: Ereignis vor überschreiben schützen
Ja ging so. Danke!
|
Re: Ereignis vor überschreiben schützen
für Ereignisse die nicht mit einer Message zu tun haben geht dann noch folgendes (falls auch keine Protected-Methode dafür da ist)
![]() man redeclariert also ein Event und greift auf das alte Event mit inherited zu.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 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