Also ich möchte in meiner ListView Text in zwei Zeilen schreiben. Wobei die zweite Zeile eine andere Farbe haben soll.
Delphi-Quellcode:
procedure TMainFrm.SkillBoxCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
aIconRect, aTextRect:TRect;
ItemCaption: string;
ItemType: string;
begin
DefaultDraw := False;
ItemCaption := Copy(Item.Caption, 0, Pos('|||', Item.Caption)-1);
ItemType := Copy(Item.Caption, Pos('|||', Item.Caption)+3, Length(Item.Caption));
aIconRect:=Item.DisplayRect(drBounds);
aTextRect:=Item.DisplayRect(drLabel);
if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then
begin
Sender.Canvas.Pen.Color := $008FC2B3;
Sender.Canvas.Brush.Color := $00CDEFE9;
Sender.Canvas.Rectangle(aTextRect);
end;
with Sender do
begin
aTextRect.Left := aTextRect.Left + 2;
aTextRect.Top := aTextRect.Top + 2;
Canvas.TextOut(aTextRect.Left, aTextRect.Top, ItemCaption);
if ItemType = 'Passiv' then
Canvas.Font.Color := clBlue
else
Canvas.Font.Color := clRed;
aTextRect.Top := aTextRect.Top + 14;
Canvas.TextOut(aTextRect.Left, aTextRect.Top, ItemType);
TListView(Sender).SmallImages.Draw(Canvas,aIconRect.Left+2,
aIconRect.Top,Item.ImageIndex);
end;
end;
Das soll Zwei Zeilen Text schreiben, was es auch tut. Die Zeilenhöhe wird automatisch angepasst durch die ImageList.
Wie gesagt, er schreibt beide Zeilen, aber die Farbe wird nicht übernommen, nachdem ich bereits einmal TextOut aufgerufen habe.
Michael N.