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
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.111 Beiträge
 
Delphi XE2 Professional
 
#1

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 08:28
Nach dem Ändern der Größe: ListBox1.Repaint;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
ConstantGardener

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

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 09:33
Danke Amateurprofi für die Antwort, aber das sollte ja automatisch gehen. Klar kann ich im onResize des Forms ne'n Timer neu starten und dann im onTimer ein Repaint machen.
Fühlt sich aber frickelig an! Ist wohl eher ein Bug, wundert mich nur, dass sich bisher keiner dran gestört hat.
Andreas Schachtner
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 09:47
Oder .Invalidate anstatt .Repaint bzw. .Refresh.

Repaint malt "eventuell" sofort (kommt bissl auf die Komponenten drauf an)
Invalidate sagt die Anzeige ist "ungültig" ... sie wird dann bei nächster Gelegenheit aktualisiert (Paint)

Delphi-Quellcode:
ListBox1.Repaint;
ListBox1.Repaint;
ListBox1.Repaint;
ListBox1.Repaint;
ListBox1.Repaint;
// malt 1 oder 5 Mal

ListBox1.Invalidate;
ListBox1.Invalidate;
ListBox1.Invalidate;
ListBox1.Invalidate;
ListBox1.Invalidate;
// malt anschließend nur 1 Mal

PS:
Invalidate macht ein InvalidateRect auf das ganze Control.
Beim Resize oder Scroll wird nur ein InvalidateRect auf den "neuen" Bereich ausgelöst und dann auch nur dieser Teil neu gezeichnet.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Okt 2023 um 09:57 Uhr)
  Mit Zitat antworten Zitat
ConstantGardener

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

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 11:28
Ja ist schon alles klar mit dem Repaint usw. Aber es kann doch nicht sein, dass ich das selbst anstoßen muss!?

Wenn sich die Größe der Komponente ändert muss die doch von selbst neu gezeichnet werden und zwar alle sichtbaren Einträge!?
Macht sie mit Standardeinstellungen ja auch. Nur bei OwnerdrawFixed und OwnerdrawVariable tut sie das offenbar nicht.
Andreas Schachtner
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 12:12
Vielleicht würde es helfen ein Beispielprojekt hier bereit zu stellen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
ConstantGardener

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

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 12:57
@uwe: OK, ist ja eigentlich nur die Listbox im Form. Aber vielleicht hilft es...Projekt anbei
Angehängte Dateien
Dateityp: zip Project12.zip (90,0 KB, 5x aufgerufen)
Andreas Schachtner
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 13:10
DFM vergessen

Es ist halt ein Standardverhalten, dass nur der neue Bereich und die aktuelle Selektion neu gezeichnet werden, bei Resize/Scroll,
und dass standardmäßig alles links ausgerichtet ist.

Du willst was Anderes machen, also mußt du auch das Standardverhalten ändern.
z.B. indem man den BiDiMode der Listbox auf bdRightToLeft stellt. (PS, die Hebräer schreiben von rechts nach links)
Als Bonus ist dabei die Scrollbar dann links.



Ach ja, beim Paint, durch das Resize, liegt eine Region auf dem Canvas, wodurch nur der neue Bereich gezeichnet wird.
Du kannst natürlich versuchen, vor jedem Zeichnen, diese Region zu löschen.
https://docwiki.embarcadero.com/Code...pRect_(Delphi)


Oder
Delphi-Quellcode:
procedure TForm1.FormResize(Sender: TObject);
begin
  ListBox1.Invalidate;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Okt 2023 um 13:31 Uhr)
  Mit Zitat antworten Zitat
ConstantGardener

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

AW: Listbox Ownerdraw und Größenänderung

  Alt 11. Okt 2023, 14:40
Danke Himitsu, das funktioniert! Hätte aber trotzdem geschworen, dass das früher automatisch ging.
Andreas Schachtner
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

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
10.054 Beiträge
 
Delphi 12 Athens
 
#10

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
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


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