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 VST zeichnet image falsch? (https://www.delphipraxis.net/110187-vst-zeichnet-image-falsch.html)

richard_boderich 14. Mär 2008 11:24


VST zeichnet image falsch?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen!

Ich habe ein problem mit den Itemgrafiken vom VST. Column 0 wird richtig gezeichnet. In Column 2 zeichnet er 2 Image übereinander und ich weis nicht warum!
zur Verdeutlichung habe ich mal ein Screenshot angehängt. Er zeichnet ein gelbes Exclamation Icon, wie er es auch sollte, darüber jedoch noch ein grünes Status Icon. Meine Paintroutine sieht so aus.

Delphi-Quellcode:

procedure TForm1.vstGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
daten:TOMeineDaten;
begin
  daten:=TOMeineDaten(vst.GetNodeData(node)^);
  case column of
  0:begin                                                        //rausnehmen hat nichts gebracht
      if daten.Dateiname='Verzeichnis' then imageindex:=2;
      if ((daten.ADSName=':Zone.Identifier') and (daten.ADSSize='26 Byte ')) or ((daten.Dateiname='Thumbs.db') and (daten.ADSName=':encryptable') and(daten.ADSSize='0 Byte ')) then ImageIndex:=0 else if ImageIndex<>2 then ImageIndex:=1;
    end;

  2: if daten.Executable then imageindex:=4; <-- Problem! es werden 2 Image gezeichnet, obwohl der Index eindeutig ist.

  end;
end;

hoika 14. Mär 2008 11:36

Re: VST zeichnet image falsch?
 
Hallo,

ich würde am Anfang der Methode mal

Delphi-Quellcode:
ImageIndex:= -1
machen.


Heiko

richard_boderich 14. Mär 2008 11:39

Re: VST zeichnet image falsch?
 
@Hoika

Passiert genau das selbe. Also keine Verbesserung. :(

mfG Richard

hoika 14. Mär 2008 11:51

Re: VST zeichnet image falsch?
 
Hallo,

schrewib mal nur ganz am Anfang

Delphi-Quellcode:
imageindex:= 4;
Exit;
Wenn das Bild jetzt immer noch so kommt,
ist deine ImageListe zerschossen.


Heiko

richard_boderich 14. Mär 2008 11:59

Re: VST zeichnet image falsch?
 
Liste der Anhänge anzeigen (Anzahl: 1)
@hoika

Also ich habe jetzt Mal die selbe Imagelist an vst.images und an vst.stateimages gebunden und dazu den Code eingebunden.

Delphi-Quellcode:
imageindex:= 4;
Exit;
Imagelist ist in Ordnung. Bild ist im Anhang. Nach weiteren Test komme ich zu dem Ergebnis:

Images werden falsch gezeichnet!

Stateimages werden richtig gezeichnet!

Finde ich sehr seltsam das ganze. Kann mir einer beantworten warum sich der Vst so verhält?

mfG Richard

Nuclear-Ping 14. Mär 2008 13:20

Re: VST zeichnet image falsch?
 
Lösung:
Delphi-Quellcode:
procedure TForm1.vstGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
daten:TOMeineDaten;
begin
  if (ikOverlay in [Kind]) then // << !!!!
    Exit;

  daten:=TOMeineDaten(vst.GetNodeData(node)^);
  case column of
  0:begin                                                        //rausnehmen hat nichts gebracht
      if daten.Dateiname='Verzeichnis' then imageindex:=2;
      if ((daten.ADSName=':Zone.Identifier') and (daten.ADSSize='26 Byte ')) or ((daten.Dateiname='Thumbs.db') and (daten.ADSName=':encryptable') and(daten.ADSSize='0 Byte ')) then ImageIndex:=0 else if ImageIndex<>2 then ImageIndex:=1;
    end;

  2: if daten.Executable then imageindex:=4; <-- Problem! es werden 2 Image gezeichnet, obwohl der Index eindeutig ist.

  end;
end;

richard_boderich 14. Mär 2008 13:34

Re: VST zeichnet image falsch?
 
@Nuclear Ping

Deine Lösung funktioniert! :)

Kannst du uns auch etwas zu den Gründen sagen? Ist das ein Bug von Vst? Ich habe jetzt erstmal die normalen Image einfach
weggelassen und nur Stateimages verwendet. Habe ich irgendwelche Funktionseinschränkungen bei der Darstellung im Vst, wenn
ich deinen Code verwende?

mfG Richard

Nuclear-Ping 14. Mär 2008 13:43

Re: VST zeichnet image falsch?
 
Warum er sich verhält, kann ich dir nicht sagen. Hab mir den Code im Source des VST dazu noch nicht angeschaut. Ich denke aber mal, dass man diesen Effekt wohl manchmal auch beabsichtigt will - für was auch immer - und er sich daher so verhält. Der VST bietet da ja viele Möglichkeiten.

generic 14. Mär 2008 15:10

Re: VST zeichnet image falsch?
 
Der VST mal mehrere Dinge auf einen Platz.
Als erstes das Icon, dann das Overlay.

Also immer Kind und Column abfragen, damit rausgefunden wird, was wo gemalt wird!


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