![]() |
TObject Bewegung auf MouseMove
Hallo,
ich habe ein kleines Problem bei der Bewegung meines Panels. Und zwar soll das panel jedem Mausschritt genau 'verfolgen'. Z.B.: Ich habe ein 100x100 Pixel großes Label und bewege dann die Maus von der Mitte aus (50x50 Pixel) nach 50x100. Dabei passiert gar nichts, obwohl der MouseMove eintrifft... Erst wenn ich die Maus über den Rand des Labels herausschiebe, dann erst wird das Label neu gezeichnet! *Am besten ihr testet es mal selber, es sieht aus als ob es laggt* :roteyes: Jetzt stellen sich 2 Fragen: -Warum zeichnet sich das laben bei den ersten MouseMove´s nicht neu? -Wie könnte ich es hinbekommen, dass es sich neuzeichnet?
Delphi-Quellcode:
*Bin Delphi-Anfänger, also macht mich fertig wenn was falsch ist!* :warn:
//Kleiner Auschnitt meines Projekts, reduziert auf die Problematik
unit Test; interface uses Forms, ExtCtrls, Controls, Classes; type TForm1 = class(TForm) Panel1: TPanel; procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Panel1.Left:=X-50; Panel1.Top:=Y-50; end; end Ich hoffe ich habe mich nicht zu komplizier ausgedrückt und ihr wisst eine Lösung. :pale: Vielen Dank schonmal im Vorraus! MfG spawn Edit: Ja die Suchfunktion hab ich schon ausgiebig durchstöbert... :| |
Re: TObject Bewegung auf MouseMove
Wie kommst du auf dei 50?
Du musst beim drücken der Maus, dir die Koordinaten merken und dann bei jeder Bewegung wieder neu und das Lebel auch neu setzen (eben um die Differnez zwischen den zuletzt gemerkten und den neuen Koordinaten) |
Re: TObject Bewegung auf MouseMove
Zitat:
*Kannst genauso gut die 50 weglassen, kommt das gleiche bei raus, ich habs nur gemach damit es schöner aussieht Und das Label setze ich doch immer neu bei jeder bewegung der Maus. |
Re: TObject Bewegung auf MouseMove
Hallo spawn89,
ich bewege ein Shape, das in einem Panel plaziert ist, folgendermaßen:
Delphi-Quellcode:
Wichtig ist dabei, dass man die Mausklickposition in globalen Variablen merkt und die untergeordnete Shapeposition zum übergeordneten Panel ermittelt. Dann wird die Shapeposition zu der aktuellen Mausposition (verschoben durch die Klickkoordinaten) ermittelt...
unit fSpielerBildDefinieren;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, DBCtrls, ExtCtrls, ExtDlgs, StahliSoftStd; type TFormSpielerBildDefinieren = class(TForm) PanelMain: TPanel; ... Shape: TShape; ... end; var FormSpielerBildDefinieren: TFormSpielerBildDefinieren; MouseDownFlag:Boolean=False; MX,MY:Integer; implementation {$R *.dfm} procedure TFormSpielerBildDefinieren.ShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MouseDownFlag:=True; Shape.Pen.Color:=clBlue; MX:=X; MY:=Y; end; procedure TFormSpielerBildDefinieren.ShapeMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var P:TPoint; begin BreakFlag:=True; if (MouseDownFlag) then begin P.X:=X; P.Y:=Y; P:=Shape.ClientToScreen(P); P:=PanelMain.ScreenToClient(P); Shape.Left:=(P.X-MX); Shape.Top:=(P.Y-MY); Shape.Refresh; ... end; end; procedure TFormSpielerBildDefinieren.ShapeMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MouseDownFlag:=False; ... Shape.Pen.Color:=clBlack; end; Stahli |
Re: TObject Bewegung auf MouseMove
Danke @stahli,
habe gerade festgestellt, dass das Label eine eigene OnMouseMove Funktion besitzen kann. Ich dachte die FormMouseMove wäre für alles daraufliegende zuständig. :cyclops: Deine Methode ist bestimmt sehr gut, nur für den anfang reicht mir erstmal diese Funktion hier:
Delphi-Quellcode:
Also Danke nochmals, Frage geklärt :hello:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if ((X <= 45) or (X >= 55) or (Y <= 45) or (Y >= 55)) then begin Panel1.Left:=X-50; Panel1.Top:=Y-50; end; end; MfG spawn |
Re: TObject Bewegung auf MouseMove
Du hast recht, die absolute Positionsermittlung ist nur für mich erforderlich, da bei mir noch weitere Komponenten beteiligt sind...
Stahli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 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