Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi "Flimmern" bei verschieben in OnMouseMove (https://www.delphipraxis.net/27735-flimmern-bei-verschieben-onmousemove.html)

Die Muhkuh 14. Aug 2004 20:28


"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:
  if Sender is TmrPRLabel then
  begin
    if Maus then
    begin
      (Sender as TmrPRLabel).Top := Y;
      (Sender as TmrPRLabel).Left := X;
    end;
  end;
Maus ist Boolean und wird true wenn man auf die Kompo klickt

*MFG*

Manu :hi:

Robert Marquardt 15. Aug 2004 05:40

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.

Die Muhkuh 15. Aug 2004 07:09

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:
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;
In MyMouseDown bzw. MyMouse ab steht: Maus := true bzw. Maus := false.
MyMouseMove hab ich im ersten Beitrag.


Und wie meinst du das mit SetBounds?

SirThornberry 15. Aug 2004 08:42

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;

Die Muhkuh 15. Aug 2004 09:11

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?

SirThornberry 30. Aug 2004 18:31

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?

Die Muhkuh 30. Aug 2004 19:00

Re: "Flimmern" bei verschieben in OnMouseMove
 
Es flimmert halt noch.


Ja, alles auf DoubleBuffered

teebee 30. Aug 2004 19:10

Re: "Flimmern" bei verschieben in OnMouseMove
 
Nur falls Du es übersehen hast:mit einem transparenten Label geht es ganz gut
Gruß, teebee


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