Entwickler-Ecke

Multimedia / Grafik - Liefert GetCursorPos falsche Werte? [erledigt]


Adrian - Mi 22.10.03 16:21
Titel: Liefert GetCursorPos falsche Werte? [erledigt]
Servus!

Auf meinem Formular befindet sich ein dynamisch erzeugtes TImage, in die eine Bitmap aus der Resourcen-Datei geladen wird. Ich möchte nun beim Anklicken bestimmter Stellen verschiedene Aktionen ausführen, wobei programmbedingt die "Zielfläche" sehr klein ist - um genau zu sein exakt 3x3 Pixel. Bei den ersten Versuchen stellte ich fest, daß die zurückgegebenen Koordinaten erheblich von der Stelle abwichen, an der sich die Cursorspitze befand. In X-Richtung waren es 10, in Y-Richtung 78 Pixel, bzw. Koordinatenpukte, die Differenz scheint aber rechnerabhängig zu sein.
Zur Verdeutlichung mal ein wenig Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
// Erzeugen des Image und Laden der Vorlage
  Buidl:=TImage.Create(self);
  with Buidl do
  begin
    Parent:=Form1;
    Left:=5;
    Top:=30;
    Width:=1014;
    Height:=433;
    Picture.Bitmap.LoadFromResourceName(HInstance,'DIAGRAMM');
  end;

// Abfragen der Cursorposition
  with Buidl do
  begin
    GetCursorPos(MausPosition);
  end;

Das Programm soll auch bei kleinen Bildschirmauflösungen laufen (mit Scrollbalken) und natürlich soll dort auch der Aufruf der Aktionen an der selben Stelle stattfinden. Ich vermute ein wenig, daß GetCursorPos nicht auf das Image, sondern auf Form1 bezogen ist. Kennt sich jemand aus, ob das so ist, oder warum der MausPosition-Wert von der tatsächlichen Cursorstellung abweicht?

Gruß,

Adrian


Anonymous - Mi 22.10.03 16:27

GetCursorPos ist Screen-bezogen.
Es gibt eine Func, die das umrechnet, aber die fällt mir gerade ncht ein.. (Suche in: Delphi-Forum, Delphi-Library SCREENTOCLIENT?)

Ansonsten kannst du das mit OnMouseMove machen.


Adrian - Do 23.10.03 09:48

Servus!

@ obbschtkuche: ScreenToClient stimmt, jetzt funktioniert alles. Danke.

Gruß,

Adrian