Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.035 Beiträge
 
Delphi 12 Athens
 
#13

AW: Listbox Ownerdraw und Größenänderung

  Alt 12. Okt 2023, 09:43
Ich glaube ich habe die Ursache gefunden. In TCustomListBox.CreateParams wird das CS_HREDRAW nur bei Rechts-nach-Links Schreibweise gesetzt. Damit erfolgt bei einer Breitenänderung kein Neuzeichnen des gesamten Fensters, sondern nur des neu hinzugekommenen Bereichs. Zeichenbefehle außerhalb werden von Windows dann einfach ausgeblendet.

Abhilfe schafft eine Interposer-Klasse, deren Deklaration im Scope zwischen Vcl.StdCtrls und der TListBox im Form liegen muss:
Delphi-Quellcode:
type
  TListBox = class(Vcl.StdCtrls.TListBox)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;
...
procedure TListBox.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WindowClass.style := Params.WindowClass.style or CS_HREDRAW;
end;
Übrigens konnte ich dieses Verhalten mindestens ab Delphi 5 finden (darunter kann ich hier nicht prüfen). Es handelt sich also wahrlich nicht um irgendeine neue Optimierung.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat