![]() |
MouseMove Code der Klasse überschreiben
Ich habe eine Klasse TsgDrawingNavigator = class(TCustomControl). TsgDrawingNavigator überschreibt:
Delphi-Quellcode:
TsgDrawingNavigator führt darin umfangreichen Code aus. Z.B. Zoomen ins Auswahlrechteck ect.. Diesen Code möchte ich aber nicht immer nutzen. Desweiteren sind noch die entsprechen Ereignisse veröffentlicht:
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
Delphi-Quellcode:
Hierin kann man zustzlichen Code ausführen. Meine Frage ist, wie kann eine Instanz von TsgDrawingNavigator diese Ereignisse von TsgDrawingNavigator überschreiben, also NICHT den Code der Klasse ausführen sondern "OwnerCode"? Verständlich?
published
property OnMouseDown; property OnMouseMove; property OnMouseUp; |
AW: MouseMove Code der Klasse überschreiben
Du übersiehst, das einerseits Methoden überschrieben, aber andererseits Events publiziert werden.
|
AW: MouseMove Code der Klasse überschreiben
Wahrscheinlich geht das nur wenn du noch zusätzlich eine property machst in der definiert ist, ob du ein Standardverhalten willst oder nicht (ähnlich dem TDBGrid.DefaultDrawing).
|
AW: MouseMove Code der Klasse überschreiben
Das hab ich mir auch gedacht, obwohl ich nicht sicher bin, das Problem wirklich verstanden zu haben.
Delphi-Quellcode:
procedure TsgDrawingNavigator.MouseMove(Shift: TShiftState; X, Y: Integer);
begin if Blabberblubb then inherited; WeitererCode; end; |
AW: MouseMove Code der Klasse überschreiben
Jetzt habe ich das auch verstanden.
Wie wird denn das Event aufgerufen? Du wirst wohl oder übel im Quellcode herumändern müssen. Alternative: Lege ein transparentes Panel auf das Control und verwende dessen Mausereignisse. Oder fange die Mausereignisse in der Form ab und leite sie nicht weiter. |
AW: MouseMove Code der Klasse überschreiben
Die Frage ist, ob
Delphi-Quellcode:
erst gfeuert wird und dann der Code abgearbeitet. Dann wäre ein simples
OnMouseMove
Delphi-Quellcode:
in der Event-Methode eine Möglichkeit die Ausführung des Codes zu verhindern.
Abort
Das muss man sich im Zweifel direkt im Code von
Delphi-Quellcode:
bis zu der Zielklasse anschauen. Wenn da was vor dem jeweiligen
TControl
Delphi-Quellcode:
steht, wird das eben vorher ausgeführt.
inherited
|
AW: MouseMove Code der Klasse überschreiben
Ich bin mit der gesamten CadVcl etwas unglücklich. Sie ist zweifelsohne sehr leistungsstark und auch sehr schnell. Im Wesentlichen erweitert sie TGraphic um weitere Formate mit der Möglichkeit auf die einzelnen Elemente der Zeichnung zuzugreifen. Sie ist aber fast null dokumentiert. Die Hilfe zur gesamten Vcl (ca. 50 units, 200.000 Zeilen) hat so 10 Seiten, das war's. Wenn man den Support anschreibt kommt als Antwort meistens (sinngemäß) "dann schau dir halt die Klasse und die Beispiele an". Zu deutsch, dann quäl dich halt durch den Code. In einem Fall habe ich ein Speicherloch gemeldet. Da kam als Antwort "wir bestätigen das Speicherloch". In einem anderen Fall hab ich 2 Tage gebraucht um herauszufinden wieso mein Matheparser nicht mehr funktionierte. Die machen aus dem DecimalSeparator mal so einfach einen Punkt. In dem Fall hier seh ich’s wie baumina, es ist eine Variable erforderlich. Vielleicht gibt es die aber auch schon und ich überseh sie? Der Code ist nicht ganz einfach zu lesen. Die Klasse hat so 20 weitere props (public, nicht published) von denen man nicht weiß was soll es bedeuten. Deshalb haben die Klassen auch keine procedure register. Man muß alles per Code einstellen. Und wenn man jetzt an den Klassen rumschraubt weiß man ja nie ob das an anderer Stelle unerwünschte Auswirkungen hat. Und was wenn es eine neue Version der Klasse gibt?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 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 by Thomas Breitkreuz