AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von snears · begonnen am 20. Dez 2010 · letzter Beitrag vom 21. Dez 2010
Antwort Antwort
Seite 1 von 2  1 2      
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#1

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

  Alt 20. Dez 2010, 11:13
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
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 20. Dez 2010, 11:27
Schau mal nach "IntersectRect".
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#3

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 20. Dez 2010, 16:33
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
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 20. Dez 2010, 16:41
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 20. Dez 2010, 16:47
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#6

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 20. Dez 2010, 17:02
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
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...

Geändert von snears (20. Dez 2010 um 17:07 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 20. Dez 2010, 18:39
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 , 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...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#8

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 21. Dez 2010, 13:46
Okay danke für die antwort... dann werde ich mich mal wieder an mein Programm setzten
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 21. Dez 2010, 13:49
Übrigens lässt sich die Abfrage ggf. mit MSDN-Library durchsuchenPtInRect noch etwas kürzen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#10

AW: Überprüfen ob eine Komponente sich in einem bestimmten Bereich befindet

  Alt 21. Dez 2010, 16:32
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?
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:06 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