Hi,
auf "leere" Inhalte war mein Code nicht vorbereitet. Aber was spricht dagegen, einfach ein if Item.Count > 0 then begin ... end hinzusetzen?
Jedenfalls hast du ein leeres Item in deiner ComboBox drin, also ''.
Ansonsten kannst du den Inhalt auch schon per Objektinspektor setzen.
Mfg
FAlter
[edit] Am besten sieht es aus, wenn du im Falle not (Count > 0) wenigstens ein Rechteck zeichnest:
Delphi-Quellcode:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
Item: TStringList;
W, I, L: Integer;
Cb: TCustomComboBox;
begin
Cb := (Control as TCustomComboBox);
Item := TStringList.Create;
try
Item.CommaText := Cb.Items[Index];
if Item.Count > 0 then
begin
W := (Rect.Right - Rect.Left) div Item.Count; //hier alle gleiche Breite
for I := 0 to Item.Count - 1 do
begin
L := Rect.Left + I * W;
Cb.Canvas.TextRect(
Classes.Rect(L, Rect.Top, Rect.Right, Rect.Bottom),
L,
Rect.Top,
Item[I]
);
end;
end
else
Cb.Canvas.FillRect(Rect);
finally
Item.Free;
end;
end;
[/edit]
[edit] Code verbessert - kann jetzt für mehrere ComboBoxen verwendet werden und muss nicht mehr angepasst werden (an tatsächlich verwendeten Namen der ComboBox). [/edit]
[edit] Jetzt aber
letztes vergessenes ComboBox1 eliminiert. [/edit]