AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Überprüfen ob Mausklick in bestimmten bereich war
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen ob Mausklick in bestimmten bereich war

Ein Thema von xZise · begonnen am 30. Jul 2006 · letzter Beitrag vom 26. Mär 2012
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 11:38
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?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 11:44
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');
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 11:48
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;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 12:10
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;
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 12:11
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...
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 12:17
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
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 12:20
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Nicolai1234

Registriert seit: 21. Feb 2004
1.008 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 12:29
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.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 12:33
Okay die Funktion könnte ich mir selber schreiebn (), 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

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 )[/roter Kasten]
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Überprüfen ob Mausklick in bestimmten bereich war

  Alt 30. Jul 2006, 12:35
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 03:47 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