![]() |
Maus in TImage einsperren (Mäusefalle)
HiHo
Ich versuch grad die Maus mit ClipCursor() in ein TImage einzusperren. Als Parameter übergeb ich einfach ein TRect aber ich weiß nicht wie ich es am simplesten anstelle das Rec GENAU zu definieren :( Ich habs mit dem versucht:
Delphi-Quellcode:
Aber dann ist es nicht genau :(
rec.Left := form3.Left + image1.Left;
rec.Top := form3.top + image1.Top; rec.Right := form3.Left + image1.Left + image1.Width; rec.Bottom := form3.top + image1.Top + image1.Height; clipcursor(@rec); Also wie soll ich es machen? :angle:, sCrAPt |
Re: Maus in TImage einsperren (Mäusefalle)
Delphi-Quellcode:
Das müsste deine Lösung sein.
clipcursor(@Image1.ClientRect);
|
Re: Maus in TImage einsperren (Mäusefalle)
dann hab ich die größe aber nicht die position ;)
:angle:, sCrAPt |
Re: Maus in TImage einsperren (Mäusefalle)
@scrapt
Bei deiner Methode wird die Titelleiste nicht berücksichtigt. Entweder die Breite dieser berücksichtigen oder Titelleiste ausblenden:
Delphi-Quellcode:
bzw. mit clientheight, clientwidth arbeiten anstatt height und width.
form.borderstyle:=bsnone;
|
Re: Maus in TImage einsperren (Mäusefalle)
Ok, da hast du Recht, sorry, hatte einen Denkfehler. Aber was ist an deiner Methode so umständlich/ungenau? Das ganze musst du doch einfach in einem OnMove des Forms machen, ich sehe kein Problem dabei...
|
Re: Maus in TImage einsperren (Mäusefalle)
Die Titelleiste kann ja auch höher als normal sein ;) Aber ich denke, sowas steht in der Registry bestimmt irgendwo.
|
Re: Maus in TImage einsperren (Mäusefalle)
Für das Problem gibt es die Methode ClientToScreen, die Formularkoordinaten in Bildschirmkoordianten umwandelt:
Delphi-Quellcode:
var
P: TPoint; //... P.X := image1.Left; P.Y := image1.Top; P := Form1.ClientToScreen(P); rec.Left := P.X; rec.Top := P.Y; rec.Right := P.X + image1.Width; rec.Bottom := P.Y + image1.Height; |
Re: Maus in TImage einsperren (Mäusefalle)
Funktioniert :D Danke Niko und die anderen :D
:angle:, sCrAPt |
Re: Maus in TImage einsperren (Mäusefalle)
.... das ist nützlich
|
Re: Maus in TImage einsperren (Mäusefalle)
gut, dasses gelöst ist, aber würde nicht auch das funzen?
Delphi-Quellcode:
if mouse.x<Image1.left then mouse.x:=Image1.left;
if mouse.x>Image1.left+Image1.width then mouse.x:=Image1.left+Image1.width; if mouse.y<Image1.top then mouse.y:=Image1.top; if mouse.y>Image1.top+Image1.heigth then mouse.y:=Image1.top+Image1.heigth; //mouse.x/mouse.y musses irgendwo geben |
Re: Maus in TImage einsperren (Mäusefalle)
@glkbkk: Im grunde genommen geht das auch, allerdings musst da da bei jeder mausbewegung die mausposition abfragen. Und wenn man schnell genug ist schafft man es auch kurzzeitig den mauskursor über dem bild weg zu bekommen
|
Re: Maus in TImage einsperren (Mäusefalle)
Und außerdem möchte ich es ja auf dem best professionelsten Weg machen :mrgreen: :zwinker:
:angle:, sCrAPt |
Re: Maus in TImage einsperren (Mäusefalle)
Warum dann nicht so:
Delphi-Quellcode:
Zum Einfangen:
Procedure TfrmIrgendWas.MouseTrap(Trap :Boolean);
var ClipRect : TRect; begin IsTrapping := Trap; if Trap then begin with Panel1 do with ClientRect do ClipRect := Rect(ClientToScreen(TopLeft), ClientToScreen(BottomRight)); ClipCursor(@ClipRect); end else ClipCursor(nil); end;
Delphi-Quellcode:
Zum Freilassen:
MouseTrap(True);
Delphi-Quellcode:
Um die Maus für andere Anwendungen benutzen zu können braucht es noch 2 Events & eine bool'sche Variable im Form:
MaouseTrap(False);
Delphi-Quellcode:
AppActivate:
type
TfrmIrgendWas = class(TForm) ... procedure AppActivate(Sender: TObject); procedure AppDeactivate(Sender: TObject); private IsTrapping :Boolean; ...
Delphi-Quellcode:
AppDeactivate:
MouseTrap(IsTrapping);
Delphi-Quellcode:
Die beiden Events musst du Application verpassen.
ClipCursor(nil);
Ist nicht wirklich professionell (ich kam noch nie in die Verlegenheit die Maus einzufangen ;) ), aber es dürfte funktionieren. |
Re: Maus in TImage einsperren (Mäusefalle)
JaJa Robertokarlostina_G.... Musstest du auch wieder deinen Senf dazu geben, gelle :zwinker:
Zitat:
:angle:, sCrAPt |
Re: Maus in TImage einsperren (Mäusefalle)
@Sir Thonberry
klar, haste recht, und wirklich professionell.... :-D |
Re: Maus in TImage einsperren (Mäusefalle)
@Robert:
Wenn, dann schon mit BoundsRect statt ClientRect :wink: : ClientRect.TopLeft ist immer (0, 0). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz