Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet (https://www.delphipraxis.net/156907-ueberpruefen-ob-eine-komponente-sich-einem-bestimmten-bereich-befindet.html)

snears 20. Dez 2010 11:13

Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Guten Morgen,

wie der Titel schon verrät such ich einen Code oder eine Code-Folge, die überprüft ob eine Komponente sich in einem bestimmten Bereich befindet.
Es kann jede beliebige Komponente sein und dies Abfrage soll zur Laufzeit stattfinden.
Mein Vater hat gesagt das es so was ähnliches auch bei anderen Programmiersprachen gäbe, mit dem Befehl "#.exist". Meine Delphi Kenntnisse sind noch nicht sonderlich groß, würde mich über ein paar Antworten freuen.

Als bsp.:

Eine shape-Komponente besitzt die Koordinaten 50/ 100 so wenn diese Shape-Komponente nun in den Bereich von 100/100 und 150/100, dann soll eine bestimmte procedure ablaufen.


Ich möchte aber ungern alles mit eine IF - Abfrage machen da es mehrere Shape-Komponenten sind und nicht nur ein Bereich sondern 5 Bereiche überprüft werden sollen.
Möchte auch den ProgrammCode kurz halten und auch übersichtlich lassen, ich glaube kaum das es funktioniert, wenn so viele if-Abfragen kommen ;)

Gruß

Snears

stahli 20. Dez 2010 11:27

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Schau mal nach "IntersectRect".

snears 20. Dez 2010 16:33

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Ich habe mir bei DP und auch bei google "IntersectRect" eingegeben... auch die delphi hilfe habe ich benutzt.
Das einzige was ich erfahren konnte war das man das auch als funktion benutzen kann... nun habe ich aber keine ahnung wie ich überprüfen kann ob in dem bereich 0 bis 100 sich eine shape-komponente sich befindet

könnte mir jmd einen eine kleine hilfe geben... und bitte sagt nicht ich solle doch nochmal die delphi hilfe benutzen oder ähnliches... weil die bringt mich kaum weiter :)

danke

stahli 20. Dez 2010 16:41

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Ehe wir aneinander vorbei reden:
Du hast eine sichtbare Komponente und willst wissen, ob sie innerhalb des Parent einen bestimmten Bereich überdeckt?
Mich irritiert etwas, dass Du immer von 2 Koordinaten ausgehst, ein Rechteck besteht aber aus 4.
IntersectRect liefert Dir eine Schnittmenge zweier Rechtecke bzw. die Information, ob ein Schnittbereich überhaupt vorliegt.

Schreib nochmal eine Info, dann kann ich Details raussuchen.

DeddyH 20. Dez 2010 16:47

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Delphi-Quellcode:
function Ueberlappung(R1, R2: TRect): Bool;
var dummy: TRect;
begin
  Result := IntersectRect(dummy,R1,R2);
end;

...

if Ueberlappung(Shape1.BoundsRect, Shape2.BoundsRect) then
  ShowMessage('Aha');
So in etwa müsste das doch funktionieren.

snears 20. Dez 2010 17:02

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Also gut...
Mehrere Shape-Komponenten bewegen sich auf dem Formular. Da es mir zu viele Shape-Komponenten sind und ich nicht für jede die gleiche Abfrage machen möchte, würde ich gerne nur mit einer einzigen anweisung gleich eine Überprüfung machen die für alle shape-Kompontenen zählt.

Als Bsp.:

Shape1 besitzt die Koordinaten x:= 10
y:= 150

so der x wert verändert sich durch einen timer um 5.
Nun soll eine Überprüfung stattfinden ob sich diese Shape-Komponente in dem Bereich x >= 50 and x<= 150
und y >= 100 and y<= 200
dadurch entsteht ein rechteck (also nur gedanklich nicht, in dem Programm),
so nun gibt es ja die Überprüfung mit

Code:

if (shape1.left >= 50) and (shape1.left <= 150) and shape1.top >= 100) and (shape1.top <= 200) then
begin
// dann kommt hier die anweisung was passieren soll
end;

so aber ich möchte ungern das für 20 shapes machen...
ich möchte den Programmcode so kurz wie möglich halten

ich hoffe ihr versteht mein Problem nun besser

stahli 20. Dez 2010 18:39

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Ok, dann brauchst Du IntersectRect nicht.
Du willst ja nur die X- und Y-Koordinate eines Puntes prüfen.

Dazu ist Deine Prüfung ja völlig in Ordnung.
Evtl. kannst Du "InRange" verwenden, damit es etwas übersichtlicher wird.

Und Du solltest eine Prozedur definieren, der Du ein (oder nacheinander alle) Shapes übergibst, die dann die Prüfung durchführt und ggf. die gewünschte Aktion veranlasst.

Man könnte auch eine neue Shape-Komponente ableiten, die quasi "selbständig" bei jeder Posititionsänderung diese Prüfung und Aktion durchführt. Dazu muss man sich mit Komponentenentwicklung beschäftigen. Das hört sich schlimmer an als es ist :wink:, erfordert aber schon etwas Einarbeitungszeit.
Wenn Dein Projekt mit Funktionen und Prozeduren funktioniert, kannst Du Dich mal daran setzen, das ggf. in eine eigene Komponente einzubauen...

snears 21. Dez 2010 13:46

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Okay danke für die antwort... dann werde ich mich mal wieder an mein Programm setzten :)

DeddyH 21. Dez 2010 13:49

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Übrigens lässt sich die Abfrage ggf. mit MSDN-Library durchsuchenPtInRect noch etwas kürzen.

snears 21. Dez 2010 16:32

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
 
Funktioniert denn dieses "IntersectRect" auch wenn eine shape Komponente unsichtbar ist?
Weil dann könnte man ja theoretisch ein unsichtbare Shape-Komponente auf das Formular legen und dann prüfen ob die sich treffen... oder habe ich jetzt einen Gedankenfehler? :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 Uhr.
Seite 1 von 2  1 2      

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