AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox Ownerdraw und Größenänderung

Ein Thema von ConstantGardener · begonnen am 11. Okt 2023 · letzter Beitrag vom 12. Okt 2023
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 21:19
@uwe: OK, ist ja eigentlich nur die Listbox im Form. Aber vielleicht hilft es...Projekt anbei
Mal prinzipiell: Dieses eigentlich nur kann man ja nicht wissen. Oft sind es auch ganz andere Besonderheiten, die in der Beschreibung gar nicht vorkommen, die man aber in einem Minimalprojekt leicht prüfen kann ohne alles nachzufragen. Ich kann schon nicht mehr zählen, wie oft ich schon ein Verhalten nicht nachstellen konnte, weil die Beschreibung nicht vollständig war. Ich verlinke dann gerne auf die Exact Instructions Challenge.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.349 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 21:51
@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.

2023-10-11-1-.png
Angehängte Dateien
Dateityp: zip TList Ownerdraw Error.zip (5,5 KB, 2x aufgerufen)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#14

AW: Listbox Ownerdraw und Größenänderung

  Alt 12. Okt 2023, 10:10
sondern nur des neu hinzugekommenen Bereichs. Zeichenbefehle außerhalb werden von Windows dann einfach ausgeblendet.
Zitat: Region
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
375 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Listbox Ownerdraw und Größenänderung

  Alt 12. Okt 2023, 20:10
@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
Andreas Schachtner
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz