Voila, j'ai fait un ComboBox qui permet de choisir une couleur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TfrmAddItem.cbbAddCategoryColorDrawItem(Control: TWinControl;
                    Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
    if Index <= Length(Colors) - 1 then
        Begin
            cbbAddCategoryColor.Canvas.Pen.Color := clBlack;
            cbbAddCategoryColor.Canvas.FillRect(Rect);
            cbbAddCategoryColor.Canvas.TextOut(30, Rect.Top,VAR_COLOR_TABLE[Index]);
            cbbAddCategoryColor.Canvas.Brush.Color := Colors[Index];
            cbbAddCategoryColor.Canvas.Rectangle(Rect.Left + 2, Rect.Top + 2, 24,Rect.Top + 15);
        End
    else
        Begin // 'Other...' color case
            cbbAddCategoryColor.Canvas.Pen.Color := clBlack;
            cbbAddCategoryColor.Canvas.FillRect(Rect);
            cbbAddCategoryColor.Canvas.TextOut(30, Rect.Top,'Autres...');
        End;
end;

... Ok pas de prob...

Maintenant dans le OnChange, si on selectionne 'Autres...' il ouvre un TColorDialog et tout se passe bien , il me renvoie la couleur.

Mais je ne sais pas dessiner cette couleur dans le comboxBox, je veut dire : dans l'Item qui apparait maintenant et est sélectionné.

Voici ma methode onChange :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TfrmAddItem.cbbAddCategoryColorChange(Sender: TObject);
var
    cdgResult : TColor;
begin
    if cbbAddCategoryColor.ItemIndex = Length(Colors) then
        Begin
            cdgAddCategoryColor.Execute;
            cdgResult := cdgAddCategoryColor.Color;
            cbbAddCategoryColor.Canvas.Brush.Color := cdgResult;
            cbbAddCategoryColor.Canvas.Rectangle(Left + 2, Top + 2, 24, Top + 15);
            cbbAddCategoryColor.Canvas.Font.Color := clHighlightText;
            cbbAddCategoryColor.Canvas.TextOut(30, Top,'xxx');
        End;
end;
Celle-ci ne fonctionne pas.... :S


Merci d'avance