Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ComboBox -> Mehrfarbig gestalten (https://www.delphipraxis.net/90821-combobox-mehrfarbig-gestalten.html)

HolgerCW 24. Apr 2007 13:23


ComboBox -> Mehrfarbig gestalten
 
Hallo zusammen,

gibt es eine Möglichkeit die Werte in einer ComboBox Zwei - oder Mehrfarbig anzuzeigen ???

Gruss

Holger

Luckie 24. Apr 2007 13:26

Re: ComboBox -> Mehrfarbig gestalten
 
Ja. Du musst die Eintrage selber zeichnen in dem Ereigniss Hier im Forum suchenOnDrawItem.

Bernhard Geyer 24. Apr 2007 13:36

Re: ComboBox -> Mehrfarbig gestalten
 
Oder Komponenten nehmen die über eine art Mini-HTML sowas direkt unterstützen wie die HTML-ComboBox vom Elpack

HolgerCW 24. Apr 2007 13:49

Re: ComboBox -> Mehrfarbig gestalten
 
Die Lösung von Lucki hört sich schon gut an.

Was muss denn hier dann ergänzt werden:

Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(
  Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
 if ComboBox1.text = 'Test' then
 begin
   ComboBox1. ...;
   
  end;
end;
Gruss

Holger

Luckie 24. Apr 2007 13:54

Re: ComboBox -> Mehrfarbig gestalten
 
Ich bin ziemlich sicher, dass man mit der Suche komplett lauffähigen Copy and Waste Code findet hier im Forum.

HolgerCW 24. Apr 2007 14:15

Re: ComboBox -> Mehrfarbig gestalten
 
Habe mal gesucht und das heir gefunden:

Habe dabei festgestellt, das das Programm nie in das Ereignis reinspringt. Wie kann ich das realisieren ?

Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(
  Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
 farbe: TColor;
begin
 if ComboBox1.text = 'Test' then farbe:= clmaroon;
 with ComboBox1, ComboBox1.Canvas do begin
  Font.Color:= clblack; // SchriftFarbe
  Brush.Color:= farbe; // HintergrundFarbe
  FillRect(Rect);      // Hintergrund zeichnen
  TextOut(Rect.Left+5, Rect.Top+1, Items[index]); // Textausgabe
 end;
end;
Gruss

Holger

Bernhard Geyer 24. Apr 2007 14:22

Re: ComboBox -> Mehrfarbig gestalten
 
Das Property Style der ComboBox muß schon auf einen Wert vom Typ csOwnerDraw* stehen damit OwnerDraw aufgerufen wird.

HolgerCW 24. Apr 2007 14:57

Re: ComboBox -> Mehrfarbig gestalten
 
Alles klar,

jetzt klappt es,

wie kann ich es denn jetzt realisieren, das jeder Wert in der Combobox abgefragt wird und dann z.b. wenn ein Wert in der ComboBox 'Test' hiesst die Farbe grau ist und wenn der Wert 'Test2' heisst der Wert blau ist. Also losgelöst vom Index ???

Vorher fülle ich die Combobox natürlich mit diesen Werten 'Test' und 'Test2'

Gruss

Holger

raiguen 24. Apr 2007 18:45

Re: ComboBox -> Mehrfarbig gestalten
 
Zitat:

Zitat von HolgerCW
wie kann ich es denn jetzt realisieren, das jeder Wert in der Combobox abgefragt wird ...

So z.B.
Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var farbe: TColor;
begin
  farbe := ComboBox1.Color; //Hintergrundfarbe für alle Items, die nicht eine spezielle Farbe haben

  //--'Inhalt' der Zeile abfragen und ggf. spezielle Farbe zuweisen
  if ComboBox1.Items[Index] = 'Test' then farbe:= clGray;
  if ComboBox1.Items[Index] = 'Test1' then farbe:= clNavy;
  if ComboBox1.Items[Index] = 'Test2' then farbe:= clYellow;
 
  //-- Zeile mit der entsprechenden Farbe zeichen; standard=Combobox-Farbe (oder eine beliebige andere)
  with ComboBox1, ComboBox1.Canvas do begin
    Font.Color:= clblack; // SchriftFarbe
    Brush.Color:= farbe; // HintergrundFarbe
    FillRect(Rect);      // Hintergrund zeichnen
    TextOut(Rect.Left+5, Rect.Top+1, Items[index]); // Textausgabe
  end;
end;

HolgerCW 25. Apr 2007 08:41

Re: ComboBox -> Mehrfarbig gestalten
 
Ja super,

danke ...

Das klappt

Gruss

Holger

Micha88 29. Jul 2009 17:23

Re: ComboBox -> Mehrfarbig gestalten
 
Ich könnte gut diese HTML-ComboBox gebrauchen, jedoch finde ich nur gesamte Packs zum herunterladen, die zu allem Übel auch noch ein Setup sind!

Weiß wer wo ich NUR die ComboBox herbekomme?

Jens Hartmann 1. Nov 2009 22:45

Re: ComboBox -> Mehrfarbig gestalten
 
Hallo zusammen,

ich habe nach dem einfärben der ComboBox in verschieden Farben gesucht, und bin zu diesem Thread gekommen. Mein Problem ist, das ich alles so glaube ich, genau so geamcht habe wie hier gezeigt, jedoch ändern sich meine Farben der ComboBox nicht.

Hier mal mein Code...
Delphi-Quellcode:
procedure TMailSendenForm.CBGruppeAnlegenDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var Farbe: TColor;
begin
  Farbe := CBGruppeAnlegen.Color; //Hintergrundfarbe für alle Items, die nicht eine spezielle Farbe haben

  //--'Inhalt' der Zeile abfragen und ggf. spezielle Farbe zuweisen
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 1' then Farbe := clLime;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 2' then Farbe:= clYellow;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 3' then Farbe:= clBlue;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 4' then Farbe:= clFuchsia;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 5' then Farbe:= clAqua;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 6' then Farbe:= clMoneyGreen;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 7' then Farbe:= clSkyBlue;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 8' then Farbe:= clNavy;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 9' then Farbe:= clTeal;
  if CBGruppeAnlegen.Items[Index] = 'Gruppe 10' then Farbe:= clPurple;

  //-- Zeile mit der entsprechenden Farbe zeichen; standard=Combobox-Farbe (oder eine beliebige andere)
  with CBGruppeAnlegen, CBGruppeAnlegen.Canvas do begin
    Font.Color:= clblack; // SchriftFarbe
    Brush.Color:= Farbe; // HintergrundFarbe
    FillRect(Rect);      // Hintergrund zeichnen
    TextOut(Rect.Left+5, Rect.Top+1, Items[index]); // Textausgabe
  end;
end;
Vieleicht hat ja jemand eine Idee. Danke schon mal und Gruß

Jens

Jens Hartmann 1. Nov 2009 22:51

Re: ComboBox -> Mehrfarbig gestalten
 
Sorry vergesst es.

Hatte das Proberty Style ausversehen wieder geändert.

Danke trotzdem. Gruß Jens

himitsu 1. Nov 2009 22:51

Re: ComboBox -> Mehrfarbig gestalten
 
Hast du das CBGruppeAnlegenDrawItem auch dem .OnDrawItem zugewiesen
und welchen Wert hat .Style deiner ComboBox?

[edit]
OK, dann hat sich das ja geklärt.

PS: bei solchen "Änderungen" bitte nur den Post editieren (ist ja kein neuer Beitrag notwendig)

Andreas L. 1. Nov 2009 22:52

Re: ComboBox -> Mehrfarbig gestalten
 
Zitat:

Zitat von Bernhard Geyer
Das Property Style der ComboBox muß schon auf einen Wert vom Typ csOwnerDraw* stehen damit OwnerDraw aufgerufen wird.

Das hast du auch beachtet? Weicht die Groß- und Kleinschreibung von den Items ab? Ein Stringvergleich ist case-sensitive. Könntest es z. B. so machen:
Delphi-Quellcode:
AnsiLowerCase(CBGruppeAnlegen.Items[Index]) = 'gruppe 1'


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz