AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi VirtualStringTree zeigt keine Icons aus System ImageList an
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree zeigt keine Icons aus System ImageList an

Ein Thema von Zacherl · begonnen am 9. Jun 2010 · letzter Beitrag vom 10. Jun 2010
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

VirtualStringTree zeigt keine Icons aus System ImageList an

  Alt 9. Jun 2010, 20:04
Hey,

ich versuche grade verzweifelt Icons aus der System ImageList in meinem VirtualTreeView anzuzeigen. Doch leider bleiben die Symbole hartnäckig leer. Aus meinem Testprojekt:

Delphi-Quellcode:
procedure InitialisiereIcons;
  var SysIL : HImageList;
      Info : TSHFileInfo;
      SmallImages : TImageList;
begin
  SmallImages := TImageList.Create(Form1);
  SysIL := SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo),
           SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  if SysIL <> 0 then
    begin
    SmallImages.Handle := SysIL;
    SmallImages.ShareImages := TRUE;
    virtualstringtree1.Images := SmallImages;
    end;
end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  Newitem : pvirtualnode;
  nodedata: pnodedata;
    Info : TSHFileInfo;
  I: Integer;
begin
  NewItem := virtualstringtree1.AddChild(nil);
  nodedata := virtualstringtree1.GetNodeData(newitem);
  nodedata^.Caption := 'test.pdf';
  SHGetFileInfo(PChar(nodedata^.Caption)
               ,FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TShFileInfo),
                SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
  nodedata^.ImageIndex := Info.IIcon;
end;
Delphi-Quellcode:
procedure TForm1.VirtualStringTree1GetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  NodeData: PNodeData;
begin
  NodeData := VirtualStringTree1.GetNodeData(Node);
  if assigned(nodedata) then
  begin
    imageindex := nodedata^.imageindex;
  end;
end;

procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);
var
  NodeData: PNodeData;
begin
  NodeData := VirtualStringTree1.GetNodeData(Node);
  if assigned(nodedata) then
  begin
    celltext := nodedata^.Caption;
  end;
end;
Selber Code in einem TListView funktioniert wunderbar

Viele Grüße
Zacherl

Geändert von Zacherl (10. Jun 2010 um 00:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: VirtualStringTree zeigt keine Icons aus System ImageList an

  Alt 10. Jun 2010, 00:37
Edit: Es klappt auch bei anderen Komponenten, nur nicht beim VST wie es scheint.
Mist jetzt hab ich auch noch ausversehen auf "neuer Beitrag" geklickt -.-
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: VirtualStringTree zeigt keine Icons aus System ImageList an

  Alt 10. Jun 2010, 00:41
Gibt es bei Icons vielleicht ein spezielles Format? Unter Windows 7 gibts ja irgendwie so "neue" Icons, weiß hier aber leider nicht genau bescheid.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: VirtualStringTree zeigt keine Icons aus System ImageList an

  Alt 10. Jun 2010, 01:39
Habs grade selbst gelöst Im GetImageIndex Event gibt es eine Eigenschaft "Kind: TVTImageKind" die kann teilweise den Wert ikOverlay haben. Ist dies der Fall, wird einfach ein weiteres Icon, über das Standardicon drübergemalt.
Meine Routine hat zwar das Icon gesetzt, aber dieses wurde vom Overlay einfach komplett übermalt Jetzt prüfe ich am Anfang auf "Kind <> ikOverlay", was nun zum gewünschten Ergebnis führt
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

AW: VirtualStringTree zeigt keine Icons aus System ImageList an

  Alt 10. Jun 2010, 01:41
Interessant wäre dann noch zu wissen, was für ein Icon dann als Overlay gezeichnet werden sollte? Du selbst hast ja scheinbar keines angegeben und als Overlay verstehe ich es so, dass das "Grundicon" bestehen bleibt und zusätzlich noch eines darüber gezeichnet wird. Daher wird ein Clear der Zeichenfläche wohl nicht implementiert sein.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: VirtualStringTree zeigt keine Icons aus System ImageList an

  Alt 10. Jun 2010, 01:47
Also der VST ruft die GetImageIndex Funktion jeweils 2x für jede Node auf. Das erste mal mit ikNormal und das zweite Mal mit ikOverlay. So funktioniert es nun:
Delphi-Quellcode:
procedure TfrmFileManager.vtFileListGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  NodeData: PFileNodeData;
begin
  if (Kind = ikOverlay) or (Column <> 0) then Exit;
  NodeData := vtFileList.GetNodeData(Node);
  if Assigned(NodeData) then
  begin
    ImageIndex := NodeData^.ImageIndex;
  end;
end;
Vorher hatte ich nur die erste Zeile weggelassen. Das Komische ist, dass auch im Overlay Call der ImageIndex korrekt gesetzt wird. Das normale Icon wird dann allerdings komplett mit clWindow übermalt. Mir als Benutzer des VST erscheint dieses Verhalten auch eher ungewollt. Zumindest erkenne ich keine Logik dahinter.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#7

AW: VirtualStringTree zeigt keine Icons aus System ImageList an

  Alt 10. Jun 2010, 20:57
Wenn du eine Demoanwendung bauen würdest, könnten wir mitknobeln
Vielleicht ist es ja ein Bug, dann kannst du es im Forum von VST melden (ist glaub googledocs?)
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: VirtualStringTree zeigt keine Icons aus System ImageList an

  Alt 10. Jun 2010, 21:47
Wenn du eine Demoanwendung bauen würdest, könnten wir mitknobeln
Kommt gleich Vielleicht ist aber auch einfach nur was falsch eingestellt gewesen bei mir. Hatte schonmal probiert gezielt mit dem Overlay rumzuspielen, aber auch da kamen nur unbrauchbare Ergebnisse raus.
  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 19:23 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