Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - farbige ComboBox


OliverN_26 - Mo 03.01.11 02:36
Titel: farbige ComboBox
Hi Leute

Ist es möglich "1 Eintrag" in der ComboBox mehrfarbig zu gestalten?
Also NICHT die Zeile - das weiss ich.

also so:


Delphi-Quelltext
1:
ComboBox1.Items.Strings[index] := 'Das[blau] ist[gelb] ein[rot] Test[grün].';                    


Ich danke euch


elundril - Mo 03.01.11 02:43

Jap, selber färben beim Zeichnen.

lg elundril


OliverN_26 - Mo 03.01.11 03:08

Hi

Ich hab doch geschrieben dass ich weiss wie man "ZEILEN" färbt.
Ich weiss allerdings nicht wie man innerhalb "1 Zeile" die Farbe ändert.
Das bringt mich leider kein Stück weiter.

lg


Martok - Mo 03.01.11 03:48

Da bist ja schon na dran, die Methode ist die gleiche:

Ersten Teil zeichnen, Font.Color wechseln, nächsten Teil, nochmal wechseln etc. Damit du weißt, wo es weiter geht, sollte man die X-Position z.B. per Addition von TextWidth mitzählen.


OliverN_26 - Mo 03.01.11 16:33

Ich danke dir :-) Das war der richtige Tip.
Hier mal der Code falls es jemanden interessieren sollte.

Zur Erläuterung: Ich habe einen Begriff und dann in Klammern einen Wert. Und dieser soll in eine andere Farbe.
Beispiel: Aufträge (21)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with ComboBox1, ComboBox1.Canvas do begin
    Font.Color  := clWhite;  // SchriftFarbe
    Brush.Color := clGreen;  // HintergrundFarbe
    FillRect(Rect);          // Hintergrund zeichnen
    TextOut(Rect.Left+2,Rect.Top+1,
            copy(Items[index],1,Pos('(',Items[index])-1)); // Textausgabe

    Font.Color  := clWhite;  // SchriftFarbe
    Brush.Color := clMaroon; // HintergrundFarbe
    TextOut(Rect.Left+2+TextWidth(copy(Items[index],1,Pos('(',Items[index])-1)),
            Rect.Top+1,copy(Items[index],Pos('(',Items[index]),
            Length(Items[index]))); // Textausgabe
  end;
end;


danke noch mal und ein frohes neues Jahr :-)