![]() |
AW: Listbox Ownerdraw und Größenänderung
Zitat:
![]() |
AW: Listbox Ownerdraw und Größenänderung
Liste der Anhänge anzeigen (Anzahl: 2)
@Uwe:
Das ist wie beschrieben sofort reproduzierbar. Auf den ersten Blick sehe ich auch nicht woran das liegt. Die Zeichen-Ereignisse kommen an, das Rechteck stimmt, wird mit FillRect gefüllt... Ich habe mal einfach bei jedem Zeichenbefehl eine zufällige Farbe für das FillRect verwendet. Das Ergebnis überrascht... Beispielprojekt im Anhang. Anhang 56322 |
AW: Listbox Ownerdraw und Größenänderung
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:
Ü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.
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; |
AW: Listbox Ownerdraw und Größenänderung
Zitat:
|
AW: Listbox Ownerdraw und Größenänderung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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