Einzelnen Beitrag anzeigen

Benutzerbild von anse
anse

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

TVirtualImageList und ImageList_DrawEx

  Alt 30. Mai 2020, 14: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