![]() |
Delphi-Version: 2010
MouseDown, ..Up, ..Move einer Klasse hinzufügen?
Moin !
Ich habe da eine sehr primitive Klasse:
Delphi-Quellcode:
Ich würde gerne dieser Klasse Funktionen wie OnMouseMove, OnMouseDown, ... geben. Kann mir jemand einen Tip geben wie man das am besten anstellt?
{$M+}
unit Recty; interface uses Classes, Graphics; type TRecty = Class private FX, FY, // X, Y Position (Left Top) FW, FH : Integer; // Width, Height FScale : Double; // Scaling ... FCanvas : TCanvas; published constructor Create(); procedure Draw; property X : Integer read FX write FX; property Y : Integer read FY write FY; property W : Integer read FW write FW; property H : Integer read FH write FH; property Scale : Double read FScale write FScale; property Canvas : TCanvas read FCanvas write FCanvas; end; implementation constructor TRecty.Create(); begin inherited; Scale := 1.0; end; procedure TRecty.Draw; begin FCanvas.Rectangle(Trunc(X ), Trunc(Y ), Trunc((X+W) * Scale), Trunc((Y+H) * Scale)); end; end. Ich kann zwar in meinem Formular wo ich zeichne die entsprechenden Funktionen hinterlegen, aber ich fände es eleganter wenn das die Klasse (sofern das geht) selber übernimmt. Ziel soll es erstmal sein, dass ich mit gedrückter Maustaste das Rechteck verschieben kann. |
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
da deine Klasse von TObject abgeleitet wurde und somit nicht selbst Nachrichten empfängt etc. ist das nicht möglich.
|
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
Ich würde an Deiner Stelle von TGraphicControl oder TCustomControl ableiten, dann musst Du das Rad nicht neu erfinden. Zumindest muss Deine Klasse aber in der Lage sein, Botschaften zu empfangen.
[edit] Einen Hauch zu spät :? [/edit] |
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
Was müsste ich denn umbauen um die entsprechenden Nachrichten abfangen zu können?
|
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
Zitat:
|
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
Moin !
Zitat:
Delphi-Quellcode:
Habe dann aber 2 neue Fragen ...
TRecty = Class(TGraphicControl)
1) OnMouseMove (u.a.) ist protected. Muss ich das dann als Property in meiner eigenen Klasse definieren? 2) Die Klasse TGraphicControl hat eine Methode Paint. Übernimmt die für mich das Zeichnen? Wenn ja, muss ich die vermutlich mit einer eigenen Methode überschreiben, oder? |
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
Du musst die Ereignisse nur noch in den public- oder published(wenn Komponente)-Abschnitt verschieben. Und richtig, die Paint-Methode ist der richtige Angriffspunkt, die musst Du überschreiben.
[edit] Das sollte dann ungefähr so aussehen:
Delphi-Quellcode:
TRecty = Class(TGraphicControl)
... protected procedure Paint; override; public property OnMouseMove; property OnMouseDown; ... end; ... procedure TRecty.Paint; begin inherited; //Dein Code end; |
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
<ot mode="klugscheiss">Wäre statt dem
Zitat:
Delphi-Quellcode:
besser?
FLeft, FTop,
FWidth, FHeight: Integer; </ot> |
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
Ist ja jetzt gar nicht mehr nötig, da automatisch geerbt. ;)
|
AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 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