![]() |
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:
Jetzt weiß ich nicht ob das ein Bug in der TVirtualImageList ist, in VirtualTree, oder in der TCustomImageList...
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 ... Delphi Version ist die 10.3 - vielleicht gibt es da auch in der v10.4 schon einen Unterschied/Bugfix in der DoDraw-Methode? |
AW: TVirtualImageList und ImageList_DrawEx
DoDraw ist virtuell und wird von TVirtualImageList überschrieben.
In Delphi 10.3 steht da folgendes:
Delphi-Quellcode:
Damit wird der Parameter Style völlig ignoriert.
if Enabled then
ImageList_Draw(Handle, Index, Canvas.Handle, X, Y, ILD_NORMAL) else In Delphi 10.4 ist das allerdings behoben worden:
Delphi-Quellcode:
if Enabled then
ImageList_Draw(Handle, Index, Canvas.Handle, X, Y, Style) else |
AW: TVirtualImageList und ImageList_DrawEx
Oh, mega. Danke für die schnelle Info. Dann werd ich mal updaten.
|
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. |
AW: TVirtualImageList und ImageList_DrawEx
Der Vollständigkeit halber hier der Link zum Ticket:
![]() (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 15:36 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