MagicRAR includes a full disk compressor at [url removed, login to view] and we want to enhance this utility with a live display of the disk map of the current hard drive being compressed. MagicRAR's full disk compressor works with multiple threads, and this also needs to be factored into the disk map display. The disk map display must be built in Delphi 7 and should be a visual VCL control. The major properties that we will pass to the control are:
(1) The number of active threads running,
(2) The completed percentage of the operation,
(3) The drive letter being compressed (so your component can directly query the drive for the current amount of free space and available space),
(4) Whether the current operation is disk compression or disk decompression,
(5) Whether the operation is currently active or not.
The component will then be responsible to draw the disk map, including animations for reading and writing data to/from disk that are triggered at regular (artificial) intervals, simply based on the above information.
Please take a look at the attached screenshots of Norton's original SpeedDisk product from DOS. This is the exact look and feel (in so far as the drive map display is concerned) that we are trying to capture. You will need to replicate only the drive map portion of this display inside the visual VCL control for Delphi 7. Try to be as faithful to the original as possible, but you may propose some artistic modifications and we will consider the best looking one. Some detailed discussion of the screenshots:
a) [url removed, login to view] displays a drive before any processing has begun. SpeedDisk is for defragmentation, therefore it displays used disk areas, partially used disk areas, and unused areas using different kinds of blocks. It also displays a more or less accurate picture of how the data has been laid out on the drive. We do not require a fully accurate disk map, especially in terms of actual layout of files and free space, since our tool is for compression, and not disk defragmentation - but this would be a bonus, if it could be arranged.
b) [url removed, login to view] displays a disk that has been completely defragmented. Notice that the finished blocks are highlighted in yellow. You should also render in yellow portions of the disk that have been processed already, based on the value of the percentage complete that has been passed to the component in a property. Your component may need to internally store the amount of free space when progress is set to 0% by the caller application, so that it can refer to the amount of free space again when progress is increased to, for example, 1%, and accurately reflect this on the disk map status display. Keep in mind that your component will need to take into account both an increase in free disk space, and a decrease in free disk space.
c) [url removed, login to view] displays a disk that is in the process of defragmentation. This is a different disk defragmentation utility and is NOT the look that we want to capture, but it has been included here to illustrate a point. Notice the the gray "W" block. This stands for "writing data to this block". When reading data, a similar block with lower case "r" is used, which indicates "reading data from this block". It was not possible to obtain these screenshots from Norton directly, but Norton uses the same "r" and "W" letters to indicate the place on disk where it is current reading from/writing to. The only difference in Norton is that the background of the blocks is blue, instead of gray. So that is the look you will need to replicate. But there is also an additional consideration. Since there will be multiple threads running, your disk map component will need to take this into account. So if there are 12 threads running; your disk map should have 12 "r" or 12 "W" or a combination of those active on the disk map. Try to make the disk map look aesthetically pleasing, taking this into account.