Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

  Alt 10. Jun 2012, 18:49
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 ?
Miniaturansicht angehängter Grafiken
ownerdraw-problem.jpg  
Rolf Warnecke
App4Mission

Geändert von RWarnecke (10. Jun 2012 um 19:34 Uhr)
  Mit Zitat antworten Zitat