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