![]() |
Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
mit der Procedure zeichne ich in einer TAdvListView ein bestimmtes Icon in die 8.Spalte. Das funktioniert auch soweit.
Delphi-Quellcode:
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.
////////////////////////////////////////////////////////////////////////////////
/// /// [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; 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:
Kann es sein, dass sich hier etwas nicht verträgt ? Wenn ja, was ?
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; |
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
ich verwende kein ADV... und das Bild scheint zu fehlen, im Code fällt folgendes auf
Zitat:
Delphi-Quellcode:
Sender.Canvas.Brush.Style := bsDiagCross;
|
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Zitat:
|
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
dann verstehe ich Dich nicht ...
eine durchgängige Farbe würde ich bei bsSolid erwarten |
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Zitat:
|
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Zitat:
Änder das mal - wie Bummi schon versucht hat dir mitzuteilen - auf bsSolid ab. Und dann sagst du dem System auch noch, dass in der Spalte mit dem Icon kein DefaultDraw gemacht werden soll. Ok, aber wann und wo zeichnet das System wohl diesen CursorBalken? Im DefaultDraw? :wink: |
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sir Rufo,
dann hatte ich Bummi mit dem bsSolid falsch verstanden. Habe den Style jetzt mal mit bsSolid probiert und den Wert DefaultDraw auf True gesetzt. Dann bekomme ich das Ergebnis aus dem Anhang. Ich bekomme jetzt nur das Icon angezeigt, wenn der Eintrag in der Listview auch markiert ist. Selbst dann wird der blaue Markierungbalken nicht durchgängig gezeichnet. Das zweite Problem was auftritt ist, dass beim runterscrollen des blauen Balkens die Einträge in den anderen Spalten mit einem schwarzen Kasten dargestellt werden (s. Anhang). |
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Das waren ja auch nur die direkten Antworten auf die Fragen warum das so ist :wink:
Du musst halt auch auswerten ob die aktuelle Zeile/Zelle ausgewählt ist und darauf in deinem OnPaint reagieren. Ein Beispiel findest du hier ![]() |
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Zitat:
Zitat:
|
AW: Icon auf Canvas im SubItem zeichnen mit Hintergrundfarbe
Weil das AdvGrid ähnlich tickt wie das normale Grid. Auch dort gibt es eine DefaultPaint Methode.
Und wenn du eine Zeile gemalt haben möchtest, so wie die default gezeichnt wird, dann musst du dieses eben komplett selber implementieren oder eben geschickt übrgeben. Das Beispiel von mir zeigt dir, wie das beim normalen Grid geht. Beim AdvGrid kann ich nicht direkt weiterhelfen, da ich mich von den TMS vor einiger Zeit verabschiedet habe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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