Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit Listbox hintergrundfarbe Delphi 7 (https://www.delphipraxis.net/87534-problem-mit-listbox-hintergrundfarbe-delphi-7-a.html)

Van HelF 1. Mär 2007 22:14


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.

ste_ett 1. Mär 2007 22:39

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). :)

Van HelF 1. Mär 2007 22:54

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.

raiguen 2. Mär 2007 08:50

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;

kingflo 2. Mär 2007 09:16

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;

ste_ett 2. Mär 2007 09:50

Re: Problem mit Listbox hintergrundfarbe Delphi 7
 
Noch eine Alternative. :)

Delphi-Quellcode:
ListBox.Color := clRed;
ListBox.PaintTo(ListBox.Canvas, -1, -1);

kingflo 2. Mär 2007 10:00

Re: Problem mit Listbox hintergrundfarbe Delphi 7
 
stimmt das geht natürlich auch... darauf hätte ich auch kommen können :gruebel:

Van HelF 2. Mär 2007 12:43

Re: Problem mit Listbox hintergrundfarbe Delphi 7
 
vielen dank für die reichlichen antworten. :thumb:

Van HelF 2. Mär 2007 13:00

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