AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TVirtualTreeView, falsches Image angezeigt

Ein Thema von hoika · begonnen am 13. Mär 2009 · letzter Beitrag vom 13. Mär 2009
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

TVirtualTreeView, falsches Image angezeigt

  Alt 13. Mär 2009, 07:45
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
Angehängte Dateien
Dateityp: zip project1_455.zip (8,9 KB, 2x aufgerufen)
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TVirtualTreeView, falsches Image angezeigt

  Alt 13. Mär 2009, 08:11
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
Heiko
  Mit Zitat antworten Zitat
Tegi

Registriert seit: 4. Aug 2008
Ort: Duisburg
11 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TVirtualTreeView, falsches Image angezeigt

  Alt 13. Mär 2009, 09:21
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?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TVirtualTreeView, falsches Image angezeigt

  Alt 13. Mär 2009, 09:26
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
Heiko
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#5

Re: TVirtualTreeView, falsches Image angezeigt

  Alt 13. Mär 2009, 10:07
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: TVirtualTreeView, falsches Image angezeigt

  Alt 13. Mär 2009, 10:24
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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