Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: VirtualTreeView, OnGetImageIndexEx und OverlayImages

  Alt 20. Mär 2018, 18:42
Wenn es so abläuft, wie in anderen Controls mit den Overlays, dann müssen die Overlays zwingend in derselben ImageList liegen, wie die anderen Icons.
Das gerade nicht, weshalb mir die Implementierung mit OnGetImageIndexEx sehr gut gefällt. Man ist nicht gezwungen, wild zusammengewürfelte Endlos-Imagelisten zu bauen.

Kannst du mal versuchen, die Overlay-Imagelist so aufzubauen, daß die Overlay-Indices in dieser Liste alle >= 15 sind? In dem Fall kann das API-Handling für Overlays nicht mehr verwendet werden.
Ich war praktisch zeitgleich mit deinem Post auch an genau der Sache dran. Der entsprechende Hinweis findet sich als Kommentar in der Virtualtrees.pas:
Delphi-Quellcode:
      // If the user returned an index >= 15 then we cannot use the built-in overlay image drawing.
      // Instead we do it manually.
Genau das war - rein zufällig - bei mir der Fall. So lange ich es mit OnGetImageIndex implementiert hatte, lagen alle Images gemeinsam in einer Imagelist und die Overlay-Images lagen alle oberhalb von Index 15. Wenn ich nun hier einen Overlay-Index kleiner 15 angebe, dann funktioniert das Overlaying auch in OnGetImageIndex nicht mehr.

Sollte das funktionieren, wäre das dann ein Bug im VTV. Ist es aber wohl in jedem Fall, aber dann wüsste ich wie er zu beheben ist.
Ob es ein Bug ist sei mal dahin gestellt. Das scheint durchaus Absicht zu sein:
Delphi-Quellcode:
      if (ImageInfo[iiOverlay].Index > -1) and (ImageInfo[iiOverlay].Index < 15) then
        ExtraStyle := ILD_TRANSPARENT or ILD_OVERLAYMASK and IndexToOverlayMask(ImageInfo[iiOverlay].Index + 1)
      else
        ExtraStyle := ILD_TRANSPARENT;
Allerdings durchschaue ich noch nicht so ganz, was die zusätzlichen Extrastyles bewirken sollen wenn der ImageIndex < 15 ist. Würde man auf diese Extrawürste verzichten, müsste es nach meiner Logik eigentlich immer funktionieren.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (20. Mär 2018 um 18:47 Uhr)
  Mit Zitat antworten Zitat