Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TPoints vergleichen (https://www.delphipraxis.net/67488-tpoints-vergleichen.html)

xZise 15. Apr 2006 11:57


TPoints vergleichen
 
Wie kann man zwei TPoints DIREKT vergleichen?

Also ich meine nicht über
P1.X = P2.X
P1.Y = P2.Y

Hawkeye219 15. Apr 2006 12:05

Re: TPoints vergleichen
 
Eine Möglichkeit, die (noch) funktioniert:

Delphi-Quellcode:
if Int64(P1) = Int64(P2) then...
Ob es lesbar ist und viel bringt, ist fraglich.

Gruß Hawkeye

MrKnogge 15. Apr 2006 12:18

Re: TPoints vergleichen
 
xZise, du kannst dir doch auch eine kleine funktion schreiben:
Delphi-Quellcode:
function IsPointDifferently(point1, point2: TPoint): boolean;
begin
  result := (point1.x <> point2.x) or (point1.y <> point2.y);
end;
gruss

Jelly 15. Apr 2006 13:23

Re: TPoints vergleichen
 
TPoint ist ein Record, und in Delphi 2006 gibts noch Überladen von Operatoren. Dazu musst du dein TPoint noch definieren:

Delphi-Quellcode:
interface
TPoint = record
     x, y : LongInt ;
     class operator Equal (p1, p2 : TPoint) : boolean ;
end ;

implementation
class operator TPoint.Equal(p1, p2: TPoint): boolean;
begin
     Result := (p1.x = p2.x) and (p1.y = p2.y);
end;

end.
Und dann kannst du ganz bequem deine Punkte vergleichen:

Delphi-Quellcode:
var
 n1, n2 : TPoint ;
begin
     if n1 = n2 then ; // Tuwas
end ;
Aber ob dazu zu raten ist, ist ne andere Frage.

xZise 15. Apr 2006 13:32

Re: TPoints vergleichen
 
@ Hawkeye219:
Warum "noch"

@ MrKnogge:
Danke ^^ Hatte ich auch so gemacht

@ Jelly:
Hatte ich auch gesehen, aber ich habe D2006 net... Nur D2005 PE!

@ all:
Hat sich somit erledigt, wenn keiner eine bessere für D2005 PE, wie die von MrKnogge ist, kennt.

negaH 15. Apr 2006 14:33

Re: TPoints vergleichen
 
Kenne auch nichts besseres würde aber statt

Delphi-Quellcode:
function IsPointDifferently(point1, point2: TPoint): boolean;
ein

Delphi-Quellcode:
function EqualPoint(const Point1, Point2: TPoint): Boolean;
vorziehen.

1.) vergleichbar zu EqualRect()
2.) const Parameter

Gruß Hagen

Hawkeye219 15. Apr 2006 14:40

Re: TPoints vergleichen
 
Zitat:

Zitat von xZise
@ Hawkeye219:
Warum "noch"

Falls die Breite der TPoint-Felder auf 64 Bit geändert wird, funktioniert der TypeCast nicht mehr. Der wParam-Parameter in den Messages wurde auch mal von 16 Bit auf 32 Bit verbreitert.

Mein Rat: bleibe bei den Einzel-Vergleichen, das ist für den Leser leichter nachzuvollziehen. Der von Delphi erzeugte Assembler-Code ist für beide Varianten übrigens nahezu identisch. Bei den Einzelvergleichen kommt Delphi sogar mit einem CPU-Register aus.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 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