![]() |
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:
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:
node := items.AddChildObject ( node, FolderName, FQ_PIDL );
Delphi-Quellcode:
Warum springt der da raus, hat jemand ne Idee?
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz