AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Thema durchsuchen
Ansicht
Themen-Optionen

Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe

Ein Thema von RWarnecke · begonnen am 10. Jun 2012 · letzter Beitrag vom 11. Jun 2012
 
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 ?
Angehängte Grafiken
Dateityp: jpg OwnerDraw-Problem.jpg (8,9 KB, 18x aufgerufen)
Rolf Warnecke
App4Mission

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz