📄 scp.txt
字号:
Working Notes:
* I really need to rip all the namespace stuff out and put it in it's own
class so that you could use it however you wanted, not just in this comp.
* The included test project creates a TSystemTreeView object on the fly so
that you don't have to install the component in your library. I'm
fairly confident that the component is stable, but if you don't want to
install, you don't have to just to see the demo.
* If anyone knows how to determine the type of object you have given it's
PIDL, I'd love to know it. Right now, if it's not a file system object,
you just get it's name. I need to determine other types like the
printer folder, control panel folder, network servers, network
workgroups, etc.
New information: I've noticed that a commercial Explorer replacement that
I have (PowerDesk from Mijenix) has this exact behavior, i.e. if you select
the Printers folder, Recycle Bin, etc. you get just a single "Name" column.
Hey, if a bunch of paid programmers can't figure it out, I probably won't
either, so I'm inclined to call this "as-designed" behavior. Comments?
Items On The To-Do List:
* A few more bugs still in my email.
* CMF_CANRENAME flag for context menu. Can't just add it as it will cause
OLE errors, i.e. system won't handle it. I need to determine if I can
use "magic numbers" to interpret rename and other unhandled commands to
to catch them and process them myself.
* Use timeGetTime to decide if I should show the hourglass or not in
EnumerateFolders methods.
* Change GetItemAttrs so it uses a nice Delphi set instead of API values.
* Do away with ShowFolders/Files and ShowHiddenFolders/Files properties
and replace with a set that includes all the stanadard stuff: hidden,
system, read-only, etc. AttrMask property.
* Add properties for the stuff in the registry key HKCU\Software\Microsoft\
Windows\CurrentVersion\Explorer\Advanced and use those values as default
values for the properties. This has stuff like hide extensions, etc.
* I may or may not implement drag/drop with the shell. In the meantime,
Dieter Steinwedel (dsteinwe@rz.uni-osnabrueck.de) has a fine d-n-d shell
component that works with any TWinControl descendant. It can be found at
http://godard.oec.uni-osnabrueck.de/student_home/dsteinwe/delphi/DietersDelphiSite.htm
There are probably others as well, I haven't looked much.
* "Cut" context menu command does not show the file icon as disabled yet.
* Hidden files have same problem as cut files (item above).
Known Issues:
* C++Builder 3 users: You must install only the registration unit
(SystemControlPackReg.pas) into the package you compile the component into.
If the package also includes the other source files, you will get error
messages about DCLSTD35.LIB, which doesn't exist. It has to do with the
fact that the source lists ImgList in the uses clause, even though I have
properly $IFDEFed it out. Must be some error in the C3 parser that is
causing it to see this unit, and in C3 this unit is some design-time unit or
something. It results in the IDE continuously inserting DCLSTD35.LIB into
the project file, and there's no such file. Manually removing it from the
project does not help, it just sticks it back in. The only way to get it to
stop is to manually edit the code and remove the reference to ImgList, or to
not include the source file in the package. Bizarre.
* C++Builder 3 users: You must edit the source files to remove the ImgList
unit from the uses clauses of the units. I have properly $IFDEFed out
this unit, but some error in the C3 parser is causing it at some point to
see this unit, and in C3 this unit is some design-time unit or something.
It results in the IDE continuously inserting DCLSTD35.LIB into the project
file, and there's no such file. Manually removing it from the project
does not help, it just sticks it back in. The only way to get it to stop
is to manually edit the code and remove the reference to ImgList. Bizarre.
* None of the demos are probably going to work well with all the new stuff.
It's late and I really want to get this stuff out, so I'll update them
in the next version.
* The list view incorrectly thinks that some folders contain file system stuff
when the really don't. For example, it thinks the Control Panel folder
does, so it get's all the columns for a file directory list. This is a bug
introduced with the new way of doing things in v0.96 and I've not yet been
able to figure it out. If anyone has any clues, I'd really appreciate it.
It didn't happen in v0.95, but things were a lot different in the list
population in that version.
* Combo box does not like working with a treeview that doesn't have rfDesktop
as it's root node. I'm not sure if you'd really ever need to have a combo
that used something besides the desktop as a root, so at this point and not
going to invest the somewhat large amount of time to work on doing it. If
you do need this, let me know and I'll add it to the to-do list.
* The tree is hitting the all the sub nodes of a just expanded node again.
For example, when you expand the "My Computer" node, it hits each item; one
of those is likely a floppy drive, and that slows things down as it cranks
on it for a second. No error message, but the delay is irritating. And I
fixed it once before, too!
* Changing the RootFolder of a tree doesn't update a linked listview at design
time. This saved me a ton of work, and it's really not that important at
design-time anyway, is it?
* Double clicking on a computer name in a listview that is linked to a
rfNetHood rooted treeview will not move into that computer.
* If using the Checkboxes property and you cause the treeview window to be
recreated by doing something like changing the BorderStyle property or
something, the checked values will be lost. I will fix this in the future.
* Changing the Color property to anything other than clWindow is strongly
discouraged. The images will still use the clWindow color as their
background, so you'll end up with a pretty odd looking tree/list. The
reason is that if I changed the background color of the image list(s), it
would effect the entire system. That is, Explorer would then have a
tree/list with a clWindow background color but the images would have your
new color around them. The image lists are a shared, system-wide resource
and a change like this simply can not be allowed. There is one alternative:
a copy of the system image list can be made, and that used instead of the
real system image list. It can be changed in any way without effecting the
rest of the system. The problems I have with this are: 1) It's an awful
lot of trouble to implement, 2) It's generally very slow since the system
image list is quite large. You'd have a delay of a second or three before
your app started. If enough people ask me for this to be added, I will
reconsider, but for now I'm just considering it a known issue.
Beta Revision History:
0.98.5 + Added RecreateColumns method to TdfsSystemListView.
+ Fixed problem with SetColumnWidths not using new values until window
was recreated or repopulated.
+ Updated for Delphi 6 compatibility. See updated install directions
above.
0.98.4 + Updated for C++Builder 5 compatibility.
0.98.3 + IShellDetails stuff in SystemControlPack.pas has been removed. I was
investigating this, but found out it was only available on Windows
2000. It was causing compiler problems for C++Builder, so I've
removed it from the source entirely (it was never being used).
+ Fixed problem with FileMask in tree view.
+ Fixed memory leak problem with list view.
0.98.2 + Fixed some nasty problems with rfFileSystem RootFolder type.
+ Fixed bizarre D5 problem with deleting a tree from a form in the IDE.
+ Fixed problem with main win hook not being released when component
was destroyed. Thanks to Matthieu Roger for this.
0.98 + Fixed redeclaration problem in C++Builder 3.
+ Fixed nasty recursion bug when using rfFileSystem RootFolder value.
+ Bill Miller was nice enough to do a component bitmap for the combo box.
+ Had some problems with right-click not bringing up the context menu
in the system and list view under D5. Fixed.
+ Deleting a file in a root directory would cause the list view to "fall
up" one level higher that where it was supposed to be on refresh.
+ Fixed a couple of problems having to do with the read delay timer.
Could totally break it if window handle was recreated. Could get
"Control has no parent window" errors.
+ Changing treeview file mask to exclude the currently selected filename
would cause trouble.
+ Removing a directory that was the selected directory would not refresh
the display.
+ Updated information about the DCLSTD35.LIB Known Issue in C3. See
above.
+ I've removed the TFolderItemData.FileSize property for C++Builder 1 &
3. They didn't work because I use the Delphi Comp data type, and
while Builder has a Comp class for this type of thing, it won't
automatically support Delphi code using Comp. If you need the file
size in C1/C3, you'll have to use the FileSizeHigh and FileSizeLow
properties. If FileSizeHigh is not zero, you know you have a big file
and that you'll have to do the 64-bit math yourself.
+ Resetting would not always do a "full" reset. The system will cache
some kinds of information, and you have to manually invalidate that
cache. The most obvious manifestation of this problem was with a
CD-ROM drive. Resetting would update the item's image, but would not
update it's text.
+ Changing a CD would not update the display.
+ Tree and list view item context menus now show and handle the Rename
context menu item.
0.97 + Delphi 5 compatibility.
+ Renamed to include the 'dfs' prefix in the component name.
+ The DFS_STV_FASTMODE and DFS_SLV_FASTMODE defines were broken (code
wouldn't compile). Thanks to Felipe Rocha Machado for catching this.
+ Sort column/direction of list view wasn't preserved when directory was
changed.
+ Added ChangeToParent methods in tree, list and combo to move up one
level, i.e. "cd .."
+ Added Known Issue item for C++Builder 3 users. See above.
+ Changing FileMask property of listview at run-time would not refresh
the list. Fixed. Thanks to Tamas Demjen for this.
+ DFS_SLV_FASTMODE conditional define has been removed.
+ Setting the tree view Selection property to a UNC path wouldn't work
correctly (i.e. something like \\someserver\somepath\someotherpath).
Lennert Ploeger was kind enough to figure out what was going on and
fix it.
+ FileMask in the tree view was totally broken. Lennert also help on
this one.
+ I think I finally got rid of that pesky removable drive spinning when
it's parent is selected once and for all.
+ Tamas Demjen sent me code to make the combobox respond better to font
changes.
+ Nasty problem fixed when something caused the combobox to be recreated.
Thanks to Joachim Jo Samstag for his help on this.
+ Under Delphi 2, 3, C++Builder 1, and 3 the Color property would not be
honored by the tree or list because of a VCL bug. This was fixed in
version 4 (of both). I've added code sent to me by Chris Wallace to
work around it in prior versions. Many thanks to him.
0.96 + Moved a lot of PItemIDList helper functions into a seperate unit named
PidlHelp. This is mostly an internal thing, and shouldn't effect
component users.
+ Marked public Reset methods as virtual for you folks who want to write
descendants.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -