Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#30

AW: VirtualStringTree - SHGetFileInfo hängt Programm auf / Canvas erlaubt kein Zeichn

  Alt 10. Dez 2020, 21:02
Der Code da ist unwichtig, ist ein Fehler beim Kopieren passiert.
Es funktioniert ja ohnehin nicht, egal was ich mache und ob da jetzt eine Zuweisung fehlt.

Ich habe dieses Minimalbeispiel nur gebaut um grob zu zeigen wie alles aufgebaut ist. Und in der Hoffnung, dass ihr mir helfen könnt, SHGetFileInfo() dort richtig einzubauen.

So bekomme ich was angezeigt aber es ruckelt, zuckelt und führt sicher wieder zu Fehlern.
Was ich gerade bestätigen konnte: ein Doppelklick auf den Trenner nach Spalte 1 führt zum Einfrieren und OutOfResources; aus Vcl.Graphics wird aufgerufen.
Delphi-Quellcode:
procedure TForm1.VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex);
var
 Info: TSHFileInfo;
begin
 if (not(Column in [0, 1])) or (not Assigned(TreeDataKlassen)) then
  Exit;

 if Kind in [ikNormal, ikSelected] then
  begin
   if TreeDataKlassen[Node^.Index].IconIndexSpalte1 = -1 then
    begin
      SHGetFileInfo(PChar(TreeDataKlassen[Node^.Index].PfadSpalte1), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_SMALLICON) ;
      TreeDataKlassen[Node^.Index].IconIndexSpalte1 := Info.iIcon;
    end;

   ImageIndex := TreeDataKlassen[Node^.Index].IconIndexSpalte1;
  end;
end;
Zitat:
Übrigens:
procedure AddAllFilesInDir(const Dir: string; var List: TStringList); List sollte const sein, nicht var , denn es soll ja nicht der Zeiger zur Liste geändert werden (können) sondern nur deren Inhalt.
Die Funktion verwende ich im Originalprojekt nicht. Die hab ich nur auf die Schnelle reingekloppt.

Geändert von DieDolly (10. Dez 2020 um 21:05 Uhr)
  Mit Zitat antworten Zitat