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 Neuzeichnen TScrollbox, aber Fensterflackern (https://www.delphipraxis.net/31551-neuzeichnen-tscrollbox-aber-fensterflackern.html)

sieppl 11. Okt 2004 09:03


Neuzeichnen TScrollbox, aber Fensterflackern
 
Hallo,

eine bestehende Applikation benutzt eine TScrollBox, diese schmiert bekanntlich beim Scrollen.
Mit diesem Code am Anfang der betreffenden Unit habe ich einen MessageHandler reingeschmuggelt.
Der wird auch sauber aufgerufen.

Delphi-Quellcode:
type TScrollBox = class(Forms.TScrollBox)
  private
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
  end;

type MainForm = class(TForm)
...

//geklaut von TCustomListView.WMVScroll !!
procedure TScrollBox.WMVScroll(var Message: TWMVScroll);
var
  Before, After: Integer;
begin
  Before := GetScrollPos(ScrollboxHandle, SB_VERT);
  inherited;
  After := GetScrollPos(ScrollboxHandle, SB_VERT);
  if (Before <> After) then
    InvalidateRect(ScrollboxHandle, nil, True);
end;
Den CartScrollBoxHandle hole ich mir bei Form.Onactivate:
Delphi-Quellcode:
ScrollBoxHandle := ScrollBox.Handle;
Der Handle hat auch einen Wert. Die Funktion habe ich vom TCustomListView geklaut. Beim Scrollen eines ListViews wird nur der ListView neugezeichnet. Bei mir wird anscheinend das komplette Fenster neugezeichnet, da es flackert. Bei Update, Repaint, Invalidate das gleiche. (wäre auch unlogisch)

Ideen?

Grüße

Sebastian

maxk 11. Okt 2004 20:28

Re: Neuzeichnen TScrollbox, aber Fensterflackern
 
Hatte ich auch mal. Setz mal die entsprechenden DoubleBuffered auf True.

sieppl 11. Okt 2004 21:39

Re: Neuzeichnen TScrollbox, aber Fensterflackern
 
soll ich die scrollbox auf Double-Buffered setzen oder die Scrollbox?

Macht beides irgendwie keinen Sinn. Die Scrollbox flackert sowieso nicht. DoubleBuffered macht auch keinen Unterschied. (hab's ausprobiert)

Beim Fenster ist DoubleBuffered unlogisch, da es auch nicht flackert wenn der ListView gescrollt wird.

Es ist auch einfach falsch, dass das ganze Fenster neugezeichnet wird, obwohl dies nur bei der Scrollbox geschehen soll.

Grüße

Sebastian

sieppl 14. Okt 2004 12:13

Re: Neuzeichnen TScrollbox, aber Fensterflackern
 
sorry für den push, aber das Problem ist echt nervig und
ich kann mir nicht vorstellen, dass keiner hier vor mir
einen sauberen ScrollBox-Repaint hingelegt hat.
Andere funktionierende Ansätze sind auch willkommen.


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