AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Verschiedene Farben einzelner Items in ComboBox
Thema durchsuchen
Ansicht
Themen-Optionen

Verschiedene Farben einzelner Items in ComboBox

Ein Thema von sebastian1979 · begonnen am 29. Jan 2010 · letzter Beitrag vom 1. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
sebastian1979

Registriert seit: 22. Jan 2010
Ort: Solingen
16 Beiträge
 
Delphi 2005 Professional
 
#1

Verschiedene Farben einzelner Items in ComboBox

  Alt 29. Jan 2010, 19:54
Hallo,

ich möchte gerne mehrere ITEMS mit verschiedenen Hintergrundfarben in einer ComboBox darstellen.
Leider habe ich bislang keine vernünftigen Lösungsansatz gefunden.

Die einzelnen Einträge sollen hinterher zur Laufzeit erstellt werden
und Text und Farbe aus der Datenbank übernehmen. Die Datenbank ist nicht das Problem,
ich weiß einfach nicht wie die die einzelnen Items ansprechen soll.

Delphi-Quellcode:
...
  combobox1.Items.Clear;
  combobox1.Items.Add('test1'); (z.B. rot)
  combobox1.Items.Add('test2'); (z.B. gelb)
  combobox1.Items.Add('test3'); (z.B. grün)
...
Habe auch schon das Ereignis DrawItem probiert...ohne Erfolg...es ändert sich gar nichts.
Delphi-Quellcode:
procedure TMHauptmaske.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  Combobox1.Canvas.Brush.Color := clred;
end;
So ähnlich habe ich es bereits bei einem DBGrid hinbekommen, aber nicht mit der Combobox.

Ich hoffe mir kann jemand weiter helfen.

Vielen Dank.

[edit=Matze][delphi]-Tags eingefügt, da der Themenersteller den Beitrag nicht mehr editieren kann. MfG, Matze[/edit]
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 29. Jan 2010, 19:55
Du musst nach dem Setzen der Farbe auch Zeichnen:
combobox1.canvas.fillrect(arect);
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 29. Jan 2010, 19:56
Hattest du auch .OwnerDraw auf True gestellt?
ach nee, der Style muß csOwnerDrawFixed oder csOwnerDrawVariable sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
sebastian1979

Registriert seit: 22. Jan 2010
Ort: Solingen
16 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 29. Jan 2010, 20:38
vielen Dank für die raschen Antworten.

Ich habe es jetzt wie folgt ausprobiert:

Style auf csOwnerDrawFixed gesetzt und testweise auch auf csOwnerDrawVariable

Delphi-Quellcode:
procedure TMHauptmaske.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
  var i:integer;
begin
  i:= combobox1.ItemIndex;
  if combobox1.Items.Strings[i] = 'test1then
  combobox1.canvas.Brush.Color := clred;
  if combobox1.Items.Strings[i] = 'test2then
  combobox1.canvas.Brush.Color := clyellow;
  if combobox1.Items.Strings[i] = 'test3then
  combobox1.canvas.Brush.Color := clgreen;
  combobox1.canvas.FillRect(rect);
end;
Allerdings ändert sich die Frabe erst wenn ich mit der maus über das item gehe,
vorher ist das ganze Feld weiß, es sollen aber direkt die entsprechneden Fraben angezeigt werden.

Des Weiteren scheint dabei der Text auch in der Farbe erstellt zu werden,
der soll aber schwarz bleiben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 29. Jan 2010, 20:44
Zitat:
combobox1.ItemIndex
Rate mal, wozu der Parameter Index ist?

und was den Text betrifft: Stell am Ende der Prozedur die Farbe wieder zurück.

PS: Es kann nicht schaden, wenn der Parameter State auch noch ausgewertet wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
sebastian1979

Registriert seit: 22. Jan 2010
Ort: Solingen
16 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 30. Jan 2010, 11:09
Vielen Dank für Eure Hilfe, vor allem für den INDEX
habe es jetzt wie folgt hinbekommen:

