Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

MousePosition in dynamischer Klasse

  Alt 7. Aug 2009, 07:53
Hallo und guten Morgen an alle DP´ler,

Ich hab da ein kleines Problem. Ich möchte in einer abgeleiteten TPaintBox meine Position der Mouse bestimmen. Hab eigendlich auch schon alle nötigen Quellcode herausgesucht aber in meinen Versuchen sind diese leider noch nicht zu gewünschten Ergebnis gekommen.
Ich denke ich setze diesen Quellcode:
Delphi-Quellcode:
    TempPoint.X := Left;
  TempPoint.Y := Top;
  ScreentoClient(TempPoint);
noch nicht an die richtige Stelle in meinem Projekt. Aber erstmal schnell zur Situation. Also nur nochmal zur Verdeutlichung, das Ziel ist wenn ich an der oberen linken Ecke von meiner PaintBox bin, möchte ich den Punkt(0,0) haben und am rechten unteren Eck den Punkt(PaintBox.Width, PaintBox.Height).

Das Auslesen der Mouse habe ich dafür so in die abgeleitete TPainbox-Klasse eingesetzt:
Delphi-Quellcode:
const MouseOver = CM_MOUSEENTER;
      MouseLeave = CM_MOUSELEAVE;

Type TPaintboxPos = Class(TPaintbox)
  private
    FbMouseOnPB: boolean;
    function GetxWert: integer;
    function GetyWert: integer;
    procedure CMMouseOver(var Msn: TMessage); message MouseOver;
    procedure CMMouseLeave(var Msn: TMessage); message MouseLeave;
  protected
  public
    property xPos: integer read GetxWert;
    property yPos: integer read GetyWert;
End;

implementation

function TPaintboxPos.GetxWert: integer;
begin
  if FbMouseOnPB then result := Mouse.CursorPos.X
  else result := -1;
end;

function TPaintboxPos.GetyWert: integer;
begin
  if FbMouseOnPB then result := Mouse.CursorPos.Y
  else result := -1;
end;

// Wenn die Maus über dem Label ist, ändert sich der Cursor, damit erkannt werden
// kann, dass man hier eine Eingabe tätigen kann.
procedure TPaintboxPos.CMMouseOver(var Msn: TMessage);
begin
  Cursor := crHandPoint;
  FbMouseOnPB := true;
end;
// Cursor wird auf den normalen Default-Cursor zurück gesetzt.
procedure TPaintboxPos.CMMouseLeave(var Msn: TMessage);
begin
  FbMouseOnPB := false;
  Cursor := crDefault;
end;
Nichts wildes, wie man sieht und funktioniert. Aber es werden noch die absoluten Koordinaten angezeigt. Ich habe den Screentoclient schon in die createWnd-Prozedure meiner Oberklasse (in der die PaintBox kreiert wird) gesetzt, leider keine Änderungen am Ergebnis und auch in der FromShow-Procedure der Form, in der die Oberklasse eingebunden wird, gibt es kein richtiges Ergebnis.

Hoffe ihr könnt mir wieder bei dem Problem helfen.

Vielen Dank
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat