Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TObject Bewegung auf MouseMove

  Alt 22. Aug 2007, 12:57
Hallo spawn89,

ich bewege ein Shape, das in einem Panel plaziert ist, folgendermaßen:

Delphi-Quellcode:
unit fSpielerBildDefinieren;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DBCtrls, ExtCtrls, ExtDlgs, StahliSoftStd;

type
  TFormSpielerBildDefinieren = class(TForm)
    PanelMain: TPanel;
...
    Shape: TShape;
...
  end;

var
  FormSpielerBildDefinieren: TFormSpielerBildDefinieren;
  MouseDownFlag:Boolean=False;
  MX,MY:Integer;


implementation

{$R *.dfm}

procedure TFormSpielerBildDefinieren.ShapeMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MouseDownFlag:=True;
  Shape.Pen.Color:=clBlue;
  MX:=X;
  MY:=Y;
end;

procedure TFormSpielerBildDefinieren.ShapeMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var P:TPoint;
begin
  BreakFlag:=True;
  if (MouseDownFlag) then begin
    P.X:=X;
    P.Y:=Y;
    P:=Shape.ClientToScreen(P);
    P:=PanelMain.ScreenToClient(P);
    Shape.Left:=(P.X-MX);
    Shape.Top:=(P.Y-MY);
    Shape.Refresh;
...
  end;
end;

procedure TFormSpielerBildDefinieren.ShapeMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MouseDownFlag:=False;
...
  Shape.Pen.Color:=clBlack;
end;
Wichtig ist dabei, dass man die Mausklickposition in globalen Variablen merkt und die untergeordnete Shapeposition zum übergeordneten Panel ermittelt. Dann wird die Shapeposition zu der aktuellen Mausposition (verschoben durch die Klickkoordinaten) ermittelt...

Stahli
  Mit Zitat antworten Zitat