[Delphi] położenie myszki na komponencie

0

Witam, mam pytanko ;]

Jak mogę odczytać powiedzmy do TLabel informacje, w którym miejscu znajduje się myszka na danym komponencie?(licząc od ich krawędzi) Przykład możemy znaleźć w programie Paint...

0

Mouse.pos.x, Mouse.pos.y, ScreenToClient, ClientToScreen, Google ;)

0

@[losowa_nazwa]:
Jest o wiele prostszy sposób... :D

W każdym komponencie jest 'OnMouseMove'.

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);

Wartości X oraz Y są podawane od lewego górnego rogu komponentu.

0
Patryk27 napisał(a)

@[losowa_nazwa]:
Jest o wiele prostszy sposób... :D

To jest akurat często niewystarczające. Fajne, jeśli sobie machasz myszką i chcesz wyświetlić koordynaty. A co jeśli chcę poznać pozycję w momencie kliknięcia? I np. w tym miejscu rozwinąć PopupMenu?

procedure TMainForm.ButtonClick(Sender: TObject);
var
   Pt: TPoint;
begin
   GetCursorPos(Pt);
   Pt := ScreenToClient(Pt);
   PopupMenu1.Popup(Pt.X, Pt.Y);
end;
Patryk27 napisał(a)

W każdym komponencie jest 'OnMouseMove'.

A co z takimi komponentami, które nie dorobiły się OnMouseMove? np.TComboBox, TWebBrowser...

0

TComboBox, TWebBrowser

Pech...Zapomniałem o tych :D

0

Dzięki wszystkim za pomoc :)))

0

Dodaj zmienną typu TPoint.

dodaj taka funkcję

var
 Punkt: TPoint;
begin
  GetCursorPos(Punkt);
end;

Teraz w zmiennej Punkt sa koordy myszy zakładając że punkt 0, 0 jest pierwszym pixelem monitora.

Teraz zrub tak:

var
 Punkt: TPoint;
 X, Y: Integer;
begin
 X := Punkt.X - ( Form1.Left + Button1.Left );
 Y := Punkt.Y - ( Form1.Top + Button1.Top );
end;

Teraz w zmiennych X, Y są koordy myszy zakładajc że punkt 0, 0 jest pierwszym pixelem buttona czy co tam masz.

PS; A gwarantuje że wszystkie wizualne komponent mają właściwości Left i Top
PSS; Najlepiej wstaw to w OnClick

0

TomRiddle, zrub? bo zrubić? "... "Mądry nie zauważy, a głupi pomyśli że tak ma być..." - tutaj to nie działa :)

BTW: a co będzie jeśli button będzie na panelu, który jest na panelu, który jest na kolejnym panelu? Przeliczanie pozycji będzie wtedy małym koszmarkiem. Użycie ScreenToClient, ClientToScreen i google naprawdę ułatwia życie!

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