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/)
-   -   Delphi TVirtualTreeView, falsches Image angezeigt (https://www.delphipraxis.net/130787-tvirtualtreeview-falsches-image-angezeigt.html)

hoika 13. Mär 2009 06:45


TVirtualTreeView, falsches Image angezeigt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo #,

ich drehe hier gerade frei ... ;(

Ein ganze normaler TVST mit einer ImageList (5 Images drin).
Das letzte (ImageIndex=4) ist blau, es wird aber immer grün angezeigt ...
In einem normalen TListView klappt das.

Ich habe ein Bsp-Projekt mal angehängt (ohne Exe).

Was ist hier los ?

Benutzt wird Version 4.7.0 und Delphi 6.


Danke


Heiko

hoika 13. Mär 2009 07:11

Re: TVirtualTreeView, falsches Image angezeigt
 
Hallo,

irgendwas ist faul beim DrawImage.
Not-Lösung.

procedure TBaseVirtualTree.PaintImage

alt
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)

neu
Delphi-Quellcode:
      if (ImageInfo[iiOverlay].Index > -1) and (ImageInfo[iiOverlay].Index < 15) then
        ExtraStyle := ILD_TRANSPARENT or ILD_OVERLAYMASK and IndexToOverlayMask(ImageInfo[iiOverlay].Index )
ohne das +1 geht es.

In der 4.8.1. ist der Code übrigens immer noch so.
Liegt das vielleicht an meinen Images ?


Heiko

Tegi 13. Mär 2009 08:21

Re: TVirtualTreeView, falsches Image angezeigt
 
Hallo Heiko,

Das + 1 ist in diesem Falle definitiv erforderlich.
Was hier genutzt wird ist die Möglichkeit der Windows API ein Bild einer Imagelist mit Overlay zu malen (letztlich über ImageList_DrawEx).
Der zu übergebende Index des Overlays ist hierbei 1 basiert, nicht 0 basiert, wie sonst üblich. Der Grund hierbei ist auch ziemlich simpel:
0 um 8 bit nach links geschoben ergibt immer noch 0. Daher will die API hier also tatsächlich den Index + 1.

Aber willst du wirklich ein Overlay?

hoika 13. Mär 2009 08:26

Re: TVirtualTreeView, falsches Image angezeigt
 
Hallo,

ich will, dass er mein blaues Bildchen anzeigt ! ;)
Wo stelle ich dass denn ab mit dem Overlay ?.

Schau dir doch mal mein Projekt an,
das ist auf das wesentliche reduziert.

Das mit dem shr 8 (oder shl 8) habe ich auch schon gesehen, aber nicht verstandne ;)

Tatsache ist, dass es ohne das +1 geht.


Heiko

generic 13. Mär 2009 09:07

Re: TVirtualTreeView, falsches Image angezeigt
 
In dem VST Ereignis onGetImage wird der Typ des zu zeichnen Bildes übergeben.
Wahrscheinlich prüfst du nicht da drauf ab und daher siehst du immer nur die Bild 1-4.

Du solltest du Icon nur malen bei "ikNormal".

Habe gerade kein Delphi zur Hand, ggf. heißen die Sachen etwas anders.

hoika 13. Mär 2009 09:24

Re: TVirtualTreeView, falsches Image angezeigt
 
Hallo,

danke, das wars.

Fürs Protokol ... ;)
Delphi-Quellcode:
procedure TForm1.LV_WorkSteps2GetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
begin
  if (Column=0) and
     (Kind=ikNormal) then
  begin
    ImageIndex:= 4;
  end;
end;
Heiko


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