Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MouseDown, ..Up, ..Move einer Klasse hinzufügen? (https://www.delphipraxis.net/152179-mousedown-up-move-einer-klasse-hinzufuegen.html)

moelski 14. Jun 2010 12:50

Delphi-Version: 2010

MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Moin !

Ich habe da eine sehr primitive Klasse:
Delphi-Quellcode:
{$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 würde gerne dieser Klasse Funktionen wie OnMouseMove, OnMouseDown, ... geben. Kann mir jemand einen Tip geben wie man das am besten anstellt?
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.

SirThornberry 14. Jun 2010 12:53

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.

DeddyH 14. Jun 2010 12:54

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]

moelski 14. Jun 2010 12:55

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Was müsste ich denn umbauen um die entsprechenden Nachrichten abfangen zu können?

DeddyH 14. Jun 2010 12:56

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Zitat:

Zitat von DeddyH (Beitrag 1028735)
Ich würde an Deiner Stelle von TGraphicControl oder TCustomControl ableiten, ...

Schon versucht?

moelski 14. Jun 2010 13:20

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Moin !

Zitat:

Schon versucht?
Ja. Habe meine Klasse jetzt so abgeleitet:
Delphi-Quellcode:
TRecty = Class(TGraphicControl)
Habe dann aber 2 neue Fragen ...

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?

DeddyH 14. Jun 2010 13:31

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;

uligerhardt 14. Jun 2010 14:36

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
<ot mode="klugscheiss">Wäre statt dem
Zitat:

Zitat von moelski (Beitrag 1028732)
Delphi-Quellcode:
     FX, FY, // X, Y Position (Left Top)
     FW, FH : Integer; // Width, Height

nicht das
Delphi-Quellcode:
     FLeft, FTop,
     FWidth, FHeight: Integer;
besser?
</ot>

DeddyH 14. Jun 2010 18:15

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Ist ja jetzt gar nicht mehr nötig, da automatisch geerbt. ;)

uligerhardt 14. Jun 2010 18:38

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Zitat:

Zitat von DeddyH (Beitrag 1028848)
Ist ja jetzt gar nicht mehr nötig, da automatisch geerbt. ;)

Stümmbt natürlich. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 Uhr.
Seite 1 von 2  1 2      

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