Einzelnen Beitrag anzeigen

neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#1

[DevExpress-HowTo] TcxListBox / TListBox flickerfrei

  Alt 14. Mär 2012, 11:39
Da auch die TcxListBox auf TListBox aufsetzt, "leidet" auch diese Komponente an extremen Flickern, insbesondere beim Resizen z.B. eines Formulars/Frames. Auch das Aktivieren des DoubleBufferings bringt keine Besserung (btw gibt es das Problem auch in C#).

Durch Überschreiben der Prozedur CreateParams() verschwindet dieser Effekt. Dazu ist noch nicht einmal das Ableiten in eine eigene Komponente nötig, wenn man per Interception vorgeht. Dazu wird deklariert:
Delphi-Quellcode:
  TcxListBox = class(cxListBox.TcxListBox)
  public
    procedure CreateParams (var Params: TCreateParams); override;
  end;
und implementiert:
Delphi-Quellcode:
procedure TcxListBox.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_COMPOSITED; // or WS_EX_LAYERED;
end;
Das auch manchmal vorgeschlagene Attribut WS_EX_LAYERED hat bei mir einen lustigen "Freistellungs"-Effekt der Listbox bewirkt und also nicht funktioniert.

Diesen Code kann man auch in eine separate Unit auslagern. Dann ist darauf zu achten, dass sie in der Uses-Klausel am besten als letzte Unit eingebunden wird. Das gilt auch, wenn man so die Standard-Listbox reparieren will.

HTH.
Andreas
  Mit Zitat antworten Zitat