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 darf Image nicht verlassen (https://www.delphipraxis.net/75488-maus-darf-image-nicht-verlassen.html)

Cöster 20. Aug 2006 07:20


Maus darf Image nicht verlassen
 
Hi!

Wenn die linke Maustaste in einem Image geklickt wird, darf die Maus das Image erst wieder verlassen, wenn die Maustaste wieder losgelassen wird. Wie kannn ich das machen?

Eine bessere Idee als
Delphi-Quellcode:
If X < 0 then
  Mouse.CursorPos := Point(Left + Image1.Left + (Width - ClientWidth) div 2, Mouse.CursorPos.Y);
für jeden Rand des Images ist mir nicht eingefallen. Der Befehl ist aber ziemlich schlecht, weil er
1. sicherlich nicht der kürzeste ist
2. Der Cursor immer ein kleines Stückchen aus dem Image bewegt werden kann und dann erst wieder zurückschwingt.

Hawkeye219 20. Aug 2006 09:13

Re: Maus darf Image nicht verlassen
 
Hallo Cöster,

hier ist eine Lösung, welche die Funktion MSDN-Library durchsuchenClipCursor aus dem Windows-API verwendet:

Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  R : TRect;
  Image : TImage;
begin
  Image := (Sender as TImage);
  // Image-Koordinaten in Bildschirmkoordinaten umrechnen
  R := Image.ClientRect;
  with Image.ClientOrigin do
    OffsetRect(R, X, Y);
  // Bewegung des Mauszeigers einschränken
  ClipCursor(@R);
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // Beschränkung aufheben
  ClipCursor(nil);
end;
Gruß Hawkeye

Cöster 11. Okt 2006 19:25

Re: Maus darf Image nicht verlassen
 
Danke. Ich hab es erst gelassen, aber jetzt hab ich es doch mit ClipRect gemacht. Läuft gut. Eine Anweisung verstehe ich allerdings nicht:

Delphi-Quellcode:
with Image.ClientOrigin do
    OffsetRect(R, X, Y);
Kann man with-Anweisungen nicht immer so umschreiben, dass diese Anweisung auch heißen könnte:

Delphi-Quellcode:
Image.ClientOrigin.OffsetRect(R, X, Y);
?

Das funktioniert aber nicht. Das ist auch verständlich, weil OffsetRect keine property von ClientOrigin ist. Außerdem ist OffsetRect eine Funktion, die einen Boolean zurückliefert. Wie kann eine Funktion eine Anweisung sein? Es sieht doch sonst immer so aus: XYZ := Funktion(Parameter); und nicht einfach nur Funktion(Parameter);

Wie funktioniert diese Anweisung, warum führt sie nicht zu Fehlern?

_frank_ 11. Okt 2006 19:41

Re: Maus darf Image nicht verlassen
 
nein, das with ändert nur die werte X und y
OffsetRect ist eine eigenständige Funktion, (auch wenn ich die jetzt in der hilfe nicht gefunden habe).

kannst also so schreiben:

Delphi-Quellcode:
var p:TPoint;

p:=Image.ClientOrigin;
OffsetRect(r,p.x,p.y);
HTH Frank

Cöster 11. Okt 2006 23:15

Re: Maus darf Image nicht verlassen
 
Ey geil, ich wusste gar nicht, dass man Funktionen genauso aufrufen kann, wie Prozeduren (dann käme man ja rein theoretisch sogar ganz ohne Prozeduren aus, wenn man alles als Funktion schreibt, auch wenn's wahrscheinlich unperforment und unelegant sowieso wäre).

Und dass sich with auch auf Parameter bezieht, war mir bisher auch nicht klar. Wieder was gelernt, nun sogar 2 Sachen auf einmal. Danke! :bouncing4: :dp: :thumb:

EWeiss 11. Okt 2006 23:41

Re: Maus darf Image nicht verlassen
 
Zitat:

Zitat von Cöster
Ey geil, ich wusste gar nicht, dass man Funktionen genauso aufrufen kann, wie Prozeduren (dann käme man ja rein theoretisch sogar ganz ohne Prozeduren aus, wenn man alles als Funktion schreibt, auch wenn's wahrscheinlich unperforment und unelegant sowieso wäre).

Und dass sich with auch auf Parameter bezieht, war mir bisher auch nicht klar. Wieder was gelernt, nun sogar 2 Sachen auf einmal. Danke! :bouncing4: :dp: :thumb:

Wie das in Natura funktioniert kannst du auch hier mal schauen

Winamp Sample

Edit:
Du mußt das Teil resizen unten in der Ecke...

gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 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