Jak stwierdzić czy kursor myszy znajduje się w obrębie prostokątnego obszaru.

0

Witam.

Czy istnieje jakaś metoda na sprawdzenie czy kursor myszy znajduje się w obrębie takiego obszaru?

Obszar definiuje przez współrzędne rogów tego prostokąta.

ps. Sytuacja wymusza, że nie mogę zrobić tego za pomocą message (np. CM_MouseEnter itp.)

Kombinowałem tak:

 
function mycha_w_obszarze(a, b, c, d: TPoint): boolean;
var
  x,
  y: Integer;
begin
  x := Mouse.CursorPos.X;
  y := Mouse.CursorPos.Y;

  if  (X>=a.x) and (Y<=a.y)  and
      (X>=b.x) and (Y>=b.y) and
      (X<=c.x) and (Y<=c.y)  and
      (X<=d.x) and (Y>=d.y)  then
    result := true
  else
    result := false;
end;

0

PtInRect + F1

0

Dziękuje. Misiekd jesteś wielki.

0

przy założeniu:
AB
CD

function mycha_w_obszarze(a, b, c, d: integer): boolean;
var
  x,
  y: Integer;
begin
  x := Mouse.CursorPos.X;
  y := Mouse.CursorPos.Y;

  if (y<a) or (x>b) or (x<c) or (y>d) then result := true else
  result := false;
end; 
0
lankusiek napisał(a)

przy założeniu:
AB
CD

function mycha_w_obszarze(a, b, c, d: integer): boolean;
var
  x,
  y: Integer;
begin
  x := Mouse.CursorPos.X;
  y := Mouse.CursorPos.Y;

  if (y<a) or (x>b) or (x<c) or (y>d) then result := true else
  result := false;
end; 

jesteś pewny, że to zadziała bo ja wiem, że nie
A = 10, B = 10, C = 20, D = 20
X = 0, Y = 0
(y < a) - (0 < 10) <- true a punkt nie jest w obszarze. BTW po co wymyślać koło na nowo, w dodatku kwadratowe

0

A i B nie może być takiej samej wartości bo ma być
AB
CD

czyli:
A=10
B=20
C=10
D=20

i masz kwadrat 10x10

0

podstawiam za X = 0, Y = 0 i dalej wychodzi mi true
Co to za mentalność, że nawet jak ktoś ci udowodni czarno na białym, że nie masz racji to jak ten osioł będziesz się upierał, że to nie prawda.
Napiszę to jeszcze raz, dużymi literami i tak, żebyś zrozumiał
TWÓJ WZÓR JEST DO d**y

A tak BTW to takie coś
if (y<a) or (x>b) or (x<c) or (y>d) then result := true else
result := false;
zapisuje się tak
Result := (y<a) or (x>b) or (x<c) or (y>d);

o mamy błąd parsera :)

0

@Misiekd i ma być True; czyli wychodzi poza kwadrat. kwadrat po prostu nie może leżeć przy krawędzi ekranu musi mieć odstęp przynajmniej jeden pixel. Więc mi nie mów ,że jest do d**y bo działa. A jak tego nie ogarniasz to możesz się po podniecać moim source:
http://www.przeklej.pl/plik/kwadrat-rar-0028ts7836jo

PS. Tu poprawiona wersja mojego source:

if mycha_w_obszarze(Form1.Top+Panel1.Top+30, Form1.Left+Panel1.Left+Panel1.Width+6, Form1.Left+Panel1.Left+6, Form1.Top+Panel1.Top+Panel1.Height+30) = true then Form1.Caption:= 'Kolizja' else
Form1.Caption:= 'Kursor jest w Panelu'; 

Złej baletnicy przeszkadza i rąbek u spódnicy xD

0

tylko, że to nie sprawdza czy mycha jest W obszarze tylko czy mycha jest POZA obszarem!! dla ciebie pewnie żadna różnice (czy ja mam zapłacić 100zł czy mnie mają zapłacić 100zł - tu też nie ma różnicy - chodzi o to, że ktoś komuś ma 100zł zapłacić)

0

Kto komu ma zapłacić to już twój problem MisiekD xD Ważne ,że program został zrobiony i działa.
i kto tu jest do d**y ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1