Problem mit Listbox hintergrundfarbe Delphi 7
Hallo,
ich habe ein recht einfaches problem, jedoch blicke ich nicht ganz durch, warum. Ich möchte die hintergrundfarbe einer listbox ändern (zur laufzeit), das sollte ja kein problem sein, einfach listbox1.color:=clred; Jetzt kommt aber das problem, es wird nur die hintergrundfarbe hinter vorhandenen items geändert, d.h. die leere fläche in der listbox bleibt weiss, ich habe schon die verschiedenen listbox styles ausprobiert (z.b. lbOwnerDrawFixed), hat jedoch nichts gebracht. Das verwirrende in Delphi 6 (ent) funktioniert das ganze wunderbar jedoch in delphi 7 (ent) nicht. |
Re: Problem mit Listbox hintergrundfarbe Delphi 7
Die weissen Flächen werden erst neugezeichnet, wenn ein Teil des Controls neugezeichnet wird, wo kein Element liegt, z.B. bei Fensterwechsel.
Nach dem Umsetzen der Farbe musst du das Control einmal komplett neu zeichnen (lassen). :) |
Re: Problem mit Listbox hintergrundfarbe Delphi 7
Ich habe auch schon probiert danach ein listbox1.repaint , refresh oder update zu schreiben, hat aber leider nichts gebracht.
|
Re: Problem mit Listbox hintergrundfarbe Delphi 7
Das Einfärben aller Zeilen musst du selbst in die Hand nehmen und zwar im OnDrawItem:
Delphi-Quellcode:
...
ListBox1.Style := lbOwnerDrawVariable {oder lbOwnerDrawFixed} ... procedure {Form}.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with ListBox1 do begin if (odSelected in State) or (odFocused in State) then Canvas.Brush.color := clHighLight //oder welche Farbe auch immer else Canvas.Brush.color := ColorBox1.selected; //--oder irgendeine 'feste' Farbe Canvas.FillRect(Rect); Canvas.Font.Color := clblack; Canvas.TextOut(Rect.Left,Rect.Top,Items[Index]); end; end; |
Re: Problem mit Listbox hintergrundfarbe Delphi 7
oder (aber die DrawItem Methode ist besser)
Delphi-Quellcode:
var
oldHeigt:integer; begin oldHeigt:=ListBox1.Height; listBox1.Color:=clRed; ListBox1.Height:=0; ListBox1.Height:=oldHeigt; |
Re: Problem mit Listbox hintergrundfarbe Delphi 7
Noch eine Alternative. :)
Delphi-Quellcode:
ListBox.Color := clRed;
ListBox.PaintTo(ListBox.Canvas, -1, -1); |
Re: Problem mit Listbox hintergrundfarbe Delphi 7
stimmt das geht natürlich auch... darauf hätte ich auch kommen können :gruebel:
|
Re: Problem mit Listbox hintergrundfarbe Delphi 7
vielen dank für die reichlichen antworten. :thumb:
|
Re: Problem mit Listbox hintergrundfarbe Delphi 7
funktioniert so aber besser, anders gibts unschöne verpixelungen:
ListBox1.PaintTo(ListBox1.Canvas, -2, -2); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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