AGB  ·  Datenschutz  ·  Impressum  







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

ListBox Color "updaten"

Ein Thema von chri_ri · begonnen am 23. Feb 2009 · letzter Beitrag vom 24. Mär 2009
Antwort Antwort
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#1

ListBox Color "updaten"

  Alt 23. Feb 2009, 12:52
Ich habe eine ListBox, dessen Hintergrundfarbe ich mit ListBox.Color ändere.
Das Problem ist aber, dass sich die Hintergrundfarbe nur in dem Bereich ändert, welcher mit Items gefüllt ist.
Aber sobald ich meine Anwendung z.b. kurz Minimiere und anschließend wiederherstelle ist der ganze Hintergrund ausgefüllt (wie es ja auch sein soll).

Habt ihr eventuell einen Tipp woran das liegen könnte oder wie ich dieses Problem umgehen kann?
Auf irgendwelche "Extra-Komponenten" möchte ich möglichst verzichten.


Schonmal Vielen Dank im Vorraus!



mfg. chri_ri
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: ListBox Color "updaten"

  Alt 23. Feb 2009, 12:57
Schonmal ListBox.Repaint bzw. ListBox.Refresh versucht? (nach'm Zuweisen von Color)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#3

Re: ListBox Color "updaten"

  Alt 23. Feb 2009, 13:46
Das wird nicht gehen, aber schau mal ob das hier hilft, das nehm ich bei Open GL Zeug normalerweise nach einem Resize und Anpassung diverser Parameter zum Neuzeichen (allerdings mit false als letzten Parameter, weil ich da den Hintergrund ja selbst mache).

InvalidateRect(Listbox1.Handle, nil, true); Die API-Funktion makiert einen Bereich als ungültig und darauf sollte WM_PAINT ausgelöst werden.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#4

Re: ListBox Color "updaten"

  Alt 23. Feb 2009, 14:09
genial

Bisher hatte ich das mit
Delphi-Quellcode:
listbox1.color:=clred;
listbox1.hide;
listbox1.show;
recht unelegant gelöst
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: ListBox Color "updaten"

  Alt 23. Feb 2009, 14:28
Zitat von taaktaak:
recht unelegant gelöst
geht noch schlimmer ... ganze Form oder gleich den ganzen Desktop neu zeichnen lassen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: ListBox Color "updaten"

  Alt 24. Feb 2009, 17:31
Also erstmal Big THX!

@himitsu: Das habe ich bereits probiert.

@taaktaak: Hat's doch noch jemandem was gebracht.

@Cyf: Super InvalidateRect() hat geklappt. Nur hat es bei mir erst gewirkt, nachdem Ich den letzten Parameter doch auf true gesetzt hatte.


DP ist doch immerwieder eines der besten Delphi-Foren.


@Cyf: Das passt zwar nicht ganz zum eigentlichen Thema und muss auch nicht unbedingt sein, aber da du etwas von "Hintergrund selbst zeichnen" erwähnt hast, würde Ich dich fragen ob du nur kurz vielleicht noch ein gutes Beispiel oder paar Tips weißt um in einer TListBox z.b. ein Bild als Hintergrund zu verwenden (ein Link reicht). Weil hatte mal vor einer ganzen Weile nach soetwas geschaut aber es hatte nie richtig so funktioniert, wie es sollte.



mfg. chri_ri
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#7

Re: ListBox Color "updaten"

  Alt 24. Mär 2009, 20:35
Sorry, die Antwort hat ein wenig auf sich warten lassen.
Falls du einzelne Einträge mit einem Bild hinterlegen möchtest (oder lustige Einträge mit Farben hinterlegen), kannst du mal veruschen den Style auf eines der lbOwnerDrawXX (fixe oder variable Eintragsgröße) zu setzen und OnDrawItem (und ggf. OnMeasureItem) zuzuweißen. In den Ereignissen zeichnest du entsprechend (auch den jeweiligen String).

Falls es um ein Bild für den kompletten Hintergrund geht, auf dem dann normal die Einträge angezeigt werden, müsste es dann möglich sein, das Bild einmal zu zeichen und den Style auf lbOwnerDrawFixed zu setzen und den entsprechenden Teil des Bildes (oder das ganze Bild, wenns auf Rechenzeit nicht so ankommt) neu zu zeichnen.
Besser wäre hier aber die Komponente abzuleiten und auf WM_Paint zu reagieren, aber das scheint nicht auszureichen, da die Einträge wohl immer nochmal einzeln überzeichnet werden, also müsste man das auch hier überschreiben, außer du willst in deinem Bild Balken mit der eingestellten Hintergrundfarbe.

[Edit] Das mit dem WM_Paint überschreiben sollte doch gehen, einen kleinen Überblick dazu, wie die PaintBox sich zeichnet geben TCustomListBox.WMPaint, TCustomListBox.CNDrawItem und TCustomListBox.DrawItem. In WM_Paint wird eine Message erzeugt die CNDrawItem ausliest und darauf DrawItem aufruft. DrawItem ist als virtual deklariert und es zu überschreiben müsste dann eigentlich für den Hintergrund der Einträge ausreichen. Den Code hierfür müsste man eigentlich einfach ohne das FCanvas.FillRect übernehmen können.

[Edit2]Und das mit dem true bei InvalidateRect ist klar, denn das gibt ja gerade an, dass du den Hintergrund auch erneuert haben willst.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  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 05:50 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