AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein VirtualTreeView, no image list was supplied
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualTreeView, no image list was supplied

Ein Thema von norwegen60 · begonnen am 7. Mai 2017 · letzter Beitrag vom 8. Mai 2017
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

VirtualTreeView, no image list was supplied

  Alt 7. Mai 2017, 22:35
Hallo,

ich habe auf Delphi XE 10.2 und VirtualTreeView 6.6 upgedatet. Jetzt bekomme ich bei einem Projekt folgende Fehlermeldung
Zitat:
An Image Index was supplied for TTVImagekind.ikNormal but no image list was supplied
Der Fehler tritt nur auf wenn ich mit der Maus über einen Eintrag mit einem Image fahre. Die Images werden wie folgt zugewiesen:
Delphi-Quellcode:
procedure Tfo1ProjNr.vrdbtProjNrGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: TImageIndex);
var
  Data: PTreeData;
begin
  Data := Sender.GetNodeData(Node);

  { Rote LED vor Projekte, bei denen Meilensteinen überschritten sind }
  if Column=1 then
  begin
    if (Data^[4].asString = 'O') then
    begin
      if (Data^[6].asString='1') then // sehr wichtig
        ImageIndex:=5 //ROT mit !
      else
        ImageIndex:=4; //ROT
    end
    else if (Data^[4].asString = 'Y') then
    begin
      if (Data^[6].asString='1') then
        ImageIndex:=3 //GELB mit !
      else
        ImageIndex:=2; //GELB
    end
    else if (Data^[3].asString = 'A') then
    begin
      if (Data^[6].asString='1') then
        ImageIndex:=1 //GRÜN mit !
      else
        ImageIndex:=0; //GRÜN
    end
    else if (Data^[3].asString = 'T') then
    begin
      if (Data^[6].asString='1') then
        ImageIndex:=7 //blau mit !
      else
        ImageIndex:=6; //blau
    end;
  end;
end;
Danke für eure Unterstützung
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: VirtualTreeView, no image list was supplied

  Alt 7. Mai 2017, 23:57
Du musst der Komponente auch eine ImageList zuweisen aus der du die Images laden möchtest. Entweder per OI oder per Code vrdbtProjNr.ImageList := ImageList1; . Natürlich angepasst an deinen ImageList Komponenten Namen.

Zusätzlich solltest du auch noch den ImageKind abfragen. Du kannst je nach Status der Node einen anderen ImageIndex übergeben. Also in etwa so:

Delphi-Quellcode:
procedure Tfo1ProjNr.vrdbtProjNrGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: TImageIndex);
var
  Data: PTreeData;
begin
  Data := Sender.GetNodeData(Node);
  if (Kind <> ikSelected) then begin // Das solltest du noch einfügen, da du ansonsten die Meldung nochmal bekommst. Nur mit der Meldung "An Image Index was supplied for TTVImagekind.ikSelected but no image list was supplied"
    // Hier dann deine Images zuweisen
  end;
end;
Alternativ zu der Abfrage kannst du der Property SelectedImages auch die gleiche ImageList nochmal zuweisen.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: VirtualTreeView, no image list was supplied

  Alt 8. Mai 2017, 08:43
Ich habe die TreeView seit Jahren nicht mehr angefasst. Bisher war die ImageList nur dem Property StateImages zugewiesen und von Delphi 7 bis XE10 hatte es so auch funktioniert.

Das Property ImageList gibt es nicht. Ich habe vrdbtProjNr.Images = ImageList gesetzt, dann funktioniert es. Allerdings zeigt es dann bei allen nicht selektierten Einträgen zwei LED an.

Ich habe testweise die Zuweisung nur bei Images gemacht und bei StateImages gelöscht. Dann kommt die Fehlermeldung wieder.
Nach etwas rum probieren, die Hilfe ist zu StateImages recht dürftig, bin ich auf folgendes Setting gekommen das wieder einwandfrei läuft:

Delphi-Quellcode:
Images nicht zuweisen
StateImages = ImageList1;

procedure Tfo1ProjNr.vrdbtProjNrGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: TImageIndex);
var
  Data: PTreeData;
begin
  Data := Sender.GetNodeData(Node);
  if (Kind = ikState) then begin // Verhindert die Meldung "An Image Index was supplied for TTVImagekind.ikSelected but no image list was supplied"
    // Ad hier Images zuweisen
  end;
end;

Geändert von norwegen60 ( 8. Mai 2017 um 09:28 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: VirtualTreeView, no image list was supplied

  Alt 8. Mai 2017, 15:53
Hallo.

Sorry. Ja die Property heißt nur Images und nicht ImageList .

In deinem SourceCode solltest du daher auch nicht wie oben von mir beschrieben nur auf ungleich ikSelected sondern auf if (Kind in [ikNormal, ikSelected]) then prüfen. Das verhindert, dass er die Exception wirft. Wenn du auch je nach State (also Node selektiert oder nicht) auch ein Image hinterlegen willst, dann muss du das Set entsprechend um ikState erweitern und dem Tree auch eine StateImages ImageList zuweisen. Das kann natürlich die gleiche sein wie die, die du der Images Property zugewiesen hast.

Der letzte Kind ist ikOverlay der entsprechend über eine bereits gezeichnetes Image drüber gemalt wird. Habe ich bisher aber auch noch nicht verwendet.
  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 14:54 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