![]() |
TImage flackert beim Verschieben wenn Mauszeiger über Bild
Der Titel sagt schon fast alles. Und zwar habe ich eine Funktion implementiert, dass ich ein Bild (TImage) auf meinem Formular hin und herschieben kann. Das klappt auch super, aber nur solange der Mauszeiger nicht über dem Bild ist. Dann fängt das Bild bisschen an zu flackern, heißt es springt immer einen Pixel weg und dann wieder zurück, anstatt dass es sich um einen Pixel verschiebt.
Mein Code sieht bis jetzt so aus:
Delphi-Quellcode:
FormMouseDown und FormMouseMove ist natürlich auch in die Ereignisbehandlung onMouseMove und onMouseDown des Images rein geschrieben. Form1.DoubleBuffered ist außerdem auf true.
var XAlt, YAlt: Integer;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin XAlt := X; YAlt := Y; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssMiddle in Shift then begin Image1.Left := Image1.Left + (X - XAlt); Image1.Top := Image1.Top + (Y - YAlt); end; XAlt := X; YAlt := Y; end; |
Re: TImage flackert beim Verschieben wenn Mauszeiger über Bi
Die Ereignisse sind dem Image zugewiesen. Damit sind auch die Koordinaten, die in X und Y übergeben werden, relativ zur oberen linken Ecke des Image. Da das Image unter dem Mauszeiger verschoben wird, bleibt die Maus immer auf der selben relativen Position im Image. An dieser Stelle darf deshalb XAlt und YAlt nicht geändert werden.
|
Re: TImage flackert beim Verschieben wenn Mauszeiger über Bi
packs image mal auf nen Panel und aktiviere doublebufferd := true;
sollte aber auch ohne panel funktionieren! --> form1.doublebufferd := true; |
Re: TImage flackert beim Verschieben wenn Mauszeiger über Bi
Vielen Dank, Blub dein Beitrag hat mir geholfen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 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