Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Maus in TImage einsperren (Mäusefalle) (https://www.delphipraxis.net/21804-maus-timage-einsperren-maeusefalle.html)

sCrAPt 8. Mai 2004 13:43


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:
  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);
Aber dann ist es nicht genau :(

Also wie soll ich es machen?

:angle:, sCrAPt

alcaeus 8. Mai 2004 14:10

Re: Maus in TImage einsperren (Mäusefalle)
 
Delphi-Quellcode:
clipcursor(@Image1.ClientRect);
Das müsste deine Lösung sein.

sCrAPt 8. Mai 2004 14:15

Re: Maus in TImage einsperren (Mäusefalle)
 
dann hab ich die größe aber nicht die position ;)

:angle:, sCrAPt

gmarts 8. Mai 2004 14:19

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:
form.borderstyle:=bsnone;
bzw. mit clientheight, clientwidth arbeiten anstatt height und width.

alcaeus 8. Mai 2004 14:19

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...

Stanlay Hanks 8. Mai 2004 14:32

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.

Niko 8. Mai 2004 14:36

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;

sCrAPt 8. Mai 2004 14:51

Re: Maus in TImage einsperren (Mäusefalle)
 
Funktioniert :D Danke Niko und die anderen :D

:angle:, sCrAPt

Nicodius 8. Mai 2004 14:52

Re: Maus in TImage einsperren (Mäusefalle)
 
.... das ist nützlich

glkgereon 8. Mai 2004 17:47

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

SirThornberry 8. Mai 2004 17:53

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

sCrAPt 9. Mai 2004 17:29

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

Robert_G 9. Mai 2004 18:28

Re: Maus in TImage einsperren (Mäusefalle)
 
Warum dann nicht so:
Delphi-Quellcode:
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;
Zum Einfangen:
Delphi-Quellcode:
  MouseTrap(True);
Zum Freilassen:
Delphi-Quellcode:
  MaouseTrap(False);
Um die Maus für andere Anwendungen benutzen zu können braucht es noch 2 Events & eine bool'sche Variable im Form:
Delphi-Quellcode:
type
  TfrmIrgendWas = class(TForm)
    ...
    procedure AppActivate(Sender: TObject);
    procedure AppDeactivate(Sender: TObject);
  private
    IsTrapping :Boolean;
    ...
AppActivate:
Delphi-Quellcode:
  MouseTrap(IsTrapping);
AppDeactivate:
Delphi-Quellcode:
  ClipCursor(nil);
Die beiden Events musst du Application verpassen.

Ist nicht wirklich professionell (ich kam noch nie in die Verlegenheit die Maus einzufangen ;) ), aber es dürfte funktionieren.

sCrAPt 9. Mai 2004 21:54

Re: Maus in TImage einsperren (Mäusefalle)
 
JaJa Robertokarlostina_G.... Musstest du auch wieder deinen Senf dazu geben, gelle :zwinker:
Zitat:

ich kam noch nie in die Verlegenheit die Maus einzufangen
Und was is wenn du ne Mäuseplage in der Wohnung/im Haus hast? Dann brauchste Mäusefallen ;)

:angle:, sCrAPt

glkgereon 10. Mai 2004 14:02

Re: Maus in TImage einsperren (Mäusefalle)
 
@Sir Thonberry
klar, haste recht, und wirklich professionell.... :-D

Niko 10. Mai 2004 14:55

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