Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Überprüfen ob Mausklick in bestimmten bereich war (https://www.delphipraxis.net/74193-ueberpruefen-ob-mausklick-bestimmten-bereich-war.html)

xZise 30. Jul 2006 10:38


Ü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?

Nikolas 30. Jul 2006 10:44

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');

xZise 30. Jul 2006 10:48

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;

Nikolas 30. Jul 2006 11:10

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;

igel457 30. Jul 2006 11:11

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:
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;
Wäre einfacher...

marabu 30. Jul 2006 11:17

Re: Überprüfen ob Mausklick in bestimmten bereich war
 
Und noch ein Ansatz:

Delphi-Quellcode:
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;
Grüße vom marabu

3_of_8 30. Jul 2006 11:20

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.

Nicolai1234 30. Jul 2006 11:29

Re: Überprüfen ob Mausklick in bestimmten bereich war
 
Ich denke mal, das ganze bezieht sich auf dieses DonD-Spiel. Ich denke, du hast da alle 26 in einem Image oder dergleichen.
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.

xZise 30. Jul 2006 11:33

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]

Nikolas 30. Jul 2006 11:35

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 18:16 Uhr.
Seite 1 von 3  1 23      

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