Hallo Christian,
mit Hilfe Deines vorigen Hinweises habe ich die Prozedur so umgeändert, daß in der Liste der selektierte Eintrag wieder weiß auf blau erscheint, wenn man sich mit der Maus darüber hinwegbewegt, und nach der Auswahl eines Eintrages dieser wieder in schwarz auf weiß erscheint und nicht in der Farbe wie in der Auswahlliste.
Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
cb : TComboBox;
begin
cb := TComboBox(Control);
// sorgt dafür, daß der in der Liste aktuell gewählte Punkt
// weiß auf blau dargestellt wird
if (odSelected in State) then begin
cb.Canvas.Brush.Color := clNavy;
cb.Canvas.FillRect(Rect);
cb.Canvas.Font.Color := clWhite;
cb.Canvas.TextOut(Rect.Left,Rect.Top,cb.Text);
exit;
end;
// sorgt dafür, daß die Farben aus der Liste nicht in das
// AnzeigeFeld übernommen werden
if (odComboBoxEdit in state) then begin
cb.Canvas.Brush.Color := clWhite;
cb.Canvas.FillRect(Rect);
cb.Canvas.Font.Color := clBlack;
cb.Canvas.TextOut(Rect.Left,Rect.Top,cb.Text);
exit;
end;
// sorgt dafür das (hier) drei aufeinanderfolgende Einträge in der
// Auswahlliste jeweil anders gefärbt sind
with cb do begin
i := Index mod maxColAnz;
inc(i); // weil cArr mit 1 beginnt
Canvas.Font.Color := carr[i].Font;
Canvas.Brush.Color := carr[i].Bkgr;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
end;
end;
Damit wäre wohl das Thema geschafft.
Hier gleich noch ein paar allgemeine Fragen:
Warum verwendest Du
Delphi-Quellcode:
cb := TComboBox(Control);
with cb do begin
....
statt
with control do begin
....
Wann muß Create und Destroy verwenden?
Auch wenn ich einiges davon verwende, wäre es natürlich auch mal schön zu wissen warum, weil wenn man weiß warum etwas geht, kommt man über den Punkt des Nachmachens (was hier auf keinen Fall negativ zu betrachten ist) hinaus zum Machen.
mfg
eddy