Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TVirtualImageList und ImageList_DrawEx (https://www.delphipraxis.net/204468-tvirtualimagelist-und-imagelist_drawex.html)

anse 30. Mai 2020 14:21

TVirtualImageList und ImageList_DrawEx
 
Liste der Anhänge anzeigen (Anzahl: 2)
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?

Uwe Raabe 30. Mai 2020 14:37

AW: TVirtualImageList und ImageList_DrawEx
 
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

anse 30. Mai 2020 17:49

AW: TVirtualImageList und ImageList_DrawEx
 
Oh, mega. Danke für die schnelle Info. Dann werd ich mal updaten.

anse 6. Jun 2020 12:05

AW: TVirtualImageList und ImageList_DrawEx
 
Liste der Anhänge anzeigen (Anzahl: 3)
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.

anse 16. Nov 2020 15:02

AW: TVirtualImageList und ImageList_DrawEx
 
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)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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