![]() |
AW: Rechteck verschieben
Könntet ihr mir bei folgenden Punkten noch helfen:
1) Wie überprüfe ich, ob die Maus innerhalb vom Rechteck ist? Mit welcher Methode? 2) Wenn der User die Maus loslässt, dann brauche ich zu diesem Zeitpunkt die Koordinaten der Maus im Formular. Wie bekomme ich diese? Mit welcher Methode? |
AW: Rechteck verschieben
Zitat:
Du hast leider den Fehler gemacht, deine Rechteck-Klasse TRect zu nennen. Dadurch hast Du einen Namenskonflikt mit dem Delphi-Typ TRect aus der Unit System.Types. Das ist ein Record mit vielen nützlichen Methoden, darunter
Delphi-Quellcode:
Siehe
function Contains(const Pt: TPoint): Boolean; overload;
![]() |
AW: Rechteck verschieben
Mit ClientToScreen und ScreenToClient bekomme ich also die Koordinaten der Maus.
Screen Koordinaten sind wahrscheinlich Koordinaten auf dem Bildschirm? Und was sind Client Koordinaten? |
AW: Rechteck verschieben
Rat mal. Oder guck in der Hilfe.
Was bleibt denn noch übrig? Richtig das übergeordnete Fenster. |
AW: Rechteck verschieben
Zitat:
Ich habe aus der Funktion eine Prozedur gemacht. Trotzdem werden die Variablen x1,x2,y1 und y2 nicht erkannt
Code:
procedure rechteckGetroffen(var getroffen: Bool);
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 getroffen:=false; end; |
AW: Rechteck verschieben
Wo sind sie denn deklariert?
|
AW: Rechteck verschieben
Sind als private-Variablen deklariert
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 TRechteck = class(TObject) private z:Integer; // Zustand (0,1) x1,x2,y1,y2: Integer; clr: TColor; cvs: TCanvas; // Zeichenfläche formular: TForm; |
AW: Rechteck verschieben
Deine Procedure ist aber keine Methode deiner Klasse. Du solltest dich mal mit den Grundlagen der Objektorientierten Programmierung unter vertraut machen.
|
AW: Rechteck verschieben
Du musst deine Procedure und oder Function in deine Klasse packen..
Delphi-Quellcode:
Das ergebniss ist dann
TRechteck = class(TObject)
private z:Integer; // Zustand (0,1) x1,x2,y1,y2: Integer; clr: TColor; cvs: TCanvas; // Zeichenfläche procedure rechteckGetroffen(var getroffen: Bool); // <<< Hier gehört die rein!!! public end;
Delphi-Quellcode:
procedure TRechteck.rechteckGetroffen(var getroffen: Bool);
Und nicht...
Delphi-Quellcode:
procedure rechteckGetroffen(var getroffen: Bool);
TIP: Rechte maustaste auf die Class und dann im Menu auf "complete class at Cursor" und da dann dein Zeugs rein! Damit hast du keinen zugriff auf die Koordinaten die in deiner Klasse definiert sind. Zitat:
Das bist du erst dann wenn du deine Procedure dort einlagerst.
Delphi-Quellcode:
Das ist auch falsch wenn schon dann beide Rückgaben "getroffen" nicht einmal Result und einmal getroffen
procedure rechteckGetroffen(var getroffen: Bool);
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 getroffen:=false; end; Verwende bitte in Zukunft die Delphi Tags im Forum Editor das ist das Icon mit dem Delphi Symbol nicht das Code(C++) Symbol. gruss |
AW: Rechteck verschieben
Bei mir wird beim onmouseDown Event folgender Code ausgeführt:
"formular" ist eine private Variable. Warm bekomme ich immer noch die falschen koordinaten wenn ich innerhalb vom Rechteck bin?
Delphi-Quellcode:
function TRechteck.rechteckGetroffen(): Boolean;
var pt: TPoint; begin pt:= Mouse.CursorPos; {if (formular.ScreenToClient(Mouse.CursorPos).X >= x1) AND (formular.ScreenToClient(Mouse.CursorPos).x <= x2) AND (formular.ScreenToClient(Mouse.CursorPos).Y >= y1) AND (formular.ScreenToClient(Mouse.CursorPos).Y <= y2) then result:=true else result:=false; } pt := formular.screenToClient(pt); if (pt.X >= x1) AND (pt.x <= x2) AND (pt.Y >= y1) AND (pt.Y <= y2) then result:=true else result:=false; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz