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:
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