AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MouseMove Code der Klasse überschreiben

Ein Thema von Bjoerk · begonnen am 26. Nov 2014 · letzter Beitrag vom 27. Nov 2014
Antwort Antwort
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

MouseMove Code der Klasse überschreiben

  Alt 26. Nov 2014, 22:32
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?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: MouseMove Code der Klasse überschreiben

  Alt 27. Nov 2014, 08:25
Du übersiehst, das einerseits Methoden überschrieben, aber andererseits Events publiziert werden.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: MouseMove Code der Klasse überschreiben

  Alt 27. Nov 2014, 08:37
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).
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

AW: MouseMove Code der Klasse überschreiben

  Alt 27. Nov 2014, 08:40
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#5

AW: MouseMove Code der Klasse überschreiben

  Alt 27. Nov 2014, 08:46
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: MouseMove Code der Klasse überschreiben

  Alt 27. Nov 2014, 08:50
Die Frage ist, ob OnMouseMove erst gfeuert wird und dann der Code abgearbeitet. Dann wäre ein simples 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 TControl bis zu der Zielklasse anschauen. Wenn da was vor dem jeweiligen inherited steht, wird das eben vorher ausgeführt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: MouseMove Code der Klasse überschreiben

  Alt 27. Nov 2014, 10:52
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?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 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