Delphi-PRAXiS
Seite 2 von 2     12   

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 17. Jun 2010 08:03

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

Irgendwas fehlt da noch, denn gezeichnet wird noch nix.
Meine Klasse:
Delphi-Quellcode:
{$M+}
unit Recty;

interface

uses Classes, Graphics, Controls;

type
 TRecty = Class(TGraphicControl)
   private
     FX, FY,                    // X, Y Position (Left Top)
     FW, FH        : Integer;  // Width, Height
     FScale        : Double;   // Scaling ...
   protected
     procedure Paint; override;
   published
//     constructor Create();

     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 OnMouseMove;
 end;

implementation

procedure TRecty.Paint;
begin
  inherited;
  Scale := 1;
  Canvas.Rectangle(Trunc(X  ),
                   Trunc(Y  ),
                   Trunc((X+W) * Scale),
                   Trunc((Y+H) * Scale));
end;

end.
Und so erzeuge ich eine Instanz (Items : array of TRecty):
Delphi-Quellcode:
  Items[ID] := TRecty.Create(Form1);
  Items[ID].Scale := 1;
  Items[ID].X := 10;
  Items[ID].Y := 10;
  Items[ID].W := 30;
  Items[ID].H := 30;
//  Items[ID].OnMouseMove := nil;
  Items[ID].Repaint;
  Canvas.Refresh;
Bei dem Paint komme ich allerdings nie an. :gruebel:

SirThornberry 17. Jun 2010 08:11

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Du hast keinen Parent angegeben und auch die Größe und Position (Left, Top, Width, Height) nicht gesetzt.
Zu dem kannst du x,y,w,h weg lassen da visuelle Komponenten bereits die Properties für Größe und Position besitzen:
Delphi-Quellcode:
yourComponent := TYourComponent.Create(Nil_Or_wanted_Owner);
yourComponent.Parent := your_wanted_parent;
yourComponent.setbounds(0, 0, 250, 250);
Und im überschriebenen Paint brauchst du natürlich dann nicht x,y,w und h zu verwenden sondern einfach nur breite und höhe.

moelski 17. Jun 2010 08:20

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

Delphi-Quellcode:
Items[ID].Parent := Form1;
Ich dachte das würde mit dem Create direkt übergeben mittels Owner, aber ok. Falsch gedacht.

Delphi-Quellcode:
Items[ID].setbounds(0, 0, 250, 250);
Ok, da wäre ich nie drauf gekommen.

Damit setzte ich den Bereich in dem gezeichnet werden kann, richtig?

uligerhardt 17. Jun 2010 09:07

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

Zitat von moelski (Beitrag 1029554)
Delphi-Quellcode:
Items[ID].setbounds(0, 0, 250, 250);
Ok, da wäre ich nie drauf gekommen.

Damit setzte ich den Bereich in dem gezeichnet werden kann, richtig?

Das setzt die Größe des Controls. Und da der Canvas eines TGraphicControls selbiges komplett überdeckt, kannst du dann auch überall im BoundsRect malen (bis auf einen etwaigen Rand vielleicht - muttu ausprobieren).

SirThornberry 17. Jun 2010 13:15

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
folgender Code
Delphi-Quellcode:
Items[ID].setbounds(0, 0, 250, 250);
macht nichts anderes als
Delphi-Quellcode:
Items[ID].Left := 0;
Items[ID].Top := 0;
Items[ID].Width := 250;
Items[ID].Height := 250;
Der Unterschied ist das es mit einem Funktionsaufruf erledigt ist. Wenn man Left, Top, Width und Height einzeln zuweist wird intern 4 mal setbounds aufgerufen.

DeddyH 17. Jun 2010 13:17

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
So steht es ja auch in der Hilfe.
Zitat:

Use SetBounds to change all of the component's boundary properties at one time. The same effect can be achieved by setting the Left, Top, Width, and Height properties separately, but SetBounds changes all four properties at once ensuring that the control will not repaint between changes.

SirThornberry 17. Jun 2010 13:21

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Ich glaub du bist der einzige in dem Thema hier der die Hilfe gelesen hat :thumb:

DeddyH 17. Jun 2010 14:38

AW: MouseDown, ..Up, ..Move einer Klasse hinzufügen?
 
Nunja, die gibt es ja schließlich nicht zum Spaß :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr.
Seite 2 von 2     12   

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