AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TVirtualImageList und ImageList_DrawEx

Ein Thema von anse · begonnen am 30. Mai 2020 · letzter Beitrag vom 16. Nov 2020
Antwort Antwort
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
188 Beiträge
 
Delphi 11 Alexandria
 
#1

TVirtualImageList und ImageList_DrawEx

  Alt 30. Mai 2020, 15:21
Hallo,

die noch relativ neue TVirtualImageList habe ich als Ersatz für die gute alte TImageList verwendet. Seitdem zeichnet eine VirtualTree Instanz aber keine Icons mehr mit dem "Ghosted" Style, den ich im VirtualTree.OnGetImageIndex event auf True setze. Mit der alten TImageList sah das wie im ersten Screen aus. Im zweiten Screen sieht man dass Ghosted gar keinen Unterschied mehr macht.

VirtualTree malt in beiden Fällen das Icon über Vcl.ImgList.TCustomImageList.DoDraw, welche (wenn ich das richtig verstehe) wiederum die Winapi.CommCtrl.ImageList_DrawEx aufruft. Der Style Parameter enthält bei einem Ghosted Icon die Konstante Winapi.CommCtrl.ILD_BLEND50:

Delphi-Quellcode:
procedure TCustomImageList.DoDraw(Index: Integer; Canvas: TCanvas; X, Y: Integer;
  Style: Cardinal; Enabled: Boolean);
...
begin
  if HandleAllocated then
  begin
    if Enabled then
      ImageList_DrawEx(Handle, Index, Canvas.Handle, X, Y, 0, 0,
        GetRGBColor(BkColor), GetRGBColor(BlendColor), Style)
    else
    begin
      if FGrayscaleFactor <> 0 then
...
Jetzt weiß ich nicht ob das ein Bug in der TVirtualImageList ist, in VirtualTree, oder in der TCustomImageList...

Delphi Version ist die 10.3 - vielleicht gibt es da auch in der v10.4 schon einen Unterschied/Bugfix in der DoDraw-Methode?
Miniaturansicht angehängter Grafiken
1-timagelist.png   2-tvirtualimagelist.png  
Ansgar Becker
https://www.heidisql.com
Wenn du loslässt, hast du zwei Hände frei.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#2

AW: TVirtualImageList und ImageList_DrawEx

  Alt 30. Mai 2020, 15:37
DoDraw ist virtuell und wird von TVirtualImageList überschrieben.

In Delphi 10.3 steht da folgendes:
Delphi-Quellcode:
  if Enabled then
    ImageList_Draw(Handle, Index, Canvas.Handle, X, Y, ILD_NORMAL)
  else
Damit wird der Parameter Style völlig ignoriert.

In Delphi 10.4 ist das allerdings behoben worden:
Delphi-Quellcode:
  if Enabled then
    ImageList_Draw(Handle, Index, Canvas.Handle, X, Y, Style)
  else
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
188 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TVirtualImageList und ImageList_DrawEx

  Alt 30. Mai 2020, 18:49
Oh, mega. Danke für die schnelle Info. Dann werd ich mal updaten.
Ansgar Becker
https://www.heidisql.com
Wenn du loslässt, hast du zwei Hände frei.
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
188 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TVirtualImageList und ImageList_DrawEx

  Alt 6. Jun 2020, 13:05
So, mit Delphi 10.4 und ImageList_Draw sieht der "Blended" Style tatsächlich anders aus, aber noch nicht wieder so wie es sein sollte. Siehe Anhang.

Eigentlich müsste nämlich statt ImageList_Draw die ImageList_DrawEx verwendet werden, damit auch die ImageList.BkColor und ImageList.BlendColor berücksichtigt werden.

Für mein Projekt kann ich das auch innerhalb der Kopie von VirtualTree machen, aber ich reiche bei quality.embarcadero.com mal dafür einen Bugreport ein.
Miniaturansicht angehängter Grafiken
3-tvirtualimagelist-10.4.png   4-tvirtualimagelist-10.4-dodraw.png   5-tvirtualimagelist-10.4-fixed.png  
Ansgar Becker
https://www.heidisql.com
Wenn du loslässt, hast du zwei Hände frei.
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
188 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TVirtualImageList und ImageList_DrawEx

  Alt 16. Nov 2020, 16:02
Der Vollständigkeit halber hier der Link zum Ticket: https://quality.embarcadero.com/browse/RSP-29438
(Hatte gehofft das wäre schon gelöst, was aber in 10.4.1 noch nicht der Fall ist)
Ansgar Becker
https://www.heidisql.com
Wenn du loslässt, hast du zwei Hände frei.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz