Thema: Delphi Rechteck verschieben

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#24

AW: Rechteck verschieben

  Alt 17. Jun 2019, 09:42
Noch ne Spielerei..

Kopiere das vollständig in deine Unit1 dann kannst du sogar deinen Button auf der Form verschieben.
Delphi-Quellcode:
nit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TRechteck = class(TObject)
  private
    z: Integer;
    x1, x2, y1, y2: Integer;
    clr: TColor;
    cvs: TCanvas;
    procedure anfassen;
    procedure OnMouseMove(x, y: Integer);
    function rechteckGetroffen(var Getroffen: BOOL): Boolean;
  end;

  TForm1 = class(TForm)
    btnRechteck: TButton;
    lblXPosition: TLabel;
    lblYPosition: TLabel;
    lblXValue: TLabel;
    lblYValue: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure btnRechteckMouseMove(Sender: TObject; Shift: TShiftState;
      x, y: Integer);
    procedure btnRechteckMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; x, y: Integer);
    procedure btnRechteckMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; x, y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; x, y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  RechtEck: TRechteck;
  DragFlag: BOOL;
  MemX, MemY: Integer;

implementation

{$R *.dfm}

procedure TRechteck.anfassen;
var
  FGetroffen: BOOL;
  z: Integer;
begin
  rechteckGetroffen(FGetroffen);
  if FGetroffen then
    Form1.btnRechteck.Caption := 'true';
end;

procedure TForm1.btnRechteckMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; x, y: Integer);
begin

  DragFlag := True;
  MemX := x;
  MemY := y;
end;

procedure TForm1.btnRechteckMouseMove(Sender: TObject; Shift: TShiftState;
  x, y: Integer);
begin

  RechtEck.OnMouseMove(x, y);
  RechtEck.anfassen;

  if not DragFlag then
    exit;

  btnRechteck.Left := btnRechteck.Left + (x - MemX);
  btnRechteck.Top := btnRechteck.Top + (y - MemY);
end;

procedure TForm1.btnRechteckMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; x, y: Integer);
begin

  DragFlag := False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RechtEck := TRechteck.Create;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
  x, y: Integer);
begin
  Form1.btnRechteck.Caption := 'false';
end;

function TRechteck.rechteckGetroffen(var Getroffen: BOOL): Boolean;
var
  pt: TPoint;

begin

  pt := Form1.btnRechteck.ScreenToClient(Mouse.CursorPos);
  if PtInRect(Form1.btnRechteck.ClientRect, pt) then
  begin
    Result := True;
  end;

end;

{ TRechteck }

procedure TRechteck.OnMouseMove(x, y: Integer);
begin

  Form1.lblXValue.Caption := IntToStr(x);
  Form1.lblYValue.Caption := IntToStr(y);
end;

end.
Das war es jetzt von mir..
Sollte funktionieren.

gruss

Geändert von EWeiss (17. Jun 2019 um 10:59 Uhr)
  Mit Zitat antworten Zitat