![]() |
Überprüfen ob Mausklick in bestimmten bereich war
Ich habe ein großes Image und möchte überprüfen ob der Mausklick in bestimmten Rechtecken war.
Welche Prozeduren etc würden da gehen? |
Re: Überprüfen ob Mausklick in bestimmten bereich war
machs doch so:
Delphi-Quellcode:
x,y: Mauskoordinate; top, left, width, height: ein Zielbereich:
if (x>left) and (x<(left+width)) and (y>top) and (y<(top+height)) then showmessage('drin'); |
Re: Überprüfen ob Mausklick in bestimmten bereich war
So... Und jetzt 26 mal???
ich dachte da vielleicht an einen Vergleich:
Delphi-Quellcode:
for i := 0 to 25 do
if inRect(myRect[i], X, Y) then begin {...} end; |
Re: Überprüfen ob Mausklick in bestimmten bereich war
Wo ist denn das Problem?
// Bei rectangle waren doch die ersten Koordinaten die ecke links oben und die zweiten rechts unten, oder?
Delphi-Quellcode:
Function inRect(Rect[i], X, Y): boolean;
begin result:= false; if (x>Rect[i].x1) and (x<(Rect[i].x2-Rect[i].x1)) and (das gleiche für y ) then result:= true; |
Re: Überprüfen ob Mausklick in bestimmten bereich war
Was ist denn jetzt dein Problem?
Packe doch den Boolschen ausdruck von oben in eine Funktion "inRect" und rufe diese 26 Mal auf. EDIT: Wo war dieser Rote Kasten...
Delphi-Quellcode:
Wäre einfacher...
function InRect(x,y:integer;rect:TRect):boolean;
begin result := (x >= rect.Left) and (y >= rect.Top) and (y <= rect.Bottom) and (y >= rect.Top); end; |
Re: Überprüfen ob Mausklick in bestimmten bereich war
Und noch ein Ansatz:
Delphi-Quellcode:
Grüße vom marabu
type
TRects = array of TRect; var rects: TRects; function InRect(rects: TRects; pt: TPoint): Boolean; var i: Integer; begin Result := True; for i := Low(rects) to High(rects) do if PtInRect(rects[i], pt) then Exit; Result := False; end; |
Re: Überprüfen ob Mausklick in bestimmten bereich war
Igels Version dürfte die schnellste sein, da sie keine Branches enthält...
Allerdings dürften die Unterschiede minimal sein, kann sogar sein, dass der Compiler sowieso das so stark optimiert, dass es gar nicht mehr auffällt. |
Re: Überprüfen ob Mausklick in bestimmten bereich war
Ich denke mal, das ganze bezieht sich auf
![]() Wäre es nicht besser, bei einem Klick die Koordinaten zu nehmen und berechnen zu lassen, auf welchen Koffer man gedrückt hat? Die Koffer sind ja immer gleich groß. Sagen wir mal 50 Pixel breit. Wenn du dann als X-Wert sowas wie 384 bekommst weißt du, dass 384 / 50 = 7 (Rest 34) ist, also der 7. Koffer in der Reihe gedrückt wurde. Jetzt musst du nur noch den Rand "ausmessen", bei dem links jeweils der erste Koffer beginnt. grrr... ich bin gerade erst aufgestanden und kann noch keine Texte schreiben, ich hoffe es ist klar, was ich meine. Ich denke, diese Art wäre schneller, als alle 26 mal inRect auszuführen. |
Re: Überprüfen ob Mausklick in bestimmten bereich war
Okay die Funktion könnte ich mir selber schreiebn (:D), was mich am ersten asnatz gestört hat ist die "komplexibilität"...
Da bilckt man nicht so einfach durch... Da ist die "InRect" Methode besser. Okay... Dann mache ich's so ;) [roter Kasten] o.O Öhm ja, so könnte man es machen :D Problem ist nur, dass sie nach unten hin versetzt sind... Also könnte ich die Reihe bestimmen und müsste an noch ein bisschen mehr rand dazuaddieren. (PS: richtig geschlussfolgert :mrgreen: )[/roter Kasten] |
Re: Überprüfen ob Mausklick in bestimmten bereich war
bei seinem Dond sind die Koffer aber nicht schön wie auf einem Schachbrett angeordnet, sondern die zweite Reihe beginnt eine halbe Kofferbreite weiter rechts als die erste. Um das auch noch zu berücksichtigen müsste man auch noch ein paar Abfragen schreiben.
Da die Koffersuche aber nur alle paar minuten mal ausgeführt werden muss, ist es hier wichtiger einen gut verständlichen Code zu schreiben, als einen schnellen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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