![]() |
"Flimmern" bei verschieben in OnMouseMove
Liste der Anhänge anzeigen (Anzahl: 1)
Hi :hi:,
per OnMouseMove verschiebe ich ne Komponente. Die flimmert immer so. DoubleBuffered hab ich schon auf true. Im Anhang ist ein Bild, wie es als aussieht, nur flimmerts halt. Was könnte ich dagegen tun? Hier ist noch meine Procedure zum verschieben (die komponenten (die MRLabel) werden dynamisch erstellt):
Delphi-Quellcode:
Maus ist Boolean und wird true wenn man auf die Kompo klickt
if Sender is TmrPRLabel then
begin if Maus then begin (Sender as TmrPRLabel).Top := Y; (Sender as TmrPRLabel).Left := X; end; end; *MFG* Manu :hi: |
Re: "Flimmern" bei verschieben in OnMouseMove
Benutze SetBounds, damit du nicht gleich zweimal zeichnest.
Ansonsten wird sich das flimmern nicht voellig vermeiden lassen, wenn du bei jedem OnMouseMove die Komponente neu zeichnest. OnMouseMove kommt einfach zu oft. Vergessen: DoubleBuffered hilft nur bei TGraphicControl-Abkoemmlingen, da TWindowControl-Abkoemmlinge ihr eigenes Fenster haben. Zeig im Uebrigen mal wie du die Komponente malst. |
Re: "Flimmern" bei verschieben in OnMouseMove
Hi Robert,
die Komponente zeichne ich nicht selbst. Das ist ein etwas abgewandeltes TPRLabel (von PowerPDF). Ich hab es mit OnMouse... Events abgestattet. Aber trotzdem hier mal die Prozedure:
Delphi-Quellcode:
In MyMouseDown bzw. MyMouse ab steht: Maus := true bzw. Maus := false.
var
MRLabel: TmrPRLabel; begin MRLabel := TmrPRLabel.Create(PRLayoutPanel1); MRLabel.Top := 100; MRLabel.Left := 100; MRLabel.Width := 100; MRLabel.Top := 100; MRLabel.Name := 'MRLabel' MRLabel.Parent := PRLayoutPanel1; MRLabel.OnMouseDown := MyMouseDown; MRLabel.OnMouseMove := MyMouseMove; MRLabel.OnMouseUp := MyMouseUp; end; MyMouseMove hab ich im ersten Beitrag. Und wie meinst du das mit SetBounds? |
Re: "Flimmern" bei verschieben in OnMouseMove
wenn du "left :=" oder "top :=" aufrufst wird intern nix anderes gemacht als "Setbounds" aufgerufen.
Das heißt bei dir wird intern 2 mal setbounds aufgerufen. Ändere es am besten so ab
Delphi-Quellcode:
if Sender is TmrPRLabel then
begin if Maus and (((Sender as TmrPRLabel).Top <> x) or ((Sender as TmrPRLabel).Left <> y)) then begin (Sender as TmrPRLabel).SetBounds(x,y,(Sender as TmrPRLabel).width, (Sender as TmrPRLabel).height); end; end; |
Re: "Flimmern" bei verschieben in OnMouseMove
Hi,
@Sir das geht auch nicht :(. Kann man nicht ne Windows-Message oder sowas in der ARt an die Kompo schicken? |
Re: "Flimmern" bei verschieben in OnMouseMove
Was heißt: "Gehtn nicht"? Kommt eine Fehlermeldung, gehts nicht zu kompilieren, ...?
Hast du alle ParentComponenten und die Parentcomponenten davon etc. auch auf Doublebuffered? |
Re: "Flimmern" bei verschieben in OnMouseMove
Es flimmert halt noch.
Ja, alles auf DoubleBuffered |
Re: "Flimmern" bei verschieben in OnMouseMove
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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