AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rechteck verschieben

Ein Thema von delphicoder123 · begonnen am 15. Jun 2019 · letzter Beitrag vom 17. Jun 2019
 
delphicoder123

Registriert seit: 14. Feb 2019
102 Beiträge
 
#1

Rechteck verschieben

  Alt 15. Jun 2019, 10:11
Ich möchte ein Programm erstellen, indem man ein Rechteck an beliebiger Stelle im Formular verschieben kann.
Nach dem Verschieben, soll das alte Rechteck verschwinden.
Mir ist klar, dass ich noch einiges zu implementieren und zu bearbeiten habe.

Zu meinem Code habe ich aktuell folgende Fragen:


1) Warum wird beim FormCreate kein Rechteck angezeigt? Beim Button1 Click Event, wird das Rechteck angezeigt, obwohl es derselbe Code ist.
2) In der Funktion rechteckGetroffen erkennt er, die Variablen x1,x2,y1,y2 nicht. Warum ist das so?
3) Mit Mouse.CursorPos.X und Mouse.CursorPos.Y möchte ich herausfinden, ob sich die Maus im Rechteck befindet.
Wenn ich den Wert, von Mouse.CursorPos.X/Mouse.CursorPos.Y abfrage, erhalte ich jedesmal einen unterschiedlichen Wert. Was mache ich falsch?
4) Über jeden weiteren Tip, bin ich auch dankbar


Das ist mein Code:

Code:
unit unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  rechteck1 : TRect;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//var TheRect: TRect;
begin
  {TheRect := Rect(10,10,100,100);
  paintbox1.Canvas.Brush.Color := clBlack;
  paintbox1.Canvas.FrameRect(TheRect);}
  rechteck1:=TRect.erzeugen(10, 10, 100, 100, clred, form1);
end;





procedure TForm1.FormCreate(Sender: TObject);
begin
  rechteck1:=TRect.erzeugen(10, 10, 100, 100, clred, form1);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  rechteck1.anfassen;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  rechteck1.ziehen;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  rechteck1.loslassen;
end;

end.
Code:
unit rechteck;

interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;
type
  TRect = class(TObject)

  private
  z:Integer; // Zustand (0,1)
  x1,x2,y1,y2: Integer;
  clr: TColor;
  cvs: TCanvas; // Zeichenfläche

  public
    constructor erzeugen(b1,h1,b2,h2: Integer; co: TColor; f:TForm);
    procedure zeichnen;
    procedure anfassen;
    procedure ziehen;
    procedure loslassen;
end;



implementation

constructor TRect.erzeugen;
begin
  z:=0;
  f.Color:=clwhite;
  x1:=b1;
  x2:=b2;
  y1:=h1;
  y2:=h2;
  cvs:=f.Canvas;
  //cvs.Pen.Mode:= pmXOR;
  //clr:= co XOR clWhite;
  zeichnen;
end;

procedure TRect.zeichnen;
begin
  with cvs do
    begin
      Pen.Color:=clred;
      Rectangle(x1,y1,x2,y2);
      MoveTo(Mouse.CursorPos.X, Mouse.CursorPos.Y);
    end;
end;

function rechteckGetroffen: Boolean;
begin
  {if (Mouse.CursorPos.X > x1) AND (Mouse.CursorPos.X < x2) AND
      (Mouse.CursorPos.Y > y1) AND (Mouse.CursorPos.Y < y2) then
      result:=true
    else }
      result:=false;

end;

procedure TRect.ziehen();
begin
  if z=0 then
      exit
    else
      begin
        zeichnen;
      end;
end;

procedure TRect.loslassen;
begin
  z:=0;
end;

procedure TRect.anfassen;
begin
   if rechteckGetroffen then
    z:=1;
end;

end.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:28 Uhr.
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