AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Maus darf Image nicht verlassen

Ein Thema von Cöster · begonnen am 20. Aug 2006 · letzter Beitrag vom 11. Okt 2006
Antwort Antwort
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#1

Maus darf Image nicht verlassen

  Alt 20. Aug 2006, 07:20
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.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Maus darf Image nicht verlassen

  Alt 20. Aug 2006, 09:13
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
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Maus darf Image nicht verlassen

  Alt 11. Okt 2006, 19:25
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:

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?
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: Maus darf Image nicht verlassen

  Alt 11. Okt 2006, 19:41
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
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Maus darf Image nicht verlassen

  Alt 11. Okt 2006, 23:15
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!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: Maus darf Image nicht verlassen

  Alt 11. Okt 2006, 23:41
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!
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ß
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz