Hallo zusammen,
mit der Procedure zeichne ich in einer TAdvListView ein bestimmtes Icon in die 8.Spalte. Das funktioniert auch soweit.
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
///
/// [Orginal : http://www.delphipraxis.net/1115406-post3.html]
///
procedure TMainForm.AdvLV_OverviewListCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
aRect: TRect;
aIcon: TIcon;
begin
if (SubItem = 7) and (AdvToolBarPg_Main.ActivePageIndex = 1) then
begin
aIcon:= TIcon.Create;
try
DefaultDraw:= False;
ListView_GetSubItemRect(Sender.Handle,Item.Index,SubItem,LVIR_BOUNDS,@aRect);
if (TRechnung(RechnungsListe.Items[Item.Index]).Verschickt) and (not TRechnung(RechnungsListe.Items[Item.Index]).Bezahlt) then
ImgL_SmallImages.GetIcon(11, aIcon)
else
if (TRechnung(RechnungsListe.Items[Item.Index]).Verschickt) and (TRechnung(RechnungsListe.Items[Item.Index]).Bezahlt) then
ImgL_SmallImages.GetIcon(10, aIcon)
else
ImgL_SmallImages.GetIcon(12, aIcon);
Sender.Canvas.Brush.Style := bsDiagCross;
if Odd(Item.Index) then
SetBkColor(Sender.Canvas.Handle, ColorToRgb(cl3DLight))
else
SetBkColor(Sender.Canvas.Handle, ColorToRgb(clWhite));
Sender.Canvas.FillRect(aRect);
Sender.Canvas.Draw(aRect.Left + ((aRect.Right - aRect.Left - aIcon.Width) div 2), aRect.Top, aIcon);
finally
aIcon.Free;
end;
end;
end;
Meine beiden Probleme seht Ihr in dem angehängten Bild. Ich möchte gerne jede zweite Zeile grau haben und dann jeweils nach Bedingung die entsprechenden Icons. Leider sieht bei mit das grau wie ein Muster aus und ist nicht als durchgängige Farbe. Das zweite Problem, was ich habe ist der Cursorbalken, der in der letzten Spalte nur noch den Rahmen zeigt.
Was muss ich an meinem obenstehenden Quelltext ändern, damit ich die Probleme weg bekomme ?
Bei den anderen Spalten benutze ich die folgende Procedure um jede zweite Zeile grau zu bekommen :
Delphi-Quellcode:
procedure TMainForm.AdvLV_OverviewListCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Odd(Item.Index) then
Sender.Canvas.Brush.Color := cl3DLight
else
Sender.Canvas.Brush.Color := clWhite;
end;
Kann es sein, dass sich hier etwas nicht verträgt ? Wenn ja, was ?