Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kollision mit Image und Maus ? (https://www.delphipraxis.net/79707-kollision-mit-image-und-maus.html)

smart 26. Okt 2006 18:54


Kollision mit Image und Maus ?
 
Hallo Alle!

Wie kann ich eine Kollision mit Image und Maus errechen?
Ich kenne nur
Delphi-Quellcode:
Var
lSectionRect : TRect;
begin
For Test2 := 1 To I Do
If (IntersectRect(lSectionRect, Image1.BoundsRect, Image2.BoundsRect)) Then
   begin
….
Wie bekomme ich da die Maus rein?

Gruß
Heike

DGL-luke 26. Okt 2006 18:56

Re: Kollision mit Image und Maus ?
 
:gruebel:

OnMouseEnter / OnMouseLeave?

EDIT: Ansonsten immer:

Delphi-Quellcode:
function MouseInRect(Rect: TRect; Control: TControl):Boolean;
var p: TPoint;
begin
  p := Mouse.CursorPos;
  if Control <> nil then
    p := Control.ScreenToClient(p);

  Result := (p.X >= Min(Rect.Left, Rect.Right)) and (p.X <= Max(Rect.Left, Rect.Right)) and (p.Y >= Min(Rect.Top, Rect.Bottom)) and p.Y <= Max(Rect.Top, Rect.Bottom);
end;
EDIT: Prozedur->Funkion :roll:

mirage228 26. Okt 2006 18:59

Re: Kollision mit Image und Maus ?
 
Hi,

Falls das TImage kein Delphi-Referenz durchsuchenOnMouseLeave / Delphi-Referenz durchsuchenOnMouseEnter hat, dann
könntest Du mit MSDN-Library durchsuchenCreateRectRgn eine Region mit den Koordinaten des Images erstellen und dann beim MouseMove (der Form / des Images) mit MSDN-Library durchsuchenPtInRegion die Positon überprüfen.

mfG
mirage228

PainInYourBrain 26. Okt 2006 19:05

Re: Kollision mit Image und Maus ?
 
wie genau meinst du denn Kollision ?
- soll das Image sich darauf zubewegen und abprallen, oder weggeschubst werden von der Maus ?
Denn dann bräuchtest du dazu noch eine Richtungsangabe, die du ja nicht durch "OnMouseEnter" und "OnMouseLeave" bekommen würdest, oder sehe ich das falsch ?

---
( Hab leider kein Delphi grade zur Hand, bald aber wieder ... )
---

smart 26. Okt 2006 19:19

Re: Kollision mit Image und Maus ?
 
Zitat:

Zitat von PainInYourBrain
wie genau meinst du denn Kollision ?
- soll das Image sich darauf zubewegen und abprallen, oder weggeschubst werden von der Maus ?
Denn dann bräuchtest du dazu noch eine Richtungsangabe, die du ja nicht durch "OnMouseEnter" und "OnMouseLeave" bekommen würdest, oder sehe ich das falsch ?

Hi.

Nicht ganz. Ein Image soll sich auf die Maus drauf zu bewegen. Wenn es getroffen hat, soll was ausgelösst werden.

Gruß
Heike

Hawkeye219 26. Okt 2006 19:29

Re: Kollision mit Image und Maus ?
 
Hallo Heike,

vielleicht hilft dir ja die Funktion Delphi-Referenz durchsuchenFindDragTarget aus der Unit Controls. Mit ihr kannst du sogar ermitteln, welches Control der Mauszeiger berührt hat.

Gruß Hawkeye

Sunlight7 26. Okt 2006 19:52

Re: Kollision mit Image und Maus ?
 
Hallo Heike!

Du meinst, sobald der Mauscursor das Image berührt?

Dann einfach OnMouseMove des Image verwenden.

smart 27. Okt 2006 10:20

Re: Kollision mit Image und Maus ?
 
Zitat:

Zitat von Sunlight7
Du meinst, sobald der Mauscursor das Image berührt?
Dann einfach OnMouseMove des Image verwenden.

Hi.

Mit OnMouseMove geht das nicht so ganz. Wenn die Maus nicht bewegt wird und das Image kommt unter der Maus, dann wird kein OnMouseMove ausgelöst.

Gruß
Heike

DGL-luke 27. Okt 2006 12:29

Re: Kollision mit Image und Maus ?
 
Dann solltest du die Prüffunktion, die ich vorgeschlagen habe, verwenden, jedesmal wenn du das image bewegst.

Namenloser 27. Okt 2006 12:36

Re: Kollision mit Image und Maus ?
 
Zitat:

Zitat von DGL-luke
Dann solltest du die Prüffunktion, die ich vorgeschlagen habe, verwenden, jedesmal wenn du das image bewegst.

Und wenn sich das Image alle 1000 ms bewegt und ich dazwischen mit meiner Maus drüberfahre?

ich würde im MouseMove und bei der Bewegung kontrollieren.

smart 27. Okt 2006 13:17

Re: Kollision mit Image und Maus ?
 
Zitat:

Zitat von DGL-luke
Dann solltest du die Prüffunktion, die ich vorgeschlagen habe, verwenden, jedesmal wenn du das image bewegst.

Hi.

Vielen Dank! Muss ich da was in den Uses setzen? Delphi kennt angeblich 'Result' nicht !?

Gruß
Heike

turboPASCAL 27. Okt 2006 13:20

Re: Kollision mit Image und Maus ?
 
Delphi-Quellcode:
procedure MouseInRect(Rect: TRect; Control: TControl);
sollte wohl so heissen:
Delphi-Quellcode:
function MouseInRect(Rect: TRect; Control: TControl): Boolean;
Dann Klappt es auch mit dem Result. ;)

smart 27. Okt 2006 13:28

Re: Kollision mit Image und Maus ?
 
Vielen Dank an Alle

Damit bin ich weiter gekommen.

Gruß
Heike

smart 27. Okt 2006 15:24

Re: Kollision mit Image und Maus ?
 
Zitat:

Zitat von DGL-luke
Dann solltest du die Prüffunktion, die ich vorgeschlagen habe, verwenden, jedesmal wenn du das image bewegst.

Hallo.

Kann mir noch mal Einer bitte helfen. Wie frage ich mit der Function ab? Entweder ich bekomme einen Fehler (falsche Typen) oder zwar keinen Fehler, aber klappt dann auch nicht.

Gruß
Heike

DGL-luke 27. Okt 2006 16:08

Re: Kollision mit Image und Maus ?
 
Hallo, natürlich muss es so sein:

Delphi-Quellcode:
function MouseInRect(Rect: TRect; Control: TControl):Boolean;
var p: TPoint;
begin
  p := Mouse.CursorPos;
  if Control <> nil then
    p := Control.ScreenToClient(p);

  Result := (p.X >= Min(Rect.Left, Rect.Right)) and (p.X <= Max(Rect.Left, Rect.Right)) and (p.Y >= Min(Rect.Top, Rect.Bottom)) and p.Y <= Max(Rect.Top, Rect.Bottom);
end;
Du solltest die unit Math einbinden und sie so aufrufen:

Delphi-Quellcode:
if MouseInRect(rect(0,0,50,50),SomeControl) then
  ...
damit prüfst du, ob die Maus innerhalb des Rechtecks innerhalb des Controls liegt. für ein komplettes Image also:

Delphi-Quellcode:
if MouseInRect(rect(0,0,Image1.Width,Image1.Height),Image1) then
  ...
Sollte korrekte Resultate erzeugen.

smart 27. Okt 2006 18:19

Re: Kollision mit Image und Maus ?
 
Zitat:

Zitat von DGL-luke
Du solltest die unit Math einbinden und sie so aufrufen:

Ja, dass war der Fehler den machte. Math hatte ich nicht eingebunden.

Nochmals, vielen Dank, für Deine Geduld und Mühe.

Gruß
Heike


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