AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Rechteck verschieben

Ein Thema von delphicoder123 · begonnen am 15. Jun 2019 · letzter Beitrag vom 17. Jun 2019
Antwort Antwort
Seite 2 von 4     12 34   
delphicoder123

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

AW: Rechteck verschieben

  Alt 16. Jun 2019, 10:49
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?
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
669 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Rechteck verschieben

  Alt 16. Jun 2019, 16:10
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?
Der OnMouseUp-Event bringt die Koordinaten der Maus mit, schon auf Clientkoordinaten umgerechnet.

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

 function Contains(const Pt: TPoint): Boolean; overload; Siehe http://docwiki.embarcadero.com/Libra...em.Types.TRect
Peter Below
  Mit Zitat antworten Zitat
delphicoder123

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

AW: Rechteck verschieben

  Alt 16. Jun 2019, 17:51
Mit ClientToScreen und ScreenToClient bekomme ich also die Koordinaten der Maus.
Screen Koordinaten sind wahrscheinlich Koordinaten auf dem Bildschirm?
Und was sind Client Koordinaten?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

AW: Rechteck verschieben

  Alt 16. Jun 2019, 18:42
Rat mal. Oder guck in der Hilfe.

Was bleibt denn noch übrig? Richtig das übergeordnete Fenster.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
delphicoder123

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

AW: Rechteck verschieben

  Alt 16. Jun 2019, 22:13
Zitat:
Ich brauche aber einen Rückgabewert.
Delphi-Quellcode:
procedure MeineProcedure(Test: string; var MeineRückgabeinderProcedure: Integer);
begin
  if Test <> 'then
    MeineRückgabeinderProcedure := 10;
end;
Du siehst also um eine Rückgabe zu erhalten benötigt man nicht in jedem fall eine Funktion.
var ist das Schlüsselwort vor MeineRückgabeinderProcedure.

Ob er jetzt das als Methode meint keine Ahnung.

Oder wie in deinem Beispiel.
Delphi-Quellcode:
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
       Getroffen:=true
     else
       Getroffen:=false;

 end;
Delphi-Quellcode:
procedure TRect.anfassen;
var
 FGetroffen: BOOL;
begin
   rechteckGetroffen(FGetroffen);
   if FGetroffen then
     z:=1;
end;
gruss

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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#16

AW: Rechteck verschieben

  Alt 16. Jun 2019, 22:35
Wo sind sie denn deklariert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
delphicoder123

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

AW: Rechteck verschieben

  Alt 16. Jun 2019, 22:39
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#18

AW: Rechteck verschieben

  Alt 16. Jun 2019, 23:12
Deine Procedure ist aber keine Methode deiner Klasse. Du solltest dich mal mit den Grundlagen der Objektorientierten Programmierung unter vertraut machen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

AW: Rechteck verschieben

  Alt 16. Jun 2019, 23:17
Du musst deine Procedure und oder Function in deine Klasse packen..


Delphi-Quellcode:
  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;
Das ergebniss ist dann

procedure TRechteck.rechteckGetroffen(var getroffen: Bool);

Und nicht...
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:
Trotzdem werden die Variablen x1,x2,y1 und y2 nicht erkannt
Du kannst nicht auf eine private Eigenschaft von TRechteck zugreifen wenn du kein Member von TRechteck bist.
Das bist du erst dann wenn du deine Procedure dort einlagerst.

Delphi-Quellcode:
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;
Das ist auch falsch wenn schon dann beide Rückgaben "getroffen" nicht einmal Result und einmal getroffen
Verwende bitte in Zukunft die Delphi Tags im Forum Editor das ist das Icon mit dem Delphi Symbol nicht das Code(C++) Symbol.

gruss

Geändert von EWeiss ( 9. Jul 2019 um 09:31 Uhr)
  Mit Zitat antworten Zitat
delphicoder123

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

AW: Rechteck verschieben

  Alt 17. Jun 2019, 09:04
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;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:57 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