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 TMyTreeView unter D2010 (https://www.delphipraxis.net/150102-tmytreeview-unter-d2010.html)

Angel4585 7. Apr 2010 11:42


TMyTreeView unter D2010
 
Hallo,

ich verwende in einem Projekt eine Komponente meines Vorgängers, diese Komponente wird durchs ganze Projekt duch verwendet und andere Komponenten bauen auch darauf auf, weshalb ich die nicht einfach so ersetzen kann.
Die Komponente selbst ist eine Ableitung von TCustomTreeView und soll die Verzeichnisstruktur des PCs abbilden. Seit dem Umstieg von Windows Vista auf Windows 7 und gleichzeitig Delphi 2005 auf Delphi 2010 macht diese Komponente aber Probleme.
Delphi-Quellcode:
node := items.AddChildObject ( node, FolderName, FQ_PIDL );
An dieser Stelle kommt ne Exception, als Fehlermeldung bekomm ich:"Eintrag kann nicht eingefügt werden", also nicht seeehr aussagekräftig. Hier mal der komplette Code der Funktion:

Delphi-Quellcode:
procedure TMyTreeView.EnumerateFolder ( ShellFolder: IShellFolder; mask : DWORD;node : tTreeNode );
var
  flags : DWORD;
  EnumList : IEnumIdList;
  FQ_PIDL, PidlPath, list : PItemIdList;
  fetched : ULONG;
  FolderName: string;
  attr : ULONG;
  HexAttr : string;
  ImageIndex : integer;

begin
  items.BeginUpdate;
  PidlPath := node.data;
  fSortFolder := true;
  flags := SHCONTF_FOLDERS or SHCONTF_INCLUDEHIDDEN;
  try
  if (( ShellFolder.EnumObjects ( handle, flags, EnumList )) = NOERROR) and Assigned(EnumList) then
   begin
    while (EnumList.Next ( 1, list, fetched ) = NOERROR) do
     begin
//      ImageIndex := -1;
      FolderName := GetDirectory ( ShellFolder, list, SHGDN_INFOLDER); //SHGDN_NORMAL );
      attr := ALL_ATRIBUTES;
      ShellFolder.GetAttributesOf ( 1, list, attr );
      HexAttr := IntToHex (attr, 4);

      if ( attr and mask > 0 ) then
       try
        FQ_PIDL := CombinePidls ( PidlPath, list );
        fFullPidlPathList.add ( FQ_PIDL );
        ImageIndex := GetNormalIcon ( FQ_PIDL );

        node := items.AddChildObject ( node, FolderName, FQ_PIDL );
        if ( attr and SFGAO_HASSUBFOLDER > 0 ) then
         Node.HasChildren := true;
        Node.ImageIndex := ImageIndex;
        Node.SelectedIndex := GetSelectedIcon ( FQ_PIDL );
        if FCheck then SwitchStateIndex(node,attr);

        // image with hand-icon
        if ( SFGAO_SHARE and attr ) > 0 then
         Node.OverlayIndex := 0;

        node := node.parent;
       except
         on e : exception do
         ShowMessage(e.Message);
       end;
      ShellMalloc.free ( list );
     end; // end while do ..

   end;
 except
//  showmessage('ENUM FEHLER');
  //beep;
  end;
items.EndUpdate;
end;
Warum springt der da raus, hat jemand ne Idee?


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