Delphi-Quellcode:
procedure TMHauptmaske.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var holdColor: TColor;
begin
  holdColor := combobox1.Canvas.Brush.Color;
  if combobox1.Items.Strings[index] = 'test1then
  combobox1.canvas.Brush.Color := clred;
  if combobox1.Items.Strings[index] = 'test2then
  combobox1.canvas.Brush.Color := clyellow;
  if combobox1.Items.Strings[index] = 'test3then
  combobox1.canvas.Brush.Color := clgreen;
  combobox1.canvas.Font.Color := clblack;
  combobox1.Canvas.FillRect(rect);
  combobox1.Canvas.TextOut(Rect.left, Rect.top, combobox1.Items[index]);
  combobox1.canvas.brush.Color := holdColor;
end;
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#7

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 30. Jan 2010, 11:17
Hallo Sebastian,

könntest du bitte in deinem ersten Beitrag auch noch die Delphi-Tags um den Quellcode herum setzen?
Dann sieht es hübscher aus

Danke!

Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 30. Jan 2010, 11:23
Jetzt noch statt combobox1 ein TComboBox(Control) verwenden und es ist perfekt.

Zitat:
Delphi-Quellcode:
if combobox1.Items.Strings[index] = 'test1then
  combobox1.canvas.Brush.Color := clred;
if combobox1.Items.Strings[index] = 'test2then
  combobox1.canvas.Brush.Color := clyellow;
if combobox1.Items.Strings[index] = 'test3then
  combobox1.canvas.Brush.Color := clgreen;
Wenn du weißt, welcher Eintrag wo ist, dann kannst du den Index auch direkt verwenden.
Delphi-Quellcode:
case Index of
  0: TComboBox(Control).Canvas.Brush.Color := clRed;
  1: TComboBox(Control).Canvas.Brush.Color := clYellow;
  2: TComboBox(Control).Canvas.Brush.Color := clGreen;
end;

PS: Eine ordentliche Codeeinrückung, sowie eine entsprechende Groß-/Kleinschreibung macht das Lesen/Verstehen von Code um Einiges einfacher.
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 toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#9

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 30. Jan 2010, 11:48
Bei vielen Farben könne man es auch so machen:

Delphi-Quellcode:
type
  TFarbe = record
    Name: String;
    Farbe: TColor;
  end;

const
  MaxFarben = 2;
  MeineFarben: array[0..MaxFarben] of TFarbe =
    ((Name: 'test1'; Farbe: clred),
    (Name: 'test2'; Farbe: clyellow),
    (Name: 'test2'; Farbe: clgreen));

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  i: Word;
begin
 for i := 0 to MaxFarben do
 begin
   if ComboBox1.Items.Strings[Index] = MeineFarben[i].Name then
     ComboBox1.Canvas.Brush.Color := MeineFarben[i].Farbe;
 end;
end;
Thomas
  Mit Zitat antworten Zitat
sebastian1979

Registriert seit: 22. Jan 2010
Ort: Solingen
16 Beiträge
 
Delphi 2005 Professional
 
#10

Re: Verschiedene Farben einzelner Items in ComboBox

  Alt 1. Feb 2010, 06:50
Hallo Zusammen,


Zitat von fkerber:
Hallo Sebastian,

könntest du bitte in deinem ersten Beitrag auch noch die Delphi-Tags um den Quellcode herum setzen?
Dann sieht es hübscher aus

Danke!

Grüße, Frederic
...ich arbeite dran...bei meiner letzten Antwort habe ich es ja gemacht.

Hier nun der aktuelle Code und Datenbankbasiert, die Combobox wird im vorfeld mit bestimmten Einträgen gefüttert:

Delphi-Quellcode:
procedure TMHauptmaske.ComboBoxDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var holdColor: TColor;
begin
  holdColor := ((FindComponent(CB)) as TCombobox).Canvas.Brush.Color;
  DB.TSTSTATUS.Locate('BEZ',((FindComponent(CB)) as TCombobox).Items[index],[]);
  ((FindComponent(CB)) as TCombobox).canvas.Brush.Color := stringtocolor(DB.TSTSTATUSFARBE.asstring);
  ((FindComponent(CB)) as TCombobox).canvas.Font.Color := clblack;
  ((FindComponent(CB)) as TCombobox).Canvas.FillRect(rect);
  ((FindComponent(CB)) as TCombobox).Canvas.TextOut(Rect.left, Rect.top, ((FindComponent(CB)) as TCombobox).Items[index]);
  ((FindComponent(CB)) as TCombobox).canvas.brush.Color := holdColor;
end;
Vielen Dank für Eure Hilfe!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:32 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