Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   MouseMove Code der Klasse überschreiben (https://www.delphipraxis.net/182924-mousemove-code-der-klasse-ueberschreiben.html)

Bjoerk 26. Nov 2014 21:32


MouseMove Code der Klasse überschreiben
 
Ich habe eine Klasse TsgDrawingNavigator = class(TCustomControl). TsgDrawingNavigator überschreibt:
Delphi-Quellcode:
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;
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:
Delphi-Quellcode:
  published
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
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?

Dejan Vu 27. Nov 2014 07:25

AW: MouseMove Code der Klasse überschreiben
 
Du übersiehst, das einerseits Methoden überschrieben, aber andererseits Events publiziert werden.

baumina 27. Nov 2014 07:37

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).

DeddyH 27. Nov 2014 07:40

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;

Dejan Vu 27. Nov 2014 07:46

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.

Sir Rufo 27. Nov 2014 07:50

AW: MouseMove Code der Klasse überschreiben
 
Die Frage ist, ob
Delphi-Quellcode:
OnMouseMove
erst gfeuert wird und dann der Code abgearbeitet. Dann wäre ein simples
Delphi-Quellcode:
Abort
in der Event-Methode eine Möglichkeit die Ausführung des Codes zu verhindern.

Das muss man sich im Zweifel direkt im Code von
Delphi-Quellcode:
TControl
bis zu der Zielklasse anschauen. Wenn da was vor dem jeweiligen
Delphi-Quellcode:
inherited
steht, wird das eben vorher ausgeführt.

Bjoerk 27. Nov 2014 09:52

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 22:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